カテゴリー
サーバー

WordPress データベースを wp-cli で完全複製

URL の変更が伴う WordPress サイトの複製では、データベース内の情報を適切に書き換える必要があります。本記事では、シリアライズデータも含めた安全なデータベースの複製方法を解説します。

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_dbproto_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 書き換えは完了です!
この手順を活用すれば、ステージング環境の構築や本番環境への移行がスムーズに行えます。

この記事が役に立ったら「いいね」!

profile image

執筆:R3098

WEB サービス構築・監修が生業です。 WordPress 関連では Aurora Heatmap などプラグイン開発も行っています。悩めるサイト運営者の無料相談受付けます!

コメントを残す

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

このサイトは reCAPTCHA によって保護されており、Google のプライバシーポリシー および 利用規約 に適用されます。

reCaptcha の認証期間が終了しました。ページを再読み込みしてください。