コンテンツへスキップ

WordPress のDB を変更する方法。

概要

WordPress(以下、WP)のサイトを複製する為、データベース(以下、DB)の差し替えと、テーブル接頭辞の変更方法を検証した時のメモです。

目的は、WP サイトの複製です。

DB を差し替えと、同一DB 内にサイトのデータを複製するケースも考えて、テーブルの接頭辞も変更してみました。
また、ドメインも変更してます。

前提

  • WordPress を使うための環境がローカルのサーバーにインストールされています。
  • DNS で、ローカルサーバーのホスト名(FDQN)をWEBサイトのURL と同様にしています。
    • WEBサイト:zapping.beccou.com
    • ローカルサーバー:zapping.beccou.com(=localhost)

環境の詳細については、下記の記事をよければ参照ください。

Apache はSSL にしました。

ソースの準備。

レンタルサーバー等から複製したいWordPress(以下、WP) のデータをバックアップします。

  • WP のインストールフォルダの中身を丸ごとFTP でダウンロード。
    ・・・(A)
  • データベースから、WP が使っているテーブルをダウンロード。
    ・・・(B)

ちなみにサーバーはロリポップです。DB は「MySQL」で管理ソフトには、「phpMyAdmin」が標準で装備されています。

WP の再構築

ここから、別のサイトとしてバックアップしたWP を再構築します。

サイトのフォルダ

(A)のフォルダは、ローカルサーバーの適当な場所にコピーします。
このフォルダを後からApache のドキュメントルートに設定します。

また、ドキュメントルートを変更すると、phpMyAdmin を使用するときにいちいち元に戻すのが面倒だったので(localhost/phpmyadmin に構築していた為)、phpMyAdmin のインストールフォルダを(A)のフォルダ内に移動しています。

図1: ローカルサーバー環境のフォルダ構成。phpMyAdmin や wp-admin、wp-content、wp-config.php などが並ぶ。
図1: ローカルサーバー環境のフォルダ構成。phpMyAdmin や wp-admin、wp-content、wp-config.php などが並ぶ。

データベース

適当な名前で新規データベース(以下DB)作成し、(B)をインポートします。phpMyAdmin で編集していきます。

接頭辞の変更

テーブルの接頭辞をリネームします。
(DB が一つしか使えない場合にテーブルの接頭辞を変更して共存させるための検証です。)

接頭辞を変更するテーブルをすべてにチェックを入れます。

図2: phpMyAdmin で、接頭辞を変更したいテーブル(wp1_〜)をすべてチェック。
図2: phpMyAdmin で、接頭辞を変更したいテーブル(wp1_〜)をすべてチェック。

画面下の「チェックしたものを・・・▼」のメニューから、
「テーブル名の接頭辞を付け替える」を選択します。

図3: 「チェックしたものを・・・」メニューから「テーブル名の接頭辞を付け替える」を選択。
図3: 「チェックしたものを・・・」メニューから「テーブル名の接頭辞を付け替える」を選択。

付け替え元と、付け替え先を設定します。

付け替え元・・・wp1
付け替え先・・・wp4
→「wp1_test_table」が「wp4_test_table」 になります。

図4: 「テーブル名の接頭辞を付け替える」ダイアログ。付け替え元 wp1、付け替え先 wp4 を指定。
図4: 「テーブル名の接頭辞を付け替える」ダイアログ。付け替え元 wp1、付け替え先 wp4 を指定。

リネームされたことを確認します。

図5: 接頭辞が wp4_ にリネームされたことを確認。
図5: 接頭辞が wp4_ にリネームされたことを確認。

さて、テーブル名をリネームしただけだと、サイトがDB を参照することはできるようになりますが、ダッシュボードにアクセスできなかったり、問題が発生します。

検索タブに移動して、リネームしたテーブル内で変更前の「wp1_~」の値を保持している個所を検索します。

図6: phpMyAdmin の検索タブで「wp1」を含む値を検索。
図6: phpMyAdmin の検索タブで「wp1」を含む値を検索。

各テーブル内で、いくつヒットがあったか、一覧で表示されました。
横の「表示 / 削除」の表示をクリックして、値を確認します。

図7: 検索結果、各テーブルでのヒット件数が一覧表示された。
図7: 検索結果、各テーブルでのヒット件数が一覧表示された。

こんな感じで、まだ接頭辞の変更しないといけなさそうなものが見つかりました。

図8: wp_options テーブルに、まだ変更前の「wp1_user_roles」が残っているのを発見。
図8: wp_options テーブルに、まだ変更前の「wp1_user_roles」が残っているのを発見。

ダブルクリックすると、値が編集できるので、「wp4_~」になるように編集します。

図9: option_name の値をダブルクリックして「wp4_user_roles」に編集中。
図9: option_name の値をダブルクリックして「wp4_user_roles」に編集中。

エンターキー押す、編集フィールド内をクリックする等すると、変更が反映されます。

図10: 編集を確定すると「1 行変更しました」と表示された。
図10: 編集を確定すると「1 行変更しました」と表示された。

他にもヒットした値について同様に確認し、必要がありそうなところは編集します。
プラグインで使っている値などもあるようなので判断して編集しましょう。
デフォルトでインストールした状態のWP のDB なんかを参考にすると良いかもしれません。
ちなみに私は全部書き換えました。

図11: wp_usermeta テーブルの meta_key もすべて wp4_ 接頭辞に書き換え完了。
図11: wp_usermeta テーブルの meta_key もすべて wp4_ 接頭辞に書き換え完了。

以上でDB の準備は終わりです。

wp-config.php の編集

次にwp-config.php の内容を編集します。(A)のフォルダ内にある、WP の設定ファイルです。

インストールした時の情報が保存されているので、(B)の情報に書き換えます。
この作業で、DB の参照先を変更できます。

※DB 名、ユーザー名は(パスワードも)以前のWP サイトのものとは別の値を入れています。
要は、リネームしても大丈夫、ユーザーも権限があればOKと思われます。
MySQL のホスト名も違う値が入っていましたが、localhost で認識してくれてます。

図12: wp-config.php の DB_NAME、DB_USER、DB_PASSWORD、DB_HOST を新しい DB の情報に書き換える。
図12: wp-config.php の DB_NAME、DB_USER、DB_PASSWORD、DB_HOST を新しい DB の情報に書き換える。

それからもう少し下に下がっていくと、接頭辞を定義する箇所があります。
ここで、変更した接頭辞を指定します。

図13: wp-config.php の $table_prefix を 'wp4_' に設定。
図13: wp-config.php の $table_prefix を ‘wp4_’ に設定。

設定ファイルを保存したら、DB の差し替え作業は終了です。

動作確認。

WEB ブラウザにて、zapping.beccou.com にアクセスします。

ms系関数が使えない問題。

いきなりのエラー。
先ほどのwp-config.php でデバックをオン(※1)に設定しておくと、上記の様に詳細なエラーが表示されます。

図14: アクセスしてみたら Fatal error。mb_strtolower() が使えないというエラー。
図14: アクセスしてみたら Fatal error。mb_strtolower() が使えないというエラー。

※1 デバックモード:オン

/**
 * 開発者へ: WordPress デバッグモード
 *
 * この値を true にすると、開発中に注意 (notice) を表示します。
 * テーマおよびプラグインの開発者には、その開発環境においてこの WP_DEBUG を使用することを強く推奨します。
 *
 * その他のデバッグに利用できる定数については Codex をご覧ください。
 *
 * @link http://wpdocs.osdn.jp/WordPress%E3%81%A7%E3%81%AE%E3%83%87%E3%83%90%E3%83%83%E3%82%B0
 */
define('WP_DEBUG', true);
 ← false を true に変更する。

エラーメッセージを調べていくと、mb 系関数がデフォルトでは使えない。というのが問題のようです。これは使っているプラグインによって書かれた記事の影響が出ていると推察しています。
※古いDB バックアップをインポートした時は、このエラーは出ませんでした。

モジュールといえば、php.ini なので、調べてみると、「mbstring」という拡張機能があったので、有効化。

図15: php.ini で extension=mbstring を有効化。
図15: php.ini で extension=mbstring を有効化。

再び、サイトへアクセスすると、無事にサイトを見ることができました。

図16: 再アクセスすると、無事サイトのトップページが表示された。
図16: 再アクセスすると、無事サイトのトップページが表示された。

記事が閲覧できない問題。

しかし、記事が見られない。。。

図17: でも記事ページの方は404 Not Found に。
図17: でも記事ページの方は404 Not Found に。

ダッシュボードにはアクセスできるので、プラグインを無効化したり、いろいろとした結果、パーマリンクを「基本」にすることで解消しました。

割と、大きな問題だと思うので、修正方法をまた調べたいと思います。
WEBサイトに展開した場合は、いいのかもしれないし。

後日記入: WEB サイト上での変更では、この現象は起きませんでした。拡張機能などの環境の問題だと思います。

図18: パーマリンク設定を確認すると「基本」(?p=123 形式)になっていた。
図18: パーマリンク設定を確認すると「基本」(?p=123 形式)になっていた。

とりあえず、記事は見られるからOK。
投稿も出来たし。

図19: ?p= の形式なら、記事もちゃんと表示された。
図19: ?p= の形式なら、記事もちゃんと表示された。

WP サイトのURL を変更する。

最後に、WEB サイト上で同じURL は使えない、というか分けたい訳なのでURL を変更する方法を検証。

普段ならダッシュボードにアクセスして「一般」の設定から変更できますが、
それが今回はできない(元のサイトのダッシュボードにアクセスしてしまう、というか区別つかないはず。)ので、DB を直接編集して書き換えます。

参照しているテーブル上で、URL を「完全一致」で検索すると、下記の値がヒットしました。

ネットで調べると、この値の変更は、「一般」の設定画面でURL を変更しているのと、同じだそうです。

図20: 「https://zapping.beccou.com」で検索すると、siteurl と home の値がヒット。
図20: 「https://zapping.beccou.com」で検索すると、siteurl と home の値がヒット。

値を新しいURL へ変更します。

図21: siteurl と home の値を新しいURL(test.beccou.com)に書き換え、「1 行変更しました」。
図21: siteurl と home の値を新しいURL(test.beccou.com)に書き換え、「1 行変更しました」。

同時にDNS サーバーのゾーンファイルを編集して、zapping.beccou.com の参照先だったIP アドレスを新ホスト名 test.beccou.com の参照先になるように変更しておきます。

図22: DNS のゾーンファイルに、testサーバー用のAレコードを追加。
図22: DNS のゾーンファイルに、testサーバー用のAレコードを追加。

新URL へアクセス。
ちゃんと変更後のURL で接続できました。
サイトのURL が変更されているのが確認できました。

図23: 新しいURL(test.beccou.com)でアクセスすると、ちゃんと記事が表示された。
図23: 新しいURL(test.beccou.com)でアクセスすると、ちゃんと記事が表示された。

まとめ

という事で、一部パーマリンクの設定に問題はありますが、DB を差し替える手順の検証してはOK にしようと思います。

また、WEB 上で差し替えを行ってみて結果を比べたいと思います。
(環境の問題であれば解消されるはず。)

(Visited 2,117 times, 1 visits today)
タグ:

コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です