mysql【Can't connect to local MySQL server through socketでエラーした】
昨日何気なくテスト環境のゲストOSのshutdownコマンドをサボってvirtualboxのウィンドウの×ボタンで閉じようとしたのだけど、どうも正常にshutdownされなかった。
1晩経っても停止中のステータスから変わらないので仕方ないからホスト側windowsのタスクマネージャーから強制的に終了。
virtualboxのステータスが中止に変わり、いざ起動をかけてみると、どうもmysqlにphpから接続できない模様。
Can't connect to local MySQL server through socketとブラウザに表示された。
ゲストOSの環境は
・centOS : 6.5
・mysql server version : 5.1.71
(・php5.3.3)
調査開始。
#vi /var/log/mysqld.log
で見てみると、最後のログが、昨日のstartの記録だった。昨日stopした記録や、chkconfigで自動で立ち上がるようにしているはずだが、今日startした記録がない。確実に正常にシャットダウンできなかったことが原因みたいだ。
#/etc/init.d/mysqld start
でmysqldを立ち上げようとするも失敗
でmysqlが使用するはずの「3306ポートはすでに使用されている」みたいなアラートが出た。
#/etc/init.d/mysqld stop
は成功した。
でもこの後、
#/etc/init.d/mysqld start
をすると先ほどと同じようなメッセージがでる。
もう一回
#/etc/init.d/mysqld stop
をしてみると、さっきストップしてその後スタートに成功していないはずだから失敗するのかと思いきや成功した。
う~ん。何でだ。
#netstat -tanp
で検索してみてmysqlが起動していないことを確認。
いったん再起動してみよう。
#shutdown -r now
shutdown中に普通なら
httpdをstopしているよー OK
mysqldをstopしているよー OK
みたいなコンソールが表示されるはずだけど、この再起動では「mysqldをstopしているよー」は表示されなかった(ように思う。すみません、不確か)。
そんで起動されたから直ったかなと思って、もう一度phpからmysqlを呼んでみたけど、現象は解消されず。。。
んで、ぐぐって見て、結構同様の問題で悩んでいる人がいるみたい。
どうも/var/lib/mysqlにあるmysql.sockが悪さしているようだということがわかり、また、このファイルの作成日時が
#ls --full-time /var/lib/mysql
で表示してみると昨日のmysqlの起動時間になっていて、かつ空ファイルということがわかり、どうもmysql.sockはmysqld起動時に自動作成をするファイルのようなので念のためスナップショットを撮って削除した。
そして、
#/etc/init.d/mysqld start
すると見事に成功。
無事mysqlの起動ができました。
細かいところまで原因を正確に突き止められなかったけど、テスト環境だし、開発も追われているので今回の調査はこれでひとまず終了。