반응형

1. 설치중 문제점 발견

MariaDB 최근버전으로 성능테스트를 하려고 virtualbox에서 10.4.13 버전을 받아 DB를 설치하고 start까지는 성공하였다.

[mysql@localhost bin]$ service mysqld start
Starting MariaDB.201021 16:14:13 mysqld_safe Logging to '/svc/mariadb_logs/error/mysql.err'.
201021 16:14:13 mysqld_safe Starting mysqld daemon with databases from /svc/mariadb_data
                                                           [  OK  ]

별로 달라진 건 없네..라고 생각하고 stop을 해보았는데 .. 어떤 로그도 없이 그냥 안된다. ???

 

[mysql@localhost bin]$ service mysqld stop 

//멍때리고 아무것도 안됨;; mysql.error 로그도 없음

 

ps -ef로 프로세스를 확인해보니 아래와 같다.

mysql    30913     1  0 11:12 pts/0    00:00:00 /bin/sh /svc/mariadb/bin/mysqld_safe --datadir=/svc/mariadb_data --pid
mysql    31151 30913  0 11:12 pts/0    00:00:00 /svc/mariadb/bin/mysqld --basedir=/svc/mariadb --datadir=/svc/mariadb_
mysql    31220  1957  0 11:12 pts/0    00:00:00 /bin/sh /sbin/service mysqld stop
mysql    31227 31220  0 11:12 pts/0    00:00:00 /bin/sh /etc/init.d/mysqld stop
root     31393 31227  0 11:12 pts/0    00:00:00 su - mysql -s /bin/sh -c kill -0 31151 // 음..su권한으로 하는데 mysql계정권한으로 실행해서 안되는 거였다.

이렇게 되면 스크립트를 까봐야하는데 수정범위가 크면 버그잡는게 더 시간이 많이 뺏길거 같아서..

가장최근 버전인 10.4.15 을 가져다 설치했지만, 동일한 현상이 발생했다.
그럼 정책적으로 shutdown은 su권한에서만 가능하도록 스크립트를 업데이트했다는건지?

보안강화? 근데 대부분 이중화하고..mysql계정으로 접속해서 처리하는데..
그냥 시간이 좀 걸리더라도 mysql 계정으로 shutdown이 가능하도록 수정하기로 했다.

 

2. 스크립트 수정

vi로 mysql.server 스크립트에서 stop 부분확인

su_kill() {
  if test "$USER" = "$user"; then
    kill $* >/dev/null 2>&1
  else
    su - $user -s /bin/sh -c "kill $*" >/dev/null 2>&1
  fi
}


  'stop')
    # Stop daemon. We use a signal here to avoid having to know the
    # root password.

    if test -s "$mysqld_pid_file_path"
    then
      mysqld_pid=`cat "$mysqld_pid_file_path"`

      if su_kill -0 $mysqld_pid ; then
        echo $echo_n "Shutting down MariaDB"
        su_kill $mysqld_pid
        # mysqld should remove the pid file when it exits, so wait for it.
        wait_for_gone $mysqld_pid "$mysqld_pid_file_path"; return_value=$?
      else
        log_failure_msg "MariaDB server process #$mysqld_pid is not running!"
        rm "$mysqld_pid_file_path"
      fi

      # Delete lock for RedHat / SuSE
      if test -f "$lock_file_path"
      then
        rm -f "$lock_file_path"
      fi
      exit $return_value
    else
      log_failure_msg "MariaDB server PID file could not be found!"
    fi
    ;;

10.3.x버전과 비교해보니 10.4.x버전에는 su_kill() 라는 함수가 추가되어있는데

if test "$USER" = "$user"; then 부분에서 $user는 mysql로 박혀있고 $USER는

basedir 에서 가져오도록 되어야 하는데 제대로 값을 못가지고 온다.

이 부분에 문제가 있어서 su_kill()이 else로 빠져서 su 권한으로만 실행되도록 해서 불편함이 있다.

수정될 때까지 su_kill()을 사용하는 부분 다 찾아서 주석처리하고 kill로 바꾼다.

 

수정파일

mysql.server
0.01MB

 

3. 테스트

[mysql@localhost bin]$ service mysqld stop
Shutting down MariaDB..                                    [  OK  ]

잘된다. 끝~

반응형
블로그 이미지

dung beetle

취미는 데이터 수집 직업은 MYSQL과 함께 일하는 DBA의 소소한 일상 이야기

,