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 CacheWP Super Cacheでページキャッシュを有効化してDB負荷を削減

2. アクセスのスパイクを起こすようなプラグインを無効化

3. プランのアップグレードを検討

まとめ

「Too many connections」エラーはMySQLの同時接続数の上限超過が原因です。VPS環境ではmax_connectionsの増加とwait_timeoutの短縮で対応します。プラグインのDB接続リークも疑い、キャッシュプラグインの活用でDB負荷自体を減らすことも重要です。

関連記事:

お気軽にご相談ください

お見積りへ お問い合わせへ