さくらのレンタルサーバの「スタンダード」プランを利用しているのですが、スタンダードプランではデータベースが20個作れるので、単純計算すると20個のWordPressサイトが作れます。
原則として「1つのWordPressサイトにつき、1つのデータベースを使う」という形がベストだとは思うのですが、あまり稼働していないサイトで丸々1個のデータベースを使うのは勿体無い気がしたので、個人的な2つのWordPressサイトを1つのデータベースで運用する事にしました。
ですがそのためには、すでにインストールされたWordPressのデータベースのテーブル接頭辞(prefix)を変更しなければなりませんでした。
データベースの知識がほとんどない上、検索して出てくる方法はphpMyAdminの方法で、Adminerでの方法が見つからず何のこっちゃで大変でしたが、何とか出来たのでその覚え書きです。
Local by FlywheelのWordPressのテーブル接頭辞は
今回、1つのデータベースで運用したい2つのサイトは、本番環境で稼働する前に、まずローカル環境(Local by Flywheel)のWordPressに移す予定です。
ですがLocal by FlywheelではWordPressを自動インストールする際、テーブル接頭辞(prefix)を入力する事が出来ません。
そのため、2つのサイトのデータベースの接頭辞が、どちらもデフォルトの「wp_」となってしまいます。
これでは、同じデータベースにインポートした場合にどれがどのサイトのデータベースか分からなくなってしまいます。
いやその前に、先にインポートした方が、同じ接頭辞を持つ別サイトで上書きされれてしまうなど色々不具合が想定されます。
なのでデーター移行の前に、それぞれのデータベースの接頭辞を変更しました。
目指す完成形の例
変更前
WordPressサイトA : データベースの接頭辞「wp_」
WordPressサイトB : データベースの接頭辞「wp_」
変更後
WordPressサイトA : データベースの接頭辞「wp1_」
WordPressサイトB : データベースの接頭辞「wp2_」
Adminerでテーブル接頭辞を変更する方法
変更の手順は、次のステップです。
1.wp-config.phpの接頭辞の変更
2.Adminerで全てのテーブルの接頭辞の変更
wp-config.phpの接頭辞の変更
Local Siteの「wp-config.php」を修正します。以下の場所に収納されています。
* WordPress Database Table prefix. * * You can have multiple installations in one database if you give each * a unique prefix. Only numbers, letters, and underscores please! */ $table_prefix = 'wp_';
「wp_」から「wp1_」に変更する場合、以下のように上書きして保存します。
$table_prefix = 'wp1_';
phpを保存する時のコードは「UTF-8N」(ボム無し)、改行コードは「LF」にします。
Adminerで全てのテーブルの接頭辞の変更
Local by Flywheelを立ち上げ、「DATABASE」→「ADMINER」をクリック。
利用しているデータベースを選択し「SQLコマンド」をクリックします。
すると右側にSQLコマンド入力画面が出るので、ここに接頭辞を書き換えるクエリを入力していきます。
以下は「wp_」から「wp1_」に変更する場合です。
ALTER TABLE wp_commentmeta RENAME TO wp1_commentmeta; ALTER TABLE wp_comments RENAME TO wp1_comments; ALTER TABLE wp_links RENAME TO wp1_links; ALTER TABLE wp_options RENAME TO wp1_options; ALTER TABLE wp_postmeta RENAME TO wp1_postmeta; ALTER TABLE wp_posts RENAME TO wp1_posts; ALTER TABLE wp_termmeta RENAME TO wp1_termmeta; ALTER TABLE wp_terms RENAME TO wp1_terms; ALTER TABLE wp_term_relationships RENAME TO wp1_term_relationships; ALTER TABLE wp_term_taxonomy RENAME TO wp1_term_taxonomy; ALTER TABLE wp_usermeta RENAME TO wp1_usermeta; ALTER TABLE wp_users RENAME TO wp1_users;
「実行」をクリックすると、テーブル名が全て書き換えられました。
続けて、SQLコマンド入力画面に下記のクエリも記述して実行します。
以下は「wp_」から「wp1_」に変更する場合です。
UPDATE wp1_options SET option_name = 'wp1_user_roles' WHERE option_name = 'wp_user_roles'; UPDATE wp1_usermeta SET meta_key = 'wp1_capabilities' WHERE meta_key = 'wp_capabilities'; UPDATE wp1_usermeta SET meta_key = 'wp1_user_level' WHERE meta_key = 'wp_user_level';
これで、作業は完了です。
まとめ
今回はインストールしたばかりのWordPressでプラグインも何も入っていない状態からの変更だったのでこれだけでうまく行きましたが、すでに運営しているサイトだと上記の作業の他、「プラグイン」で使用しているテーブルも接頭辞変更が必要だったり、色々な箇所に以前の接頭辞「wp_」が残っているのでけっこう修正が大変なようです。
Local by FlywheelではWordPressを自動インストールする際にテーブル接頭辞(prefix)を入力する事が出来ず全て「wp_」になってしまうので、今後はインストール直後に接頭辞変更をする事にします。
しかし最初、この手順と全く同じ事をしたのにAdminerで構文エラーが出まくって、解決方法を調べてもうまくいかずで半日も潰してしまいました。(涙)
幸いインストールしたばかりのWordPressで内容も無かったので、ローカルサイトを削除し、新規でまたWordPressをインストールしたら今度はびっくりするほどあっさり。うまく行きました。なぜだ・・・
同じ事をしたのに一体何がどうダメだったのかもわからず仕舞いですが、これでダメならテーブル接頭辞を変更できるプラグインを使おうと諦めモードだったので、
結果オーライで良かった事にしておきます。笑