본문 바로가기

Database/mariaDB administrator

MariaDB server PID file could not be found! 에러 조치 방법

MariaDB server PID file could not be found! 에러 조치 방법

 

안녕하세요.

 

service mysql restart

명령을 통해서 mariadb를 재시작하려고 할 때, 아래와 같은 에러 메시지가 떠서 이 블로그를 찾으셨을 걸로 생각이 됩니다.

MariaDB server PID file could not be found!

또는?!

MySQL server PID file could not be found!

아래 사진을 참고해 주세요!

mysql 역시 마찬가지입니다. 아래와 같은 메시지가 뜹니다.

☆원인

MySQL/MariaDB 데몬의 PID 값을 가지고 있는 파일이 없어서 일어나는 현상입니다. 어느 데몬을 죽여야 할지 알 수 없기 때문이지요.

 

직접 Mariadb 또는 MySQL 데몬의 PIC를 찾아서 종료 할 수 있지만, 바로 mysqld 데몬이 다시 올라오기 때문에 또 동일한 현상이 벌어지게 됩니다.

우리가 사용하는 CentOS나 우분투등의 리눅스는 내부적으로 /tmp , /var/tmp 내 특정 파일을 Daily Cron crontab을 통해서 삭제를 하고 있습니다. 해당 cron 프로그램의 경로는 아래와 같습니다.

cat /etc/cron.daily/tmpwatch

 위 파일을 열어서 보면 아래와 같은 내용을 가지고 있습니다.

#! /bin/sh
flags=-umc
/usr/sbin/tmpwatch "$flags" -x /tmp/.X11-unix -x /tmp/.XIM-unix \
        -x /tmp/.font-unix -x /tmp/.ICE-unix -x /tmp/.Test-unix \
        -X '/tmp/hsperfdata_*' 10d /tmp
/usr/sbin/tmpwatch "$flags" 30d /var/tmp
for d in /var/{cache/man,catman}/{cat?,X11R6/cat?,local/cat?}; do
    if [ -d "$d" ]; then
        /usr/sbin/tmpwatch "$flags" -f 30d "$d"
    fi
done

소스를 보게되면 -x 옵션을 제외한 나머지 /tmp 파일을 10일이 지난 이후 삭제하도록 되어 있고, /var/tmp는 30일 이후 삭제하도록 되어 있습니다.

 

☆해결방법

해결방법은 크게 2가지가 있습니다.

첫번째 방법 : my.cnf 파일에 /tmp 디렉터리가 아닌 다른 디렉터리에 저장하도록 설정하는 방법.

두 번째 방법 : 위에서 확인한 /etc/cron.daily/tmpwatch에 "-x /tmp/mysql.pid"를 추가하여 10일이 지나도 삭제되지 않도록 하는 방법이 있습니다.

 

☆긴급대처

지금 당장 MySQL이나 Mariadb를 재시작 해야 한다면 아래와 같은 방법을 이용해 보시기 바랍니다.

 

ps -ef | grep mysqld 의 결과 중 (mysqld_safe 가 아닙니다.) mysqld의 pid로 pid 파일을 생성합니다.

 

예를 들자면 아래와 같은 것 이죠.

 $> ps -ef |grep mysql

 

root    14426     1  0 12:54 pts/0    00:00:00/bin/sh /home/mysql/mysql/bin/mysqld_safe--datadir=/usr1/mysql/DBSpace_host_m/DATA --pid-file=/tmp/mysqld_host_m.pid

 

mysql    15000 14426 38 12:54 pts/0   00:00:08 /usr1/mysql/mysql/bin/mysqld --basedir=/usr1/mysql/mysql--datadir=/usr1/mysql/data--plugin-dir=/usr1/mysql/mysql/lib/plugin --user=mysql--log-error=/usr1/mysql/data/error.log --open-files-limit=65535--pid-file=/tmp/mysql.pid--socket=/tmp/mysql.sock --port=3306

 

root     15866 2603  0 12:54 pts/0    00:00:00 grep mysqld

 

$> echo 15000 > /tmp/mysqld.pid

$> service mysqld stop

위와 같이 "echo15000>/tmp/mysql.pid" 명령을 이용해서 mysql.pid 파일을 강제 생성하면 됩니다.

 

잘 해결되셨길 바랍니다.

 

감사합니다!!

 

 

by.sTricky