【テスト環境として便利】同じサーバ内でWordPressのサイトの複製を作る方法
2020/02/10
最近、WordPressのテスト環境が必要になって、実際に運用しているWordPressのサイトを同じサーバの中で複製、つまりまったく同じコピーサイトを作るということをやりました。
それほど面倒な手順ではなかったのですが、念のため忘れないように、備忘録として今回ここで記事にしておくことにしますよ。
テーブルのエクスポート
「phpMyadmin」を使って、必要なテーブルをエクスポートします。
ログインしたら、左サイドバーの一覧の中から該当のデータベースを選んで、クリックします。
右側にデータベース内のテーブルの一覧が表示されますが、その上にある「エクスポート」タブをクリックします。
「エクスポート」の画面になるので、「エクスポート方法」として「詳細‐可能なオプションをすべて表示」をクリックします。
オプションが表示されるので、その設定を以下のようにします。
テーブル
必要なテーブル(該当のWordPressのプリフィックスがついているテーブル)をすべて選択する(コントロールキーを押しながらクリックすると複数選択できる)。
出力
出力をファイルに保存する
・ファイル名のテンプレート:@DATABASE@(デフォルトのままで良いが変更するのも可)
・ファイルの文字セット:utf-8(デフォルトのまま)
・圧縮:なし(デフォルトのまま)
フォーマット
SQL(デフォルトのまま)
フォーマット特有のオプション
すべてデフォルトのまま。
・コメントの表示(エクスポート日時、PHP や サーバ のバージョンなどの情報が含まれます):これのみチェック
・他のデータベースシステムまたは古い MySQL サーバとの互換性:NONE
・構造とデータを選択
生成オプション
すべてデフォルトのまま。
・CREATE PROCEDURE / FUNCTION / EVENT コマンドを追加する:チェック
・CREATE TABLE オプション:チェック
・IF NOT EXISTS:チェック
・AUTO_INCREMENT:チェック
・逆クォートでテーブルやカラムの名前を囲む(特殊な文字やキーワードを含むカラム名やテーブル名を保護します):チェック
Data creation options
すべてデフォルトのまま。
・データをダンプするときに使うコマンド:INSERT
・データを挿入するときに使う構文:「上の両方を行う」を選ぶ
・作成するクエリの最大長:50000
・16進表記でバイナリカラムをダンプする(例:"abc"を 0x616263):チェック
・TIMESTAMPのカラムをUTC(協定世界時)でダンプする(ダンプするサーバと読み込ませるサーバのタイムゾーンが異なる場合に有効です):チェック(同一サーバなので外しても良いがこのままでも可)
エンコーディングへの変換
すべてデフォルトのまま。
・なし
実行
上記を確認したら(特に必要の無い限りすべてデフォルトのまま)、「実行」ボタンをクリックします。
エクスポートしたデータの書換え
「エクスポート」が完了すると、ローカルにSQLファイルがダウンロードされるので、まずはこれのコピーを取って、イザというときのバックアップとしましょう。
次に、この「エクスポート」したSQLファイルをコピー先の情報に合わせるために、内容を書き換えます。
ここでは書換えの例として、コピー元とコピー先の情報は以下のとおりであるとします。
・コピー元
WordPressアドレス(URL):http://example.com/wp1
テーブル・プリフィクス:wp1_
・コピー先
WordPressアドレス(URL):http://example.com/wp2
テーブル・プリフィクス:wp2_
WordPressアドレス(URL)の書換え
「エクスポート」したSQLファイルをエディタで開いて、全置換で「http://example.com/wp1」を「http://example.com/wp2」に書き換えます。
テーブル・プリフィクスの書換え
「エクスポート」したSQLファイルをエディタで開いて、全置換で「wp1_」を「wp2_」に書き換えます。
今回は同じDB内にインポートしたのでテーブル・プリフィクスを変更しましたが、インポート先が別のDBの場合はテーブル・プリフィクスは書き換えずに同じままでも問題無いでしょう。
【重要】コピー元とコピー先のWordPressアドレス(URL)やテーブル・プリフィクスの文字の長さが違うとき
今回の例では、敢えてコピー元とコピー先のWordPressアドレス(URL)やテーブル・プリフィクスの文字の長さが同じになるようにしました。
これは、「エクスポート」したSQLファイルの中に、文字の長さを含む要素が記述されているため、書換え前と後の文字の長さが変わると不具合が発生するためです。
例えば、コピー先のテーブル・プリフィクスが「wp_copy_」だったりすると、文字の長さがコピー元が“3”でコピー先が“8”になります。
この場合、そのまま上記の手順で全置換をして「インポート」すると、プラグインが動かなくなったり、ウィジェットが無くなったりするので要注意です。
テーブルのインポート
上で書換えが終わったSQLファイルを使って、テーブルの「インポート」を行います。
「エクスポート」したときと同様に、左サイドバーの一覧の中から該当のデータベースを選んでクリックしてから、右側の「インポート」タブをクリックします。
「インポート」の画面になるので、その設定を以下のようにします。
インポートするファイル
・「ファイルの選択」ボタンをクリックして、上で書換えをしたSQLファイルを選択します。
・ファイルの文字セット:utf-8(デフォルトのまま)
部分インポート
すべてデフォルトのまま
・Allow the interruption of an import in case the script detects it is close to the PHP timeout limit. (This might be a good way to import large files, however it can break transactions.):チェック
・先頭から数えたスキップする行数:0
フォーマット
SQL(デフォルトのまま)
フォーマット特有のオプション
すべてデフォルトのまま。
・SQL互換モード:NONE
・値がゼロのものに対して AUTO_INCREMENT を使用しない:チェック
エンコーディングへの変換:
すべてデフォルトのまま。
・なし
実行
上記を確認したら(特に必要の無い限りすべてデフォルトのまま)、「実行」ボタンをクリックします。
記事の量などにもよりますが、「インポート」は「エクスポート」よりも時間がかかりますので、あわてずしばらく待ちましょう。
終わったらテーブルの一覧を見て、コピー先のテーブル・プリフィクスでテーブルが作成されていることを確認しましょう。
ディレクトリのコピー
ディレクトリを丸ごとコピー
「エクスポート」と「インポート」でテーブルのコピーが完了したら、最後はディレクトリのコピーです。
利用しているサーバでSSHが使用できるならば、コピーコマンドを使ってディレクトリをまるごとコピーすれば早いです。
SSHが使用できない場合は面倒ですが、いったんFTPで該当ディレクトリをダウンロードしてから、新規に作ったコピー先のディレクトリに再度アップロードするという手順になります。
コピー先のConfigファイルの書換え
最後にConfigファイルの書換えをしますが、FTPでファイルをダウンロードした場合は、アップロードの前にやっておくことになります。
書き換えるのは「wp-config.php」というファイルですが、もちろんコピー元とコピー先で情報が変わった箇所を書き換えるわけです。
例えば、以下の部分が書換えの該当箇所になると思います。
/** WordPress のためのデータベース名 */
define('DB_NAME', 'XXXXXX');
/** MySQL データベースのユーザー名 */
define('DB_USER', 'XXXXXX');
/** MySQL データベースのパスワード */
define('DB_PASSWORD', 'XXXXXX');
/** MySQL のホスト名 */
define('DB_HOST', 'XXXXXX');
/**
* WordPress データベーステーブルの接頭辞
*
* それぞれにユニーク (一意) な接頭辞を与えることで一つのデータベースに複数の WordPress を
* インストールすることができます。半角英数字と下線のみを使用してください。
*/
$table_prefix = 'wp2_';
同じデータベース内でのコピーの場合は、テーブル・プリフィクス以外は書き換える必要は無いでしょう。
その他の注意点
表示速度を上げるためのキャッシュを持つようなプラグインを使っている場合は、作業前にすべてプラグインをいったん停止しておいたほうがいいでしょう。
今回のコピーサイトはテスト環境として使用するため検索エンジンへの登録はしたくないので、「設定」の「表示設定」で「検索エンジンでの表示」の“検索エンジンがサイトをインデックスしないようにする”にチェックを入れておきました。
さらに、Pingを送信するようなプラグインも停止しました。
まとめ
まったく同じコピーサイトができたので、これからはコチラを使ってテストが実施できるようになりました。
WordPressのバージョンアップとか、テーマの変更・プラグインの導入など、いきなり本番サイトではやりにくいことがけっこうあるので、これから便利に使えそうですよ。