6.

WordPress wp-config DB 接続完全ガイド

編集
この記事の要点
  • wp-config.phpDB_NAME / DB_USER / DB_PASSWORD / DB_HOST / DB_CHARSET / DB_COLLATE が接続情報
  • $table_prefix はテーブル名のプレフィックス(既定 wp_)。マルチサイト共有時は変更
  • SSL 接続には MYSQL_CLIENT_FLAGSMYSQL_SSL_CA 等の定数を使用
  • 複数 DB / レプリ運用は HyperDB / LudicrousDB プラグイン
  • wp-cli で安全に設定変更: wp config set DB_HOST localhost
  • よくあるエラー: Error establishing a database connection(接続失敗の総称、原因を順に切り分け)

wp-config.php の基本

WordPress の DB 接続情報はサイトルートの wp-config.php に書かれます。インストーラが自動生成しますが、後から手動で編集も可能。

<?php
// ** MySQL settings - You can get this info from your web host ** //
define('DB_NAME',     'wordpress');           // データベース名
define('DB_USER',     'wp_user');             // DB ユーザ名
define('DB_PASSWORD', 'StrongPasswordHere');  // DB パスワード
define('DB_HOST',     'localhost');           // DB ホスト
define('DB_CHARSET',  'utf8mb4');             // 文字コード
define('DB_COLLATE',  '');                    // 照合順序(空で OK)

// テーブルプレフィックス
$table_prefix = 'wp_';

// 認証用ユニークキー(wordpress.org/secret-key/1.1/salt/ で生成)
define('AUTH_KEY',         'put your unique phrase here');
define('SECURE_AUTH_KEY',  '...');
// ...

// デバッグ
define('WP_DEBUG', false);
define('WP_DEBUG_LOG', false);
define('WP_DEBUG_DISPLAY', false);

各定数の意味

定数意味
DB_NAMEデータベース名wordpress
DB_USERDB 接続ユーザwp_user
DB_PASSWORDDB パスワード****
DB_HOSTDB ホスト(ポート指定可)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備考
XServerlocalhost同一サーバ前提
さくらインターネットmysqlNNN.db.sakura.ne.jpNNN は契約ごとに異なる
ロリポップmysqlxxx.phy.lolipop.lan管理画面で確認
ConoHa WINGlocalhost同一サーバ
AWS Lightsail (WP)localhostbitnami 構成
AWS RDSxxx.rds.amazonaws.comSSL 推奨

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 GRANTSGRANT 付与
接続元 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 や Nginx location で拒否
  • DB ユーザはWordPress 用 DB だけにアクセス可能な権限に絞る(FILE / SUPER は不要)
  • クレデンシャルは git にコミットしない。.gitignorewp-config.php を入れる
  • 本番では WP_DEBUG_DISPLAYfalseWP_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 する書き方も一般的です。

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. インストール方法(Ubuntu + Apache)
  2. Wordpressのインストール方法
  3. ローカル環境への導入方法
  4. PHPの使用方法
  5. DB設定
  6. DB接続方法
  7. index.phpをURLに含めないようにする方法
  8. コメントに絵文字を入力可能にする方法
  9. サイト(ドメイン)の引越し方法
  10. 独自の関数一覧
  11. エラー一覧
  12. Wordpressの一連の処理の流れ

最近更新/作成されたページ