2026年5月17日
2026年5月17日
WordPressのデータベース接続エラーを解決する方法
はじめに
「Error establishing a database connection」はWordPressで最もよく見られる致命的なエラーの一つです。データベース認証情報の誤り・MySQLサービスの停止・接続数の上限超過など複数の原因が考えられます。本記事では原因の切り分けから修復・最適化まで、5ステップで体系的に解説します。
症状・原因
- サイト全体に「Error establishing a database connection」が表示される
- 管理画面(wp-admin)にもアクセスできない
- MySQL サービスが停止またはクラッシュしている
wp-config.phpのDB認証情報が誤っている(ホスト名・ユーザー名・パスワード)- サーバーの
max_connections上限に達してスロットが空いていない
解決手順
ステップ1:「Error establishing a database connection」の主要原因を理解する
# まず MySQL サービスの状態を確認する
sudo systemctl status mysql
# または
sudo systemctl status mariadb
# MySQL が停止していたら起動する
sudo systemctl start mysql
# MySQL のエラーログを確認する
sudo tail -100 /var/log/mysql/error.log
# WordPress が使用しているデータベースへの接続を確認
mysql -u wordpress_user -p -h localhost wordpress_db
# 接続成功なら認証情報は正しい
# ERROR 1045: Access denied → ユーザー名/パスワードが間違い
# ERROR 2002: Can't connect → MySQL が停止またはホスト名が誤り
ステップ2:wp-config.php の DB 認証情報を確認・修正する
<?php
// wp-config.php の DB 設定箇所を確認する
/** データベース名 */
define( 'DB_NAME', 'wordpress_db' );
/** データベースのユーザー名 */
define( 'DB_USER', 'wordpress_user' );
/** データベースのパスワード */
define( 'DB_PASSWORD', 'secure_password_here' );
/** データベースのホスト名 */
// 通常は 'localhost' だが、マネージドDB(AWS RDS等)では異なる場合がある
define( 'DB_HOST', 'localhost' );
// ポート指定が必要な場合(デフォルトは 3306)
// define( 'DB_HOST', 'localhost:3307' );
// ソケット接続の場合
// define( 'DB_HOST', 'localhost:/var/run/mysqld/mysqld.sock' );
/** データベースのテーブルを作成する際のデータベースの文字セット */
define( 'DB_CHARSET', 'utf8mb4' );
/** データベースの照合順序 */
define( 'DB_COLLATE', '' );
// ホスティング会社のコントロールパネルで正しい認証情報を確認すること
// cPanel → MySQL データベース → ユーザーとデータベースの確認
ステップ3:PHP スクリプトで MySQL 接続をテストする
<?php
// test-db.php としてウェブルートに一時的に設置(テスト後は必ず削除する)
$host = 'localhost'; // DB_HOST の値
$user = 'wordpress_user'; // DB_USER の値
$password = 'secure_password'; // DB_PASSWORD の値
$dbname = 'wordpress_db'; // DB_NAME の値
// mysqli で接続テスト
$conn = mysqli_connect( $host, $user, $password, $dbname );
if ( ! $conn ) {
// 接続失敗:エラーの詳細を表示
echo '<h2>接続失敗</h2>';
echo '<p>エラーコード: ' . mysqli_connect_errno() . '</p>';
echo '<p>エラー内容: ' . mysqli_connect_error() . '</p>';
echo '<ul>';
echo '<li>1045: ユーザー名またはパスワードが誤っています</li>';
echo '<li>1049: データベースが存在しません</li>';
echo '<li>2002: MySQL サーバーに接続できません(ホスト名または起動状態を確認)</li>';
echo '</ul>';
} else {
// 接続成功
echo '<h2>接続成功!</h2>';
echo '<p>MySQL バージョン: ' . mysqli_get_server_info( $conn ) . '</p>';
mysqli_close( $conn );
}
// !! テスト後は必ずこのファイルを削除すること !!
// rm /var/www/html/test-db.php
ステップ4:WordPress のデータベーステーブルを修復する
<?php
// wp-config.php に以下を追加して修復モードを有効化
// その後 http://example.com/wp-admin/maint/repair.php へアクセスする
define( 'WP_ALLOW_REPAIR', true );
// 修復完了後は必ず削除またはコメントアウトすること!
// wpdb クラスを使ったプログラム的な修復(WP-CLI またはカスタムスクリプト)
// wp eval '$wpdb->check_connection();'
// WP-CLI でテーブルを確認・修復する
// wp db check
// wp db repair
// MySQL コマンドで直接修復する(MySAM テーブルの場合)
// REPAIR TABLE wp_options;
// REPAIR TABLE wp_posts;
// REPAIR TABLE wp_postmeta;
// InnoDB テーブルの場合は OPTIMIZE を使用
// OPTIMIZE TABLE wp_options;
// 全テーブルを一括修復
// mysqlcheck -u wordpress_user -p --auto-repair wordpress_db
ステップ5:MySQL の max_connections を確認して増加させる
-- MySQL に接続して現在の接続状況を確認
SHOW PROCESSLIST;
-- 接続数が多い場合は待機中やスリープ中のプロセスを特定
-- 現在の接続上限と使用数を確認
SHOW VARIABLES LIKE 'max_connections';
SHOW STATUS LIKE 'Max_used_connections';
SHOW STATUS LIKE 'Threads_connected';
-- 接続上限を一時的に変更(再起動で元に戻る)
SET GLOBAL max_connections = 300;
# MySQL 設定ファイルを編集して永続化する
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
# 以下を追記または変更する
# [mysqld]
# max_connections = 300
# wait_timeout = 28800
# interactive_timeout = 28800
# MySQL を再起動して設定を反映
sudo systemctl restart mysql
# WordPress 側での対策:持続的接続を避け、$wpdb を正しく使用する
# functions.php 例
add_action( 'init', function() {
global $wpdb;
// クエリ後は明示的にキャッシュをクリア
$wpdb->flush();
} );
注意事項
- test-db.php は必ず削除: テスト用スクリプトをサーバーに残すと認証情報が漏洩するリスクがあります。
- WP_ALLOW_REPAIR は一時的に: 修復完了後すぐに
wp-config.phpから削除またはコメントアウトしてください。 - バックアップを先に取る: DB修復の前に
wp db exportでバックアップを取得しておくことを強く推奨します。
まとめ
データベース接続エラーは「MySQLの起動確認→認証情報の検証→接続テスト→テーブル修復→接続数の調整」という順序で対処すれば、大半のケースで解決できます。関連記事:WordPressのSSL・HTTPSエラーを解決する方法