WordPress サイトを複製で URL が変わる場合はテキストエディタなどでの単純な文字列置換では、正常に動作しません。この場合、 PHP のserialize()
によってエンコードされたデータの変更も必要になります。
今回は WordPress をコマンドラインで操作できるツール WP-CLI(WordPress Command Line Interface)を使用し、シリアライズされたデータも含めてデータベースを複製する方法を紹介します。
この手法は異なるドメインへの移設やサブドメインやサブディレクトリでのステージング環境構築にも活用できます。
wp-cli がインストールされているか確認
which wp
何も表示されない場合 → wp-cli が未インストール
/usr/local/bin/wp
などのパスが表示される場合 → wp-cli はインストール済み
wp-cli をインストール
WP-CLI が未インストールの場合、以下のコマンドでインストールします。
# 1. WP-CLI のダウンロード
curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
# 2. 実行権限を付与
chmod +x wp-cli.phar
# 3. システムのパスに移動(sudo が必要)
sudo mv wp-cli.phar /usr/local/bin/wp
# 4. インストール確認
wp --version
# 5. 動作確認(以下のようにバージョンが表示される)
WP-CLI 2.x.x
データベースの複製
ここではexample.com
のサイトをexample.com/proto
に複製する流れを説明します。すでに WordPress 本体やテーマ・プラグインなど、物理ファイルは複製しているものとします。
使用するデータベースは以下のとおりです。
- 複製元データベース:
example_db.sql
- 元のデータベース
- 一時保存データベース:
tmp_proto_example_db
- 一時的にデータを展開するためのデータベース
- 複製先データベース:
proto_example_db
- ステージング環境のデータベース
なお、一時データベースを省略し、直接 proto_example_db
にインポートすることも可能です。ただ、一時データベースで URL の変更などを行った上で最終的に複製先に適用することで、データの整合性を保ちつつ安全に反映できます。
通常、ステージング環境は随時更新しながら運用するため、一時データベース tmp_proto_example_db
を経由する方法が適しています。
wp-config.php を修正
このインポートでは、指定フォルダのwp-config.php
を参照してデータベースを操作しますので、インポート前に proto 環境のwp-config.php
を適切に設定しておく必要があります。
define('DB_NAME', 'proto_example_db');
define('DB_USER', 'user');
define('DB_PASSWORD', 'password');
define('DB_HOST', 'localhost');
複製先データベースを作成
mysql -u root -p -e "CREATE DATABASE proto_example_db;"
データベースの権限を設定
作成したproto_example_db
にproto_user
の権限を追加。 WordPress がデータベースを操作可能にします。
mysql -u root -p -e "GRANT ALL PRIVILEGES ON proto_example_db.* TO 'proto_user'@'localhost';"
wp-cli で複製元データベースをエクスポート
一時保存データベース:tmp_proto_example_db
として書き出します。 wp-cli は root ではなく、通常、 WordPress が実行される www-data や apache ユーザーでの操作が推奨されています。ただし、環境によっては フルパス指定が必要になることがあります。
www-data ユーザーでエクスポート
sudo -u www-data /usr/local/bin/wp db export /var/www/html/tmp_proto_example_db.sql --path=/var/www/html/example.com
root で実行する
--allow-root
をつける。
wp db export /var/www/html/tmp_proto_example_db.sql --path=/var/www/html/example.com --allow-root
複製用データベースにインポート
複製先データベース: proto_example_db
として、インポートします。
sudo -u www-data wp db import /var/www/html/tmp_proto_example_db.sql --path=/var/www/html/example.com/proto
root での実行
wp db import /var/www/html/tmp_proto_example_db.sql --path=/var/www/html/example.com/proto --allow-root
wp-cli を使って URL やパスを一括変更
データベースを proto 環境で動作させるには、 URL やパスをwp search-replace
で修正します。
sudo -u www-data /usr/local/bin/wp search-replace 'https://example.com' 'https://example.com/proto' --precise --recurse-objects --all-tables --path=/var/www/html/example.com/proto
root での実行
wp search-replace 'https://example.com' 'https://example.com/proto' --precise --recurse-objects --all-tables --path=/var/www/html/example.com/proto --allow-root
置き換えの確認
home と siteurl の適切な置き換えを確認します。
MySQL で確認
MySQL にログインします。
mysql -u root -p
データベースを指定
USE proto_example_db; -- 実際のデータベース名を指定
Database changed
で該当データベースを参照できます。
home と siteurl の確認
SELECT option_name, option_value FROM wp_options WHERE option_name IN ('home', 'siteurl');
出力例
+-------------+-------------------------------------+
| option_name | option_value |
+-------------+-------------------------------------+
| home | https://example.com/proto |
| siteurl | https://example.com/proto |
+-------------+-------------------------------------+
wp-cli で WordPress の状態を確認
WordPress が正しくインストールされているか確認します。
wp core is-installed --path=/var/www/html/example.com/proto --allow-root
エラーが出力されなければ ok です。
siteurl と home の最終確認
wp option get siteurl --path=/var/www/html/example.com/proto --allow-root
wp option get home --path=/var/www/html/example.com/proto --allow-root
https://example.com/proto
が返ってくることが確認できます。
これで、 WP-CLI を使った WordPress のデータベースを proto 環境にコピーし、正しく動作させるための URL 書き換えは完了です!
この手順を活用すれば、ステージング環境の構築や本番環境への移行がスムーズに行えます。
この記事が役に立ったら「いいね」!