[WordPress]マルチサイトのサーバ移行時にデータベース接続確立エラーになったら

  • 公開日:2021/7/6

WordPressのマルチサイトで構築されたサイトをサーバ移管したところ、『データベース接続確立エラー』(Error establishing a database connection)になってしまいました。
サーバー移管で行った手順は次のとおり。

  1. WordPressのファイル一式を旧サーバからダウンロードし、新サーバへアップロード。
  2. 新サーバのwp-config.phpを書き換える。
  3. 旧サーバのデータベースをエクスポートし、新サーバでインポート。
  4. データベースのデータを新しいサイトURLに書き換える(Search-Replace-DBを使用)

データベース接続確立エラーが出たときに疑う場所は2つ。

  1. wp-config.php
  2. データベースの設定

何度も何度もwp-config.phpは確認したので問題ないはずですが、念のために再確認。

wp-config.phpの設定

シングルサイトのサーバ移行でも注意が必要な箇所と同じ。

// ** MySQL 設定 - この情報はホスティング先から入手してください。 ** //
/** WordPress のためのデータベース名 */
define('DB_NAME', 'new_dbname');

/** MySQL データベースのユーザー名 */
define('DB_USER', 'new_dbuser');

/** MySQL データベースのパスワード */
define('DB_PASSWORD', 'new_password');

/** MySQL のホスト名 */
define('DB_HOST', 'new_dbhost');

/** データベースのテーブルを作成する際のデータベースの文字セット */
define( 'DB_CHARSET', 'utf8mb4' );

/** データベースの照合順序 (ほとんどの場合変更する必要はありません) */
define( 'DB_COLLATE', '' );

マルチサイトだけの記述。
特に注意が必要なのは4行目のドメイン。あと、環境によって5行目のパスも要チェック。

define('WP_ALLOW_MULTISITE', true);
define('MULTISITE', true);
define('SUBDOMAIN_INSTALL', false);
define('DOMAIN_CURRENT_SITE', 'new-domain.jp'); // ここのドメインは正しいか?
define('PATH_CURRENT_SITE', '/'); // ここのパスは正しいか?
define('SITE_ID_CURRENT_SITE', 1);
define('BLOG_ID_CURRENT_SITE', 1);

何度も確認しただけのことはあって、私の場合はwp-config.phpは問題ありませんでした。
では、疑わしきはデータベース。

データベースの設定

接頭辞はデフォルト「wp_」を想定しています。確認したいテーブルは以下のとおり

  • wp_blogs
  • wp_options
  • wp_site
  • wp_sitemeta
  • wp_n_options(サイトネットワークの数だけ)

それぞれのテーブルで確認したいレコードは以下のとおり。「カラム名:値」で記載しています。

wp_blogs

domain:新ドメイン
path:各サイトのパス

wp-options

option_name:siteurl
option_value:WordPressインストールURL

option_name:home
option_value:ホームURL

wp-site

domain:新ドメイン
path:サイトのパス

wp-sitemeta

meta_key:siteurl
meta_value:WordPressインストールURL

wp-n-options

サイトネットワークの数だけテーブルがあります。

option_name:siteurl
option_value:サイトネットワークURL

option_name:home
option_value:サイトネットワークURL

「wp_blogs」「wp_site」でドメインとパスが正しく置換できていませんでした。
サイトURL書き換えに利用した「Search-Replace-DB」の置換パターンにハマらなかったからだと思われます。
マルチサイトでは注意が必要ですね。勉強になりました。

参考サイト