【WordPress】2つのWordPressを1つのデータベースで管理してみよう

2つのWordPressで会員データとかの共通のテーブルデータを利用したいな~

実は…可能なんです!

目次

1. はじめに

WordPress を複数のサイトで運用する際に、データベースを共有する方法として「1つのデータベースで2つ以上の WordPress を運用する」という手法があります。本記事では、各WordPressで利用しているテーブル接頭辞を変更することで、衝突を防ぎながら同一データベースで管理する方法を解説します。

2. 背景とメリット・デメリット

背景

WordPress は、デフォルトでは wp_ の接頭辞を使用してテーブルを生成します。複数の WordPress サイトが同じデータベースにインストールされる場合、すべてが同じ接頭辞だとテーブル名が衝突して、上書きされたりしてしまいます。そこで、接頭辞を変更することで各サイトのテーブルを分離する方法が有効です。

メリット

  • リソースの共有
    例えば、会員機能などを持たせているときに「顧客情報テーブル」に対して2つのワードプレスからアクセスすることが可能になります。サイトAでユーザー登録していれば、サイトBでの会員機能も利用できるといった構築ができます。
  • 運用の一元化
    テーブルが分かれていないことで、バックアップも一括で取得できます。
開発者向けのメリット

WordPressのデータベース接続をする際に、$wpdb関数が存在します。これは、「WordPressが利用しているデータベース」に接続してくれるので、接頭辞の違うテーブルにもアクセス可能です。

デメリット

  • パフォーマンスの影響
    テーブル数が増えると、サイトの読み込みに影響を与える可能性もあります。
  • 障害発生時の影響範囲
    テーブルが分かれていないことは、メリットもありますが一方のサイトに障害が発生すると、同じデータベースを共有するもう一方にも影響を与える可能性がある点には注意が必要です。

3. 接頭辞の変更方法

WordPress のインストールごとに異なるテーブル接頭辞を設定することで、1つのデータベース内に複数の WordPress インスタンスを安全に共存させることが可能です。

3.1. wp-config.php の編集

各 WordPress のルートディレクトリにある wp-config.php ファイルを開き、以下のようにテーブル接頭辞を定義します。

phpコピーする編集する// 例:サイトAでは “siteA_”
$table_prefix = 'siteA_';

別のサイト用では、たとえば以下のようにします。

phpコピーする編集する// 例:サイトBでは “siteB_”
$table_prefix = 'siteB_';

これにより、WordPress はインストール時にテーブル名の先頭に接頭辞を自動で付与します。

3.2. データベースのインポート/エクスポート

既存のデータベースを共有する場合、以下の点を確認してください。

  • 新規インストールの場合
    各サイトごとに wp-config.php の接頭辞が異なる状態でインストールすると、自動的に正しいテーブルが作成されます。
  • 既存データの移行の場合
    既存のテーブルをインポートする際は、テーブル名に合わせて接頭辞を変更するか、SQL スクリプトでリネームする必要があります。

既存データ移行のときのお役立ち情報

SQL文を使って個別に置き換えるというのが基本にはなりますが、WordPressプラグインの「All in One Security」を利用して一括変更してしまうのも有効です。本来はセキュリティプラグインですが、DB接頭辞の変更機能がありますのでそちらを利用します。

本題からはそれますが、このプラグインの使い方については当サイトでも使い方を紹介していますので、是非ご覧ください

このうち、「データベースセキュリティ」に「データベースの接頭辞」の設定項目があります。

「データベースのテーブル接頭語を新しく生成」から、「入力欄」に任意の文字列を入れ、「データベース接頭語を変更」を押します。

なお、「wp_」を「siteA_」のようにしたい際はアンダーバーも含めて入力してください。間違えると、基本的に置き換えの巻き戻しはできません。バックアップも忘れずにとりましょう!

その上にあるラジオボタンはランダム生成を行うものなので、また別の用途になります。

セキュリティプラグイン用のテーブルが入っていますが、このように置き換えが可能です。不要な場合は手動で削除しましょう。

3.3. 注意点

  • プラグイン依存の設定
    一部のプラグインは、テーブル名をハードコードしている場合があるため、接頭辞変更後は動作確認を必ず行ってください。
  • デバッグとバックアップ
    大きな変更を加える前には必ずバックアップを取得し、テスト環境で動作を確認することが重要です。

4. 実際の運用事例

私の環境では、サイトA とサイトB を同一のデータベースで運用しています。各サイトの wp-config.php に異なる接頭辞を設定することで、下記のようなテーブルが作成されます。

  • サイトA:siteA_posts, siteA_options, siteA_users …
  • サイトB:siteB_posts, siteB_options, siteB_users …

これにより、データベースを共有しつつ、両サイトが独立した WordPress インスタンスとして動作しています。また、複数サイト管理用のバックアップやメンテナンスも一元管理できる点が非常に有用です。


5. まとめと今後の展望

本記事では、WordPress のテーブル接頭辞を変更することで、1つのデータベース内に複数の WordPress サイトを安全に共存させる方法について解説しました。
もちろん、PDOオブジェクトの作成などを利用する別の手法も存在していますが、別DBを作れない・参照できないなどの場合にこの方法も利用してみてください!

このブログ記事はお役に立てましたか?

よかったらシェアしてね!
  • URLをコピーしました!

このブログ記事を執筆したパソコン講師

HTML/CSS、PHPでWordPressを扱うことの多いITエンジニア駆け出しです。まだまだ勉強中のことも多いですが、頑張ります!

質問などあれば気軽に書き込んでくださいね♪

コメントする

目次