AWSにWordPressをインストールしてブログを始めて1年ちょっとですが、頻繁に発生するのがこの問題です。
このデータベース接続確立エラーの対処としては以前からいろいろ試しておりまして ・AWSでWordPressやってて頻繁にmysqlがデータベース接続確立エラーでダウンする現象の回避策 ・ブログがブルートフォースアタックを受けてダウンした話 そのたびに上記のような対処を施してきたんですが、それでもたまにいつのまにかmysqlが落ちていることがあります。落ちた場合はmysqlを手動で起動するか、EC2インスタンス自体を再起動して自動で立ち上がるのを待っているんですが、常にブログが落ちていないかチェックするわけにもいかないし、タイムラグも発生するため、自動でチェックして落ちてたら起動させることにしました。
本当はMackerelで監視もしているので、そこで落ちていたら起動スクリプトを叩くなんてのがスマートなんでしょうけど、めんどくさかったのでcronでシェルスクリプトを毎分実行することにしました。
cron
* * * * * /usr/local/bin/mysql-check.sh
/usr/local/bin/mysql-check.sh
#!/bin/sh
isAlive=`ps auxwww | grep mysql | grep -v grep | wc -l`
#echo `date "+%Y/%m/%d-%H:%M:%S"` mysql alive check >> /usr/local/bin/mysql-check.log
if [ $isAlive -ne 4 ]; then
echo `date "+%Y/%m/%d-%H:%M:%S"` mysql is down!!!!! >> /usr/local/bin/mysql-check.log
/etc/init.d/mysqld start >> mysql-check.log
fi
まぁ、なんてことない原始的な方法なんですが、これで1分置きにプロセスが落ちていないかチェックしてくれて、落ちてたら起動までしてくれます。根本的な原因解決としては、たぶんPVがそこそこ(月間3万くらい)増えてきているのでインスタンスのスペックアップ(いまだにmicroインスタンス)とかになっちゃうんじゃないかなと思っていますが、これで延命措置はできるんじゃないかと思うので、しばらく様子見です。
もっといい方法があったら教えてください。