WordPress の「データベース接続確立エラー」の直し方
WordPress のデータベース接続エラーを直す方法。wp-config.php の 4 つの認証情報を確認し、データベースサーバーが動いているか確かめ、壊れたテーブルを修復します。
公開
サイトを開くと、フロント側も wp-admin も、どのページも一行の灰色の文に置き換わっています。データベース接続確立エラー。 何も表示されません。表示できないからです。WordPress はページを組み立てるところまで到達していません。
手早く直すための考え方はこうです。WordPress は投稿・ページ・設定・ユーザーといったすべてのコンテンツを、ファイルではなく MySQL データベースに保存しています。リクエストのたびに wp-config.php から 4 つのログイン情報を読み、そのデータベースに接続し、必要なものを取り出します。このエラーは、その接続が試みられ、拒否された ことを意味します。直すには、なぜ 拒否されたのかを突き止めます。可能性は 3 つしかありません。
起こりやすい順に、3 つの原因
- 認証情報の誤り(
wp-config.php内) — たいていはサーバー移転の結果です。 - データベースサーバーの停止や過負荷 — たいていは こちら側で何も変えていない のに起きます。
- データベースの破損 — 頻度は低く、現れ方も違います。
この順番で確認していきます。
ステップ 1: 4 つの認証情報を確認する
SFTP かホスティングのファイルマネージャーで、サイトのルートにある wp-config.php を開きます。接続を決めているのは次の 4 行です。
define( 'DB_NAME', 'your_database_name' );
define( 'DB_USER', 'your_database_user' );
define( 'DB_PASSWORD', 'your_database_password' );
define( 'DB_HOST', 'localhost' );
どれもホスティングが割り当てた値と完全に一致していなければなりません。ホスティングのコントロールパネルのデータベースの項目(cPanel では「MySQL Databases」)を開き、一文字ずつ照合します。
DB_NAME— ホスティングはcpaneluser_wpdbのように、名前の先頭にアカウント名を付けることがよくあります。この接頭辞も名前の一部です。DB_USER— 同じ接頭辞が付きます。さらにそのユーザーは、ただ存在するだけでなく、そのデータベースに 割り当てられて いる必要があります。DB_PASSWORD— もっとも多い原因です。自信がなければコントロールパネルでリセットし、新しい値を貼り付けます。末尾の空白や、勝手に変換された引用符に注意してください。DB_HOST—localhostだと決めつけないでください。多くのホスティングはmysql.yourhost.comのようなアドレス(ときに:port付き)の専用データベースサーバーを使います。正しい値はコントロールパネルに表示されています。
この 4 つの値が置かれているのはまさにこのファイルなので、引用符まで正しく整った wp-config.php を作り直すいちばん安全な方法は wp-config.php ジェネレーター です。データベースの 4 項目を入力し、生成された結果を古いブロックの上に貼り付けてください。
ほとんどの移転では、この手順だけでエラーが直ります。旧サーバーでは正しかった認証情報が、新サーバーでは間違っているからです。
ステップ 2: データベースサーバーが本当に動いているか確かめる
認証情報が正しいのにエラーが続く場合、とくにあなたが何も変えていないのに ひとりでに現れた 場合は、データベースサーバーそのものが疑わしいです。
共有ホスティングではよくあることで、たいていは一時的です。アクセスが集中すると MySQL サービスが処理しきれなくなるか、アカウントごとの接続数の上限に達して、新しい接続を拒否し始めます。ふつうは数分で回復します。思い切った対処に走る前に、少し待ってから再読み込みしてください。
WordPress とは切り離して認証情報がそもそも有効かどうかを確かめるには、wp-config.php の隣に小さなスクリプトを置きます。
<?php
$link = mysqli_connect('localhost', 'your_database_user', 'your_database_password');
if (!$link) {
die('Connection failed: ' . mysqli_connect_error());
}
echo 'Connected — the server and credentials are fine.';
実際の DB_HOST、DB_USER、DB_PASSWORD を使ってください。Connected と表示されれば、ログイン情報は有効で、問題は別のところ(データベースの破損、ステップ 3)にあります。接続エラーが表示された場合は、そのメッセージがどちらかを教えてくれます。「Access denied」ならユーザーかパスワードの誤り、「Can’t connect to MySQL server」ならホストの誤りか、本当にサービスが停止している状態で、ホスティングに連絡すべきときです。終わったらすぐにこのスクリプトを削除してください。
ステップ 3: 壊れたデータベースを修復する
破損と接続の問題を見分ける手掛かりがひとつあります。フロント側は表示されるのに wp-admin ではエラーが出る、あるいはその逆、という状態です。接続が本当に拒否されているなら、両方とも死んでいるはずです。こうした食い違いは、テーブルの破損を示しています。
WordPress には修復ツールが組み込まれています。wp-config.php の「編集を終わり」のコメントより上に、次の 1 行を追加します。
define( 'WP_ALLOW_REPAIR', true );
そのうえで、ブラウザーで次の URL を直接開きます。
https://yoursite.com/wp-admin/maint/repair.php
この画面は ログインなし で開きます。締め出されている可能性があるので、それが狙いです。「Repair Database」と「Repair and Optimize Database」が用意されているので、実行します。
そのあとすぐに、wp-config.php からその行を削除してください。 残っているあいだは、インターネット上の誰でもその URL を開いて、あなたのデータベースの修復を実行できます。これは任意の後片付けではなく、たった今開けた穴をふさぐ作業です。
ステップ 4: 修復画面すら接続できないとき
修復ページ自体に接続エラーが出る場合、修復するものは何もありません。データベースにまったく到達できていないので、ステップ 1 かステップ 2 に戻ります。この段階で確実なのは、ホスティングの最新のバックアップからデータベースを復元する ことです。たいていのコントロールパネルは毎日自動でデータベースのスナップショットを取っています。接続すらできない破損を追いかけるより、昨夜の状態から復元するほうが、ほぼ確実に速く安全です。
気にしなくていいアドバイス
「とりあえず WordPress を再インストールしましょう」 このエラーはデータベースへの接続の問題であって、コアファイルの問題ではありません。再インストールは、正常に動いているファイルを入れ替えるだけで、壊れているところには一切触れません。
「PHP のメモリ上限を上げましょう」 メモリ不足は、別のメッセージが出る 別の エラーです。上限を上げても、拒否されたデータベース接続には何の効果もなく、認証情報を確認していないという事実を覆い隠すだけです。
「キャッシュを削除しましょう」 この失敗は、キャッシュがページを返すより前に PHP の中で起きます。接続が拒否されているあいだはキャッシュを削除しても何も変わりません。やる価値があるのは、サイトが復旧した あと だけです。
「データベースを直接いじって直しましょう」 接続が機能することを確かめる前に phpMyAdmin でテーブルを手で書き換えるのは、一時的な障害を恒久的なデータ損失に変える近道です。まず接続を確かめ、データに触れるのは最後、しかもバックアップからだけにしてください。
それでも解決しない場合
テストスクリプトで認証情報が確認でき、サーバーも動いていて、修復も接続できてエラーなしと出るのに、それでもサイトにこのメッセージが出続ける場合、残る容疑者は、独自の接続でデータベースとやり取りするプラグイン、つまり古いホスト情報を保存してしまったキャッシュ系やデータベース系のプラグインです。SFTP で wp-content/plugins を plugins-off にリネームして切り分けます。エラーが消えたら、プラグインを 1 つずつ戻し、再発するまで確認してください。
FAQ
よくある質問
WordPress のデータベース接続エラーとはどういう意味ですか?
WordPress が起動して wp-config.php を読み、そこに書かれた認証情報で MySQL データベースへの接続を試みたところ、拒否された、という意味です。この失敗はページが組み立てられる前に起きるので、サイト全体が一行のそっけない文字だけになります。原因は、認証情報が間違っているか、データベースサーバーが停止・過負荷になっているか、データベース自体が壊れているか、のいずれかです。
WordPress のデータベースのログイン情報はどのファイルにありますか?
サイトのルートにある wp-config.php です。wp-load.php の隣にあります。接続を決めているのは 4 つの定数、DB_NAME、DB_USER、DB_PASSWORD、DB_HOST です。このどれかが一文字でも違うとまさにこのエラーが出ます。値が古くなる最大の原因はサーバーの移転です。
何も変えていないのにエラーが出たのはなぜですか?
ほぼ間違いなく、あなたのサイトではなくデータベースサーバーが原因です。共有ホスティングでは、アクセスが集中すると MySQL サービスが過負荷になったり接続数の上限に達したりして、新しい接続を拒否します。たいていは数分で自然に解消します。何度も繰り返すなら、ホスティング会社に問い合わせるべきか、プランの限界を超えているサインです。
DB_HOST はいつも localhost ですか?
いいえ。localhost だと思い込むことが、移転後にこのエラーが出る典型的な原因です。データベースを別のサーバーで動かしているホスティングは多く、その場合 DB_HOST は mysql.yourhost.com のようなアドレスや、ポート付きの IP になります。正しい値はホスティングのコントロールパネルのデータベースの項目に表示されています。:port の部分も含めて、そのまま正確にコピーしてください。
壊れた WordPress のデータベースはどう修復しますか?
wp-config.php に define( 'WP_ALLOW_REPAIR', true ); を追加し、ブラウザーで yoursite.com/wp-admin/maint/repair.php を開いて修復を実行します。この画面はログイン不要で動きます。だからこそ、終わった瞬間にこの行を削除しなければなりません。残したままだと、誰でも修復を実行できてしまいます。そもそも接続すらできない場合は、原因は破損ではなく認証情報かサーバーです。
wp-admin だけエラーになり、フロント側は表示されるのはなぜですか?
この食い違いは、接続の問題ではなくデータベースの破損を示しています。フロント側では接続が明らかに機能しているからです。WordPress は管理画面側を別に判定することがあります。まず組み込みのデータベース修復を実行してください。それで直らなければ、ホスティングの最新のバックアップからデータベースを復元します。