MySQLが再起動しなくなったときに行う3つの手順

こんばんは、ヱビス(@evisu_phper)です。

今日は、突然MySQLが再起動しなくなったときの対処方法をまとめておきます。

突然MySQLが動かなくなる

元気に稼働していたMySQLを、再起動させた時に応答が返ってこなくなるという現象があります。

トラブルで止まるのとは違う、人為的に引き起こしたことによる停止なので、実行した者としては、嫌な汗が出てしまいます。

# service mysqld restart
Timeout error occurred trying to stop MySQL Daemon.
Stopping mysqld: [FAILED]
MySQL Daemon failed to start.
Starting mysqld: [FAILED]

この状態になると、何をしても戻ってきてはくれません。

まずは、ログを見よう

冷静になって、何が起きているかを確認する必要があります。

MySQLのエラーログは下記の場所に保存されています。

# tail -f /var/log/mysql/mysqld.log

もし、ファイルが無いと怒られたら下記の手順でログファイルの保存先を確認してください。

(1)lessコマンドで「/etc/my.cnf」にアクセスしてみる。

# less /etc/my.cnf

(2)「/log」でログが書かれている行を検索する

(3)「log_error=”◯◯”」と書かれているので、メモしておく。

log_error="/var/log/mysql/mysqld.log"

ダブルクォーテーションに囲まれたパスが、ログファイルの保存先になります。

ログファイルの中身をみてみると下記のようなエラーメッセージがあれば、解決できそうです。

180505 07:38:48 mysqld_safe A mysqld process already exists

エラーの内容は、既にMySQLのプロセスが動いているため、起動できない書かれています。

プロセスを停止させる

MySQLが起動しない理由は、分かりました。

「既にMySQLのプロセスが動いている」ということなので、動いているプロセスを止めてみましょう。

まずは、どういったプロセスが動いているのかを確認します。

# ps aux| grep mysqld
root 6601 0.0 0.0 108340 568 ? S Jan20 0:02 /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql --socket=/var/lib/mysql/mysql.sock --pid-file=/var/run/mysqld/mysqld.pid --basedir=/usr --user=mysql
root 17041 0.0 0.0 103308 852 pts/0 S+ 07:41 0:00 grep mysqld
mysql 27845 184 35.7 7125032 686432 ? Sl May04 2816:57 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --log-error=/var/log/mysql/mysqld.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/lib/mysql/mysql.sock --port=3306

真ん中の「grep mysqld」というのは、現在一覧を表示するために実行したコマンドのプロセスなので無視します。

問題はプロセス番号「6601」と「27845」です。
※プロセス番号は、状況によって異なるので、実際に表示された番号をみてください。

次に、この2つのプロセスを停止させます。

# kill -9 6601
# kill -9 27845

「killコマンド」のオプションで付けている「-9」は、「強制終了」のシグナルIDになります。

オプション無しだと「終了」を実行してくれるのですが、それでは停止させることができない場合があります。
さらに強い力がある「強制終了」で、停止させます。

改めてMySQLを起動させる

プロセスを停止させたら、再度MySQLを起動させてみます。

# service mysqld start
Starting mysqld: [ OK ]

無事に、MySQLが起動しました!

まとめ

今回は、「既にMySQLのプロセスが動いている」ことが原因で、MySQLが起動しなかったパターンでした。

他のパターンでも、まずは冷静になり、次にログファイルを確認して、何が起こっているのかを調べるように進めていけば、問題を素早く解決できるかと思います。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です