2026年6月18日

2026年6月18日

WordPressのデータベースホスト名(DB_HOST)を変更する方法|別サーバーへの接続手順

WordPress がどのデータベースサーバーに接続するかは、wp-config.php の DB_HOST で決まります。データベースを別のサーバーに移す、レンタルサーバーでデータベースのホスト名が変わった、といったときはこの値を書き換えます。ただし、データベースを別のマシンに置く場合は、データベース側で「どこから接続してよいか」の設定も必要です。この記事では、DB_HOST の書き方と、MySQL・MariaDB 側の準備、接続の確認方法を説明します。

なお、WordPress のコアが対応しているデータベースは MySQL と MariaDB です。PostgreSQL などは標準では使えません。

作業前に確認すること

  • データベースの中身はどこにあるか:ホスト名だけ変わり、データは同じ(レンタルサーバーの案内による変更など)なのか、データを新しいサーバーへ移すのかで手順が変わります。データを移す場合は、先にエクスポートとインポートが必要です(後述)。
  • バックアップ:wp-config.php のコピーと、データベースのエクスポートを取っておきます。
cp wp-config.php wp-config.php.bak
wp db export before-dbhost-change.sql
  • 新しい接続情報:ホスト名(または IP アドレス)、ポート番号、データベース名、ユーザー名、パスワード。レンタルサーバーの場合は、管理画面のデータベースの項目に表示されるホスト名を使います。

DB_HOSTの書き方

wp-config.php の次の行を書き換えます。

define( 'DB_HOST', 'localhost' );

指定できる形式は次のとおりです。

書き方 意味
'localhost' 同じマシンのデータベースに、UNIX ソケットで接続する
'127.0.0.1' 同じマシンのデータベースに、TCP で接続する
'db.example.internal' / '192.0.2.10' 別のマシンに TCP(既定のポート 3306)で接続する
'192.0.2.10:3307' ポート番号を指定して接続する
'localhost:/var/run/mysqld/mysqld.sock' ソケットファイルの場所を指定して接続する

PHP の MySQL 接続では、ホスト名を localhost にするとソケット接続、127.0.0.1 にすると TCP 接続になります。同じマシンなのに localhost で接続できず 127.0.0.1 で接続できる(またはその逆)場合は、この違いが原因です。

別サーバーの IP アドレスに書き換える例です。

define( 'DB_HOST', '192.0.2.10' );

データベース名・ユーザー名・パスワードも変わる場合は、同じファイルの DB_NAME、DB_USER、DB_PASSWORD も書き換えます。

データベース側の準備(別サーバーに置く場合)

自分で管理するサーバー(VPS など)で、Web サーバーとデータベースサーバーを分ける場合の手順です。以下の例では、Web サーバーの IP アドレスを 192.0.2.20、データベースサーバーを 192.0.2.10 とします。

ユーザーを接続元ホストごとに作る

MySQL と MariaDB のユーザーは、「ユーザー名」と「接続元ホスト」の組み合わせで管理されます。'wpuser'@'localhost' と 'wpuser'@'192.0.2.20' は別のユーザーとして扱われるため、Web サーバーから接続するには、Web サーバーの IP アドレスを接続元にしたユーザーを作ります。

データベースサーバーで、管理者として接続して実行します。

-- 現在のユーザーと接続元を確認
SELECT user, host FROM mysql.user WHERE user = 'wpuser';

-- Web サーバー(192.0.2.20)から接続するユーザーを作成
CREATE USER 'wpuser'@'192.0.2.20' IDENTIFIED BY '強いパスワード';
GRANT ALL PRIVILEGES ON wordpress.* TO 'wpuser'@'192.0.2.20';

MySQL 8.0 以降では、GRANT だけでユーザーを作ることはできないため、先に CREATE USER を実行します。CREATE USER と GRANT で付けた権限はすぐに反映されるので、FLUSH PRIVILEGES は不要です。接続元を '%'(どこからでも)にすることもできますが、接続元を絞れなくなるため、Web サーバーの IP アドレスを指定することをおすすめします。

外部からの接続を受け付ける

Ubuntu や Debian のパッケージで入れた MySQL・MariaDB は、2026年10月時点の既定で bind-address = 127.0.0.1 になっており、同じマシンからの接続しか受け付けません。設定ファイルの bind-address を、Web サーバーから届くデータベースサーバー側の IP アドレス(同じネットワーク内ならプライベート IP アドレス)に変えます。

  • MySQL(Ubuntu):/etc/mysql/mysql.conf.d/mysqld.cnf
  • MariaDB(Debian・Ubuntu):/etc/mysql/mariadb.conf.d/50-server.cnf
[mysqld]
bind-address = 192.0.2.10
# MySQL の場合
sudo systemctl restart mysql
# MariaDB の場合
sudo systemctl restart mariadb

# 3306 番ポートで待ち受けているアドレスを確認
sudo ss -ltnp | grep 3306

ファイアウォールで接続元を絞る

3306 番ポートは、Web サーバーからの接続だけを許可します。インターネット全体に公開しないでください。ufw を使っている場合の例です。

sudo ufw allow from 192.0.2.20 to any port 3306 proto tcp

クラウドや VPS の事業者が提供するファイアウォール(セキュリティグループなど)を使っている場合は、そちらでも同じ許可が必要です。Web サーバーとデータベースサーバーの間がインターネットを経由する場合は、通信の暗号化も検討してください(WordPressとMySQLの接続をSSL/TLSで暗号化する設定手順)。

データを新しいサーバーに移す場合

データベースサーバーを移すときは、DB_HOST を書き換える前にデータを移します。移行中に記事やコメントが書き込まれないよう、作業中はサイトをメンテナンス状態にしておくと安全です。

# Web サーバー(旧データベースに接続できる状態)でエクスポート
wp db export wordpress.sql

# 新しいデータベースサーバーで、データベースを作ってからインポート
mysql -u root -p -e "CREATE DATABASE wordpress DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
mysql -u root -p wordpress < wordpress.sql

インポートが終わったら、wp-config.php の DB_HOST を新しいサーバーに書き換えます。

接続を確認する

wp-config.php を書き換える前に、Web サーバーから新しいデータベースに接続できるかを MySQL クライアントで確かめておくと、切り替え後にサイトが止まるのを防げます。

# Web サーバーで実行(mysql クライアントが必要)
mysql -h 192.0.2.10 -u wpuser -p -e "SELECT 1;" wordpress

wp-config.php を書き換えたあとは、WP-CLI で WordPress の設定どおりに接続できるかを確認します。

wp db check
wp option get siteurl

wp db check は wp-config.php の接続情報でデータベースのテーブルを検査します(内部で mysqlcheck を使うため、MySQL・MariaDB のクライアントが必要です)。wp option get siteurl はサイトの URL を表示します。どちらもエラーが出なければ接続できています。最後にブラウザでサイトと管理画面を開き、表示とログインを確認します。

「データベース接続確立エラー」が出たとき

切り替え後に「データベース接続確立エラー」(Error establishing a database connection)が出る場合は、次の順で確認します。

  • DB_HOST の値に余分な空白や誤字がないか。ポート番号やソケットのパスの書き方が合っているか
  • Web サーバーから mysql -h で接続できるか。接続できない場合は、bind-address、ファイアウォール、ユーザーの接続元ホストのどれかが原因です
  • Access denied for user 'wpuser'@'192.0.2.20' と出る場合は、表示されている接続元ホストでユーザーが作られていないか、パスワードが違います
  • 接続がタイムアウトする場合は、ファイアウォールで止められているか、ホスト名を名前解決できていません。getent hosts db.example.internal で名前解決を確かめます

うまくいかないときは、バックアップした wp-config.php.bak に戻せば元の接続先に戻ります。

まとめ

  • 接続先は wp-config.php の DB_HOST で決まる。localhost はソケット、127.0.0.1 は TCP。ポートやソケットのパスも指定できる
  • 別サーバーに置く場合、MySQL・MariaDB のユーザーは接続元ホストごとに作る。MySQL 8.0 以降は CREATE USER のあとに GRANT
  • bind-address を変えて外部からの接続を受け付け、ファイアウォールで Web サーバーからの接続だけを許可する
  • 切り替え前に mysql -h で接続を試し、切り替え後は wp db check で確認する

関連記事:

お気軽にご相談ください

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