😴
WordPressの運用で「データベース接続確立エラー」が頻発するのでMonitでMariaDBを自動復旧
はじめに
これまでAWS LightsailやGCP Compute EngineでWordPressを運用していると、データベースが停止して「データベース接続確立エラー」と表示される状況が頻発していました。AWS Lightsailのときはメモリーを1GBに増やしたらエラーがなくなったのですが、GCP Compute Engineはメモリーが1GBのインスタンスでもエラーになってしまいました。
データベースが停止するとSSHでログインしてデータベースを起動していました。さすがにその作業を続けるのは面倒だったので、サービスの稼働状況を監視して自動的に再起動する方法をさがしていたら以下の記事を見つけました。
セットアップ
Monitをインストールします。
sudo apt install monit
デフォルトではMariaDBの設定ファイルはなかったので、MySQLの設定ファイルにシンボリックリンクを張ります。
sudo ln -s /etc/monit/conf-available/mysql /etc/monit/conf-enabled/
設定ファイルの一部を以下のように変更します。
/etc/monit/conf-available/mysql
check process mysqld with pidfile /var/run/mysqld/mysqld.pid
group database
group mysql
+ start program = "/etc/init.d/mariadb start"
+ stop program = "/etc/init.d/mariadb stop"
- start program = "/etc/init.d/mysqld start"
- stop program = "/etc/init.d/mysqld stop"
if failed host localhost port 3306 protocol mysql with timeout 15 seconds for 3 times within 4 cycles then restart
if failed unixsocket /var/run/mysqld/mysqld.sock protocol mysql for 3 times within 4 cycles then restart
if 5 restarts with 5 cycles then timeout
depend mysql_bin
depend mysql_rc
check file mysql_bin with path /usr/sbin/mysqld
group mysql
include /etc/monit/templates/rootbin
+check file mysql_rc with path /etc/init.d/mariadb
-check file mysql_rc with path /etc/init.d/mysqld
group mysql
include /etc/monit/templates/rootbin
Monitをリロードして設定を反映します。
sudo systemctl reload monit
Monitを自動起動するように設定します。
sudo systemctl enable monit
動作確認
MariaDBを停止します。
sudo systemctl stop mariadb
WordPressにアクセスすると「データベース接続確立エラー」と表示され、数分後にアクセスしたら復旧していたので、MonitがMariaDBを起動してくれたことが確認できました。
おわりに
データベースはクラウドサービスを利用することが多くなり、自分で運用する機会は少なくなりました。でも、自分で運用できるようにしておくことも大事かなと思って、今回のような機会を活かして自分の知識をアップデートしていきたいと思います。
Discussion