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で確認する
関連記事: