WordPress のサイトのデモサイト作成、ディレクトリ移動など、WordPressを丸ごと複製したい場合が稀にあります。たとえば大きなアップデートを行う前に、サイトの最新の状態を丸ごと複製し、そこで試してから本番に反映するなど。僕もこのサイトではありませんが、失敗できない他のサイトで動作確認をするときなどに、今回紹介する方法を使ってデモサイトを作成して試しています。
バックアップ系プラグインを使用した一般的な複製方法では、バックアップしたファイルのダウンロードとアップロードに果てしない時間がかかってしまうため、それだけで大作業になります。
そこで便利なのが今回紹介するSSHを使用する方法です。ただし、SSHはレンタルサーバーの下位プランでは使用できない場合が多いため、まずはご利用のサーバーでSSHが使用可能かどうか確認ください。併せて複製した側の方にもデータベースが必要となりますので、利用中のプランで複数のデータベースが使用可能かどうかも確認しておいてください。
コンテンツ
作業の流れ
今回は、domain.com/peascode のWordPressサイトを複製し domain.com/peascode-demo を作ることを目的とし、下記の流れで解説していきます。
- WordPressのファイル類が格納されているディレクトリ[/www/peascode]をコピーして[/www/peascode-demo]を作成する。
- WordPressのデータが保存されているデータベース[peascode-db] からエクスポートし、デモ用データベース[peascode-db-demo] にインポート。
- [/www/peascode-demo] の [wp-config.php] 内のデータベース接続情報の変更と、データベース[peascode-db-demo]に登録されたサイトURLを変更。
SSHを使ってデータベースを新規作成できる「root権限」はレンタルサーバーの共有プランでは使用できないため、コントロールパネルなどから、デモ用データベース(peascode-db-demo など)を事前に作成しておいてください。
準備サーバーに接続
まずはSSHでサーバーに接続します。
ssh の後に ユーザ名@ホストアドレス or ホストIPアドレス で接続できます。ポート番号を指定する場合は -p オプションを使用します。
ssh user01@peascode.com
パスワードを聞かれるので入力して接続完了!
user01@peascode.com's password: ↲
FreeBSD 9.1-RELEASE-p24 (SAKURA33) #0: Thu Feb 5 00:03:33 JST 2015
Welcome to FreeBSD!
%
SSHの利用に関しては下記の記事で少し詳しく書いているので参考にしてください。
STEP1ファイル類のコピー
WordPressがインストールされているディレクトリを丸ごとコピーします。
その前にまずは分かりやすいようにコピーしたいディレクトリのある階層に移動します。今回コピーするディレクトリは、/www/peascode なので、/www に移動しておきます。移動するコマンドは cd です。
cd www
peascode ディレクトリを丸ごとコピーします。コピーコマンドは cp です。-a オプションは、ディレクトリ構造や所有者、パーミッションなど可能な限り保持してコピーします。
cp -a ./peascode ./peascode-demo
画像や動画など重いファイルが多数含まれる場合は、コピーに数分程度時間がかかることがあります。
ls コマンドでコピーされていることを確認します。-l オプションでパーミッションなど詳細を表示します。
ls -l ↲
drwx---r-x 5 user01 users 1024 Nov 6 21:47 peascode
drwx---r-x 5 user01 users 1024 Nov 6 21:47 peascode-demo
STEP2データベースのコピー
データベースの場合はコマンド1つでコピーとはいかないため、エクスポート&インポート で複製を実現します。そのため、複製先のテータベースは事前に用意しておいてください。
エクスポート&インポート(一括処理)
データベースのエクスポートとインポートを1行で完了する場合は下記のコマンドを使います。エンターを押すと、エクスポートとインポートそれぞれのデータベースのパスワードを聞かれます。-p
の後(スペースなし)にパスワードを指定しておくことも可能です(例:-pPASSWORD)。
mysqldump -u user01 -p peascode-db --single-transaction | mysql -u user01 -p peascode-db-demo
- 接続DBのホストが「localhost」以外の場合は、 -h host_name のオプションでホスト名を指定。
- --single-transaction は、その時点でのスナップショットデータからダンプ。
エクスポートとインポートを別々に行う場合
ちなみにエクスポートとインポートを分けて行う場合のコマンドは下記のとおりです。db_dump.sql ファイルにエクスポートデータが保存されます。
エクスポート
mysqldump -u user01 -p peascode-db --single-transaction > db_dump.sql
インポート
mysql -u user01 -p peascode-db-demo < db_dump.sql
STEP3設定変更
ファイルとデータベースの複製が完了したら、設定変更を行います。
wp-config.php のデータベース接続情報の変更
コピーしたディレクトリ(peascode-demo)の[wp-config.php]内のデータベース接続情報を変更します。
peascode-demo/wp-config.php
// ** MySQL 設定 - この情報はホスティング先から入手してください。 ** //
/** WordPress のためのデータベース名 */
define( 'DB_NAME', 'peascode-db-demo' );
/** MySQL データベースのユーザー名 */
define( 'DB_USER', 'user01' );
/** MySQL データベースのパスワード */
define( 'DB_PASSWORD', 'USER01PASSWORD' );
/** MySQL のホスト名 */
define( 'DB_HOST', 'localhost' );
/** データベースのテーブルを作成する際のデータベースの文字セット */
define( 'DB_CHARSET', 'utf8mb4' );
/** データベースの照合順序 (ほとんどの場合変更する必要はありません) */
define( 'DB_COLLATE', '' );
データベース(peascode-db-demo)に登録されたサイトURLを変更
WordPress に登録されたサイトURLを変更します。phpMyAdmin から変更しても良いですが、既にコマンドプロンプロを開いているので、コマンドで変更してしまいましょう。
mysql コマンドを使用して複製したデータベースにログインします。-D オプションでデータベースを指定します。-p
の後(スペースなし)にパスワードを指定しておくことも可能です(例:-pPASSWORD)。
mysql -u user01 -D peascode-db-demo -p
- 接続DBのホストが「localhost」以外の場合は、 -h host_name のオプションでホスト名を指定。
サイトURLを[https://domain.com/peascode-demo]に変更します。
UPDATE wp_options SET option_value = 'https://domain.com/peascode-demo' where option_name IN ('home','siteurl');
変更したサイトURLが反映されているかどうか確認します。
SELECT * FROM wp_options WHERE option_name IN ('home','siteurl'); ↲
+-----------+-------------+---------------------------------+----------+
| option_id | option_name | option_value | autoload |
+-----------+-------------+---------------------------------+----------+
| 2 | home | https://domain.com/peascode-demo | yes |
| 1 | siteurl | https://domain.com/peascode-demo | yes |
+-----------+-------------+---------------------------------+----------+
2 rows in set (0.00 sec)