【WordPress】「データベース接続エラー」の原因と解決法

サーバー

当ブログと月間15万PVほどあるWebサイトを運営している筆者。

どちらもWordPressで運用しているのですが、月に1~2回は突然「データベース接続エラー」が発生し、サイトが落ちてしまいます。

今回はこの問題の原因と解決法をご紹介します。

スポンサーリンク

原因:メモリ不足によるMySQL(MariaDB)のダウン

ほとんどの場合、「メモリ不足によるMySQL(MariaDB)のダウン」が原因です。

サーバーのコンソールでデータベースの稼働状況を確認しましょう。動作が停止していることが確認できると思います。

LinuxにはOOM-Killer(Out-of-memory Killer)という機能が搭載されており、メモリが不足すると、メモリを多く消費しているプロセスから強制終了を行います。

MySQLはメモリ消費が大きいほうなので、Webサイトへのアクセスが集中するなどしてメモリ不足が起こると、まずもってMySQLもkillされてしまいます。

結果的にデータベースにアクセスできない=「データベース接続エラー」が発生するというわけです。

スポンサーリンク

対策:メモリを増やす+OOM-Killerの監視対象から外す

対策は次の2つです。

  • メモリを増やす
  • OOM-Killerの対象から外す

メモリを増やす

一番かんたんなのはメモリを増やすことです。

メモリに余裕があれば、OOM-Killerも発動しなくなり、サーバーの動作にも余裕が出ます。普段から空きメモリに余裕がない場合はメモリを追加したほうがいいでしょう。

OOM-Killerの監視対象から除外する

一方で、Webサーバーのメモリ使用率は、アクセス状況によって大きく変動します。

どんなにメモリを増やしたところで、アクセスが集中したときにメモリ使用量が瞬間的に増加し、OOM-Killerが発動する可能性は完全には排除できません。

そこで、OOM-Killerの対象からMySQLを外すことにします。

サービスの定義ファイルでOOMScoreAdjustという数値を設定すると、OOM-Killerの監視対象から除外することができます。MySQL(MariaDB)のサービス定義ファイルを編集し、OOM-Killerの監視から除外します。

# systemctl edit mariadb.service

エディタが開くので、以下を追加します。

[Service]
OOMScoreAdjust=-1000

セーブしてmysqlを再起動します。

# systemctl restart mariadb.service

これにより、どんなに空きメモリに余裕がなくなっても、MySQLはkillされなくなります。

まとめ

今回はWordPressのデータベース接続エラーの解決法についてご紹介しました。

「ちゃんと稼働できていたのに、ある日突然データベース接続エラーが出てしまう」というケースでは、ほとんどがメモリ不足によるMySQLのダウンが原因です。

メモリ増設に加え、OOM-Killerの設定を調整することで、意図しないデータベースのダウンを避けることができますよ。

コメント

タイトルとURLをコピーしました