タイトル: DB接続方法
SEOタイトル: WordPress wp-config DB 接続完全ガイド
| この記事の要点 |
|
wp-config.php の基本
WordPress の DB 接続情報はサイトルートの wp-config.php に書かれます。インストーラが自動生成しますが、後から手動で編集も可能。
各定数の意味
| 定数 | 意味 | 例 |
|---|---|---|
DB_NAME | データベース名 | wordpress |
DB_USER | DB 接続ユーザ | wp_user |
DB_PASSWORD | DB パスワード | **** |
DB_HOST | DB ホスト(ポート指定可) | localhost / db.example.com:3306 |
DB_CHARSET | 文字コード | utf8mb4(推奨) |
DB_COLLATE | 照合順序 | ''(空で DB デフォルト) |
$table_prefix | テーブル名接頭辞 | wp_ |
DB_HOST の書き方バリエーション
// 同一サーバ(TCP)
define('DB_HOST', 'localhost'); // 通常 3306
// 同一サーバ(UNIX ソケット)
define('DB_HOST', 'localhost:/var/run/mysqld/mysqld.sock');
// 別サーバ
define('DB_HOST', 'db.example.com');
define('DB_HOST', '10.0.0.5');
// ポート指定
define('DB_HOST', 'db.example.com:3306');
// Galera Cluster / ProxySQL 越し
define('DB_HOST', '127.0.0.1:6033');
// AWS RDS
define('DB_HOST', 'mydb.xxxx.ap-northeast-1.rds.amazonaws.com');
// レンタルサーバ例
// XServer: localhost
// さくら: mysql****.db.sakura.ne.jp
// ロリポップ: mysqlxxx.phy.lolipop.lan
$table_prefix の変更
セキュリティ向上のため wp_ 以外に変えるテクニックもあります。マルチサイトを 1 つの DB に同居させる時にも使用。
// 単一サイト
$table_prefix = 'myapp_';
// マルチサイト共有 DB 例
$table_prefix = 'wp_site1_'; // サイト 1
// 別 wp-config.php
$table_prefix = 'wp_site2_'; // サイト 2
運用中サイトのプレフィックス変更はテーブル一括 RENAME + options / usermeta の値書き換えが必要。プラグイン(Better Search Replace / WP-CLI search-replace)の利用を推奨。
SSL / TLS 接続
クラウド DB(AWS RDS / Azure Database / 他社マネージド)で TLS が必須な場合:
// SSL 接続フラグ
define('MYSQL_CLIENT_FLAGS', MYSQLI_CLIENT_SSL);
// CA 証明書のパス(フルチェーン)
define('MYSQL_SSL_CA', '/etc/ssl/certs/rds-combined-ca-bundle.pem');
// クライアント証明書(双方向 TLS の場合)
define('MYSQL_SSL_CERT','/etc/ssl/certs/client-cert.pem');
define('MYSQL_SSL_KEY', '/etc/ssl/private/client-key.pem');
// 証明書検証を緩和する場合(推奨しない)
define('MYSQL_CLIENT_FLAGS', MYSQLI_CLIENT_SSL | MYSQLI_CLIENT_SSL_DONT_VERIFY_SERVER_CERT);
複数 DB / レプリ運用(HyperDB / LudicrousDB)
標準の WordPress は単一 DBしか想定していません。書き込み Master / 読み取り Replica を分けたい大規模サイトは専用プラグインを利用します。
// HyperDB / LudicrousDB 概要(db-config.php に書く)
$wpdb->add_database(array(
'host' => 'master.db.example.com',
'user' => DB_USER,
'password' => DB_PASSWORD,
'name' => DB_NAME,
'write' => 1,
'read' => 0,
));
$wpdb->add_database(array(
'host' => 'replica1.db.example.com',
'user' => DB_USER,
'password' => DB_PASSWORD,
'name' => DB_NAME,
'write' => 0,
'read' => 1,
));
Heartbeat / 接続失敗時のリトライ
長時間アイドルで切断される DB(mysql の wait_timeout、AWS RDS Proxy の idle timeout)に対しては、頻繁な再接続が起きないよう WordPress の Heartbeat 設定を見直します。
// functions.php
add_filter('heartbeat_settings', function ($settings) {
$settings['interval'] = 60; // 既定 15s → 60s に
return $settings;
});
// 管理画面以外で Heartbeat 無効化
add_action('init', function () {
if (!is_admin()) {
wp_deregister_script('heartbeat');
}
});
wp-cli での設定変更
wp-config.php を直接編集せずに変更できる。引用符の処理ミスや BOM 混入を防げるため運用上推奨。
# DB ホスト変更
wp config set DB_HOST db.example.com:3306
# DB 名・ユーザ・パスワード変更
wp config set DB_NAME wordpress_prod
wp config set DB_USER wp_prod
wp config set DB_PASSWORD 'StrongP@ssw0rd'
# 文字コード変更
wp config set DB_CHARSET utf8mb4
# テーブルプレフィックス変更(運用中は別途データ更新必須)
wp config set table_prefix myapp_ --type=variable
# 設定値確認
wp config get DB_HOST
wp config list
# DB 接続テスト
wp db check
wp db check --debug
レンタルサーバの DB 設定例
| サーバ | DB_HOST | 備考 |
|---|---|---|
| XServer | localhost | 同一サーバ前提 |
| さくらインターネット | mysqlNNN.db.sakura.ne.jp | NNN は契約ごとに異なる |
| ロリポップ | mysqlxxx.phy.lolipop.lan | 管理画面で確認 |
| ConoHa WING | localhost | 同一サーバ |
| AWS Lightsail (WP) | localhost | bitnami 構成 |
| AWS RDS | xxx.rds.amazonaws.com | SSL 推奨 |
phpMyAdmin での接続確認
# CLI から MySQL クライアントで接続テスト
mysql -h DB_HOST -u DB_USER -p DB_NAME
# パスワードを聞かれて入る → OK
# Access denied → ユーザ・パスワード・ホスト権限を確認
# phpMyAdmin
# → wp-config.php と同じ値で入れれば WordPress 設定も正しい
# 接続権限の確認(GRANT 確認)
SHOW GRANTS FOR 'wp_user'@'%';
SHOW GRANTS FOR 'wp_user'@'10.0.0.%';
典型的エラー: Error establishing a database connection
「データベース接続確立エラー」はあらゆる接続失敗の総称。順番に切り分けます。
| 原因 | 確認 | 対処 |
|---|---|---|
| DB サーバ停止 | systemctl status mysqld | 起動 / 再起動 |
| DB_HOST 誤り | ping / nc -z host 3306 | 正しい値に |
| DB_USER / DB_PASSWORD 誤り | CLI から mysql コマンドで接続テスト | パスワード再設定 |
| DB_NAME が存在しない | SHOW DATABASES; | CREATE DATABASE |
| ユーザ権限不足 | SHOW GRANTS | GRANT 付与 |
| 接続元 IP 制限 | 'user'@'%' vs 'user'@'1.2.3.4' | 適切な host で GRANT |
| DB ディスク満杯 | df -h | 不要データ削除 / 拡張 |
| max_connections 上限 | SHOW STATUS LIKE 'Threads_connected' | my.cnf で増やす / 接続プール |
| DB テーブル破損 | error_log に "crashed" | REPAIR TABLE |
// 復旧モード(自動修復を有効化)
// wp-config.php に追加
define('WP_ALLOW_REPAIR', true);
// アクセス: https://example.com/wp-admin/maint/repair.php
// → 終わったら必ず define を削除(誰でも修復実行できてしまう)
セキュリティ上の注意
wp-config.phpのパーミッションは 0640 以下(他ユーザに見せない)- Web サーバ経由で読み取られないよう
.htaccessや Nginxlocationで拒否 - DB ユーザはWordPress 用 DB だけにアクセス可能な権限に絞る(FILE / SUPER は不要)
- クレデンシャルは git にコミットしない。
.gitignoreにwp-config.phpを入れる - 本番では
WP_DEBUG_DISPLAYをfalse、WP_DEBUG_LOGのログは公開ディレクトリ外へ
FAQ
Q: パスワードに特殊文字を含めると動かない
A: シングルクォートで囲み、内部のシングルクォートは \'。define('DB_PASSWORD', 'pa$$'w0rd')。安全のため英数記号のみ推奨。
Q: 文字コードは utf8 と utf8mb4 どちらにすべき?
A: 絵文字や一部の CJK 拡張文字を扱うなら utf8mb4 必須。新規サイトは utf8mb4 一択です。
Q: wp-config.php を 1 ファイルに含めずに環境ごとに分けたい
A: 環境変数や .env を使う方法(vlucas/phpdotenv + bedrock)。本番は別の wp-config-local.php を include する書き方も一般的です。