2026年5月20日
2026年5月20日
データベース接続数の上限に達した場合の解決方法【Too many connections】
はじめに
Webサーバーのエラーログに「Too many connections」と記録されてWordPressがデータベース接続エラーになる場合、MySQLの同時接続数の上限に達している状態です。突然のアクセス急増やプラグインのDB接続リークが主な原因です。
症状・原因
DB接続数超過の特徴:
- アクセスが増える時間帯に断続的にDB接続エラーが発生する
- エラーログに「Too many connections」が記録される
- 平常時は正常だが高負荷時にエラーになる
- 複数のWordPressサイトが同じDBサーバーを使っている
主な原因:
- MySQLの
max_connections設定値が低い - 接続が解放されずにリークしているプラグイン
- アクセス急増によるPHP-FPMプロセス増加
- 永続的DB接続(
pconnect)の使いすぎ
解決手順
ステップ1:現在の接続数を確認する
-- phpMyAdminまたはMySQLコマンドラインで実行
SHOW STATUS LIKE 'Threads_connected'; -- 現在の接続数
SHOW VARIABLES LIKE 'max_connections'; -- 上限値
SHOW STATUS LIKE 'Max_used_connections'; -- 過去の最大接続数
ステップ2:max_connectionsを増やす(VPS・専用サーバー)
# /etc/mysql/mysql.conf.d/mysqld.cnf または /etc/my.cnf
[mysqld]
max_connections = 200 # デフォルト151を増やす
変更後:sudo systemctl restart mysql
ただし注意: 接続数を増やすと各接続がメモリを消費します。サーバーのRAMに余裕がある場合にのみ増やしてください(1接続あたり約4MB)。
ステップ3:WordPress側でDB接続を最適化
wp-config.phpでMySQL接続の設定を調整:
// 持続的接続を無効化(リーク対策)
define('DB_HOST', 'localhost'); // p:localhost ではなくlocalhostを使う
// テーブルプレフィックスも確認
$table_prefix = 'wp_';
p:localhost(持続的接続)を使っている場合は通常のlocalhostに変更します。
ステップ4:接続リークのプラグインを特定する
全プラグインを無効化してから一つずつ有効化して、接続数の増加を確認します。特に以下は注意が必要:
- カスタムDB接続を持つ統計系プラグイン
- WooCommerceの大量注文処理
- キャッシュプラグインのDB書き込み処理
-- アクティブなプロセスを確認
SHOW PROCESSLIST;
-- Sleepステートが多い場合はリーク可能性あり
ステップ5:wait_timeoutを短くする
長時間sleepしているDB接続を自動切断する設定:
[mysqld]
wait_timeout = 60 # 60秒でアイドル接続を切断(デフォルト28800秒)
interactive_timeout = 60
ステップ6:共有ホスティングの場合
共有ホスティングではmax_connectionsの変更ができません。対処法:
1. W3 Total CacheやWP Super Cacheでページキャッシュを有効化してDB負荷を削減
2. アクセスのスパイクを起こすようなプラグインを無効化
3. プランのアップグレードを検討
まとめ
「Too many connections」エラーはMySQLの同時接続数の上限超過が原因です。VPS環境ではmax_connectionsの増加とwait_timeoutの短縮で対応します。プラグインのDB接続リークも疑い、キャッシュプラグインの活用でDB負荷自体を減らすことも重要です。
関連記事: