本日Mysqlにトラブルがありました、その際の復旧方法をメモしておきます。
さっそくサーバにログインして、確認してみるとMysqlのプロセスは確認できました。
Mysqlに接続を試みるものも接続できず。
とにかく、一度再起動を行ってみました。
1 2 3 4 |
#/etc/rc.d/init.d/mysqld restart Stopping MySQL: [ OK ] Timeout error occurred trying to start MySQL Daemon. Starting MySQL: [FAILED] |
停止はできるが起動ができませんでした。
解決方法
こういう時は、かならずログにヒントが隠されているのでさっそくログを確認する。
ログの場所はこちら:/var/log/mysqld.log
やはりログに答えは書いてありました、mysqlslow.log に問題ありとのこと。
このログファイルは、SQLの実行が5秒以上かかった場合に残すようにように設定していたログです。
1 2 3 4 5 6 7 |
# tail /var/log/mysqld.log 110312 17:01:13 [ERROR] /usr/libexec/mysqld: Error writing file '/var/run/mysqld/mysqld.pid' (Errcode: 28) 110312 17:01:13 [ERROR] Can't start server: can't create PID file: No space left on device Number of processes running now: 0 110312 17:01:13 mysqld restarted /usr/libexec/mysqld: Error writing file '/var/log/mysqlslow.log' (Errcode: 28) 110312 17:01:13 [ERROR] Could not use /var/log/mysqlslow.log for logging (error 28). Turning logging off for the whole duration of the MySQL server process. To turn it on again: fix the cause, shutdown the MySQL server and restart it. |
さっそくmysqlslow.logを調査してみる。
mysqlslow.logのサイズが4GB以上になっている。。。。。
とりあえず、ファイルを退避させる。
その後Mysqlの起動を試みる。
1 2 |
# /etc/rc.d/init.d/mysqld start Starting MySQL: [ OK ] |
見事に起動。
課題
上記の対応で、サービスは稼動しましたが、いろいろと課題あります。
- 1.ログファイルにローテションを組むようにしとけ!!
- 2.Nagiosで監視してるけど、今回の現象はプロセスは生きているので発見できず、、、監視体制の見直し
- 3.SQLが5秒以上もかかっているプログラムを潰さないと。。。
恐らく、ログは一時期サーバに高負荷に陥ったときに増産されたと思うんんですが、でも対策しないと