WordPressが突然“データベース接続エラー”に―小型VPSでのMySQL安定化手順

Web

※本記事は検証用サーバーで行った手順をもとに執筆しています。 本番環境で設定を変更する際は、必ずバックアップを取った上で実施してください。

先日、WordPress サイトにアクセスすると「データベース接続確立エラー」と表示され、MySQL が再起動を繰り返す事態が発生しました。
調査の結果、原因はメモリ不足であり、スワップ領域の追加と MySQL 設定の軽量化で解決しました。

本記事では、実際に行った手順と学びを記録します。

ワードプレス接続確立エラー
ワードプレス接続確立エラー

環境

項目 内容
OS Ubuntu 24.04 LTS
サーバータイプ VPS(メモリ 1GB)
データベース MySQL 8.0 系
CMS WordPress
問題の症状 「データベース接続確立エラー」+ MySQL の再起動ループ

問題の概要

データベース接続エラー発生後 再起動すると一時的に動作するが、 しばらくすると再びデータベース接続エラーとなる。 以下のように、systemctl status mysql では繰り返し起動失敗を検出:

mysql.service: Main process exited, code=exited, status=1/FAILURE
mysql.service: Failed with result 'exit-code'.

また、sudo journalctl -u mysql.serviceでは以下のように MySQL が数秒おきに再起動を繰り返していることが確認できる

Nov 11 11:11:02 host_name systemd[1]: mysql.service: Scheduled restart job, restart counter is at 636.
Nov 11 11:11:02 host_name systemd[1]: Starting mysql.service - MySQL Community Server...
Nov 11 11:11:04 host_name systemd[1]: mysql.service: Main process exited, code=exited, status=1/FAILURE
Nov 11 11:11:04 host_name systemd[1]: mysql.service: Failed with result 'exit-code'.
Nov 11 11:11:04 host_name systemd[1]: Failed to start mysql.service - MySQL Community Server.
Nov 11 11:11:04 host_name systemd[1]: mysql.service: Scheduled restart job, restart counter is at 637.
Nov 11 11:11:05 host_name systemd[1]: Starting mysql.service - MySQL Community Server...
Nov 11 11:11:07 host_name systemd[1]: mysql.service: Main process exited, code=exited, status=1/FAILURE

調査内容

0. 問題の切り分け

WordPressのエラー表示がブラウザで確認できる
    → Ubuntu・Webサーバー・WordPressは正常に稼働している。
    → 再起動したらしばらくはサイト全体が正常に動くので認証はできている。
⇒ データベースが動作中にクラッシュしている

1. メモリ状況を確認

free -h

結果:

               total        used        free      shared  buff/cache   available
Mem:           961Mi       892Mi        58Mi        99Mi       253Mi        68Mi
Swap:             0B          0B          0B

2行目から、MySQLが起動していないにもかかわらず、892/961 MB を使い果たしていることが分かります。

3行目を見てみるとスワップ領域が存在せず、MySQLを起動すると物理メモリが枯渇することが分かりました。

解決策の概要

スワップ領域を追加し、MySQL のメモリ使用量を調整することで安定化。

スワップとは?

スワップとは、メモリが足りなくなったときにディスク上の一部を仮想的なメモリとして使う仕組みです。
物理メモリ(RAM)が1GBしかない環境では、MySQL や PHP が同時に動作するとすぐに足りなくなります。

スワップを設定しておくと、少なくとも「落ちずに耐える」ことができるようになります。


実際に行った解決手順

① 現在のメモリ状態を確認

どれだけ空きがあるかをチェック:

free -h

② 1GB のスワップファイルを作成

メモリ不足時に使われる仮想領域を作る:

sudo fallocate -l 1G /swapfile

③ アクセス権を変更

セキュリティのため root のみアクセス可能に:

sudo chmod 600 /swapfile

④ スワップ領域として初期化

作成したファイルをスワップ用に設定:

sudo mkswap /swapfile

⑤ スワップを有効化

すぐに利用可能にする:

sudo swapon /swapfile

⑥ スワップの状態を確認

有効になったか確認:

free -h

結果:

Swap: 1.0Gi  0B  1.0Gi

⑦ 永続化設定

再起動後もスワップが有効になるよう設定:

sudo nano /etc/fstab

/etc/fstabの末尾に以下を追記:

/swapfile none swap sw 0 0

⑧ MySQL のメモリ使用量を抑える設定

MySQL の設定を軽量化して安定動作を確保:

sudo nano /etc/mysql/conf.d/lowmem.cnf

以下のように編集・追記:

[mysqld]
innodb_buffer_pool_size = 128M
key_buffer_size = 8M
table_open_cache = 200
max_connections = 50

⑨ MySQL を再起動して反映

sudo systemctl restart mysql

正常に起動したことを確認:

sudo systemctl status mysql

結果

  • MySQL が安定して起動するようになった
  • WordPress の「データベース接続確立エラー」が解消
  • メモリ使用率が安定し、再起動ループが消滅

学び

  • 低メモリ環境では スワップ領域が生命線
  • MySQL の起動失敗は「設定ミス」でなく「メモリ枯渇」であることも
  • スワップ+軽量設定で、1GB サーバーでも十分運用可能

まとめ

項目 内容
原因 メモリ不足による MySQL 強制終了
対応 スワップ 1GB 追加+MySQL 設定軽量化
設定変更値 innodb_buffer_pool_size=128M, key_buffer_size=8M, table_open_cache=200, max_connections=50
効果 MySQL が安定して起動・稼働
学び スワップを設定しない VPS は非常に不安定になる

結論: 小容量VPSでは、「スワップを確保し、メモリ設定を見直す」 ことで MySQL を安定運用させることができます。 再起動で一時的に直っても、根本的な解決は“リソース管理”にあります。

コメント

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