こんにちは、カフーブログのタカフです。
お仕事お疲れ様です。
もしあなたがググっていて本記事にたどり着いているのなら、きっとWordPressのデータ移行でお困りなのでしょう。
WordPressの動的データを移行するのって正直しんどいですよね。
WordPressを運営していくと動的データとしてはuploadsディレクトリとDBデータが日々変わっていきますが、これを他の環境に移行したりするのって色々考えたりするので結構大変です。
でも、あなたがそんな内容でお困りなら朗報です。
本記事ではそのWordPress動的データをzipファイルでエクスポートして、他の環境にそのzipファイルをインポートするスクリプトを公開します。
これを使えば本番環境データを他の環境データにワンコマンドで移行やコピーが出来ます。
主な使い方としては本番環境をプレビュー環境やローカル開発環境にデータコピーする事です。もちろん本番環境自体の移行にも使えます。
僕はこれを使って本番環境データから数分で他の環境にデータ同期させて開発を楽にしています。
それでは参りましょう。
※本記事はIT技術者の方を対象とした記事となっています。WordPress初心者の方でWordPressを他のサーバーに移行したい場合は業者に頼んだ方が安全です。最安なら29,800円です。安心を買うようなものですね。
日本初!WordPress専門のサーバー移転代行『サイト引越し屋さん』
何故、このスクリプトを作ったの?
僕はWebエンジニアということもあり、このWordPressブログを色々カスタマイズしているのですが、その時地味に困るのが本番環境からプレビュー環境・ローカル環境へのデータの同期なんですよね。
本番環境でしか起こらない問題や、本番環境と同じデータを持っていないと開発に支障が出るという事があるため、こういったデータ同期が必要なのです。
しかし、上述の通りWordPressのデータって若干扱いが面倒なのでこういう事をするときにいつもしんどかったので、それをほぼ自動化出来るPHPスクリプトを作りました。
僕はこのPHPスクリプトを使って数分で本番環境データをプレビュー環境・ローカル環境にデータを反映させているので、WordPress周りの開発がめちゃくちゃ楽になりました。
同じような悩みを抱えている人にも使ってもらえればと思って、大抵のWordPressでも動くよう汎用的に作ってみました。
WordPressのどのデータを移行出来るの?
WordPressのuploadsディレクトリとDBのデータ全てを移行出来ます。
僕の場合それ以外のソースコードは全てローカル環境→プレビュー環境→本番環境とアップロードしていってます。
そして本番環境でサイト運営していくにつれて増えていくuploadsディレクトリとDBデータをたまにプレビュー環境やローカル開発環境にダウンロードするようにしています。
つまりイメージ図にするとこんな感じになります。
環境毎にテーマカラーを色分けしてわかりやすくしたりしています。
アップロードの流れもWordPressソースコードをGitHubに入れてGitHub Actionsを使って自動デプロイ出来るようにしています。
【便利】GitHub Actionsを使ってレンタルサーバーにSSHでデプロイする方法
何故こうしているかというと、WordPressやプラグイン等が本番環境で勝手にアップデートされると動かなくなる事があったので、個人ブログといえどローカル環境やプレビュー環境で一応動きを確かめてから本番適用するようにしているからです。
個人ブログなのでさくらサーバーをレンタルしてそこにプレビュー環境も作っています。サブドメインを作ってやればわりと簡単に用意できます。
WordPressデータをエクスポートするPHPスクリプト
それではまずWordPressデータをエクスポートするスクリプトの紹介です。
100行ちょっとの簡単なスクリプトです。
PHPスクリプト
<?php
/**
* export_wp_data.php
* WordPressの記事や写真のデータをまるごとエクスポートするPHPスクリプトです。
*
* ■使い方
* 本スクリプトをwordpressディレクトリ直下に置くか、ドキュメントルート外に置いて引数でwp-load.phpのパスを指定して実行します。
*
* ■引数
* -w(必須) : wp-contentディレクトリのパス。
* -h(必須) : MySQLのhostname
* -u(必須) : MySQLのusername
* -p(必須) : MySQLのpassword
* -d(必須) : MySQLのdatabase
* -e(オプション):エクスポート先ディレクトリ
*
* ■セキュリティについて
* 本スクリプトは2つの最低限の以下のセキュリティがあります。
* 1. このスクリプトがCLIからしか実行出来ない事
* 2. エクスポートするzipファイル名に秒単位の日時を付与してファイル名を類推しにくい事
* これによりすぐには悪さは出来ないようになっていますが完璧ではありません。
* ドキュメントルート外に置いて引数指定で実行して、役目を終えたらいずれにファイルもすぐに消すとより安全です。
*/
if (php_sapi_name() != 'cli') {
die("only cli." . PHP_EOL);
}
echo_msg("start export_wp_data");
// まずはこのスクリプトの場所に移動
echo_msg("> cd " . __DIR__);
chdir(__DIR__);
/**
* パラメータの取得
*/
$options = getopt("w:h:u:p:d:e::");
// 必須パラメータ
$wp_content_dir = (isset($options["w"])) ? $options["w"] : die("wp-contentディレクトリパスのパラメータは必須です" . PHP_EOL);
$host = (isset($options["h"])) ? $options["h"] : die("DB接続情報のhostは必須です。" . PHP_EOL);
$user = (isset($options["u"])) ? $options["u"] : die("DB接続情報のuserは必須です" . PHP_EOL);
$pass = (isset($options["p"])) ? $options["p"] : die("DB接続情報のpassは必須です" . PHP_EOL);
$db = (isset($options["d"])) ? $options["d"] : die("DB接続情報のdbは必須です" . PHP_EOL);
// オプションパラメータ
$export_dir = (isset($options["e"])) ? $options["e"] : false; // 指定ない場合はこのディレクトリ
// wp-contentチェック
$wp_content_dir = realpath($wp_content_dir);
if (!$wp_content_dir) {
die("wp-contentディレクトリの指定が正しくありません" . PHP_EOL);
}
// uploads存在チェック
if (!file_exists($wp_content_dir . "/uploads")) {
die("wp-contentディレクトリ直下にuploadsディレクトリが存在しません" . PHP_EOL);
}
// DB接続確認
try {
new PDO('mysql:host=' . $host . ';dbname=' . $db, $user, $pass);
} catch (PDOException $e) {
die("MySQLに接続出来ません" . PHP_EOL);
}
// 引数でエクスポートディレクトリの指定がある場合はそこに出力する
if ($export_dir) { // 指定があった時はパスチェック
if (!file_exists($export_dir)) {
die("指定のエクスポートディレクトリが存在しません" . PHP_EOL);
}
} else {
// 引数でエクスポートディレクトリの指定がない場合は本スクリプトと同ディレクトリにする
$export_dir = __DIR__;
}
/* uploadsディレクトリをzip化する */
// zipコマンドは絶対パスでやるとそこまでのパスが入っちゃうのでそのディレクトリに移動する
// wp-loads.phpを読み込むとWP_CONTENT_DIRが定義されているのでそれを使う
echo_msg("> cd {$wp_content_dir}");
chdir($wp_content_dir);
// -r サブディレクトリも再帰的にzip化する
// -q 動作中のメッセージを表示しない
$zippath = "{$export_dir}/wp_data-{$db}-" . date("YmdHis") . ".zip"; // データディレクトリに生成するzipパス
exec_cmd("zip -rq {$zippath} ./uploads"); // wp-content直下のuploadsディレクトリをzipに突っ込む
if (!file_exists($zippath)) {
die("uploadsディレクトリをzip出来ません" . PHP_EOL);
}
/* mysqldumpで指定DBのデータを出力する */
echo_msg("> cd {$export_dir}");
chdir($export_dir); // uploads手前から移動
$sql_file = "wordpress_db.sql";
// --single-transaction サーバーからデータをダンプする前に BEGIN SQL ステートメントを発行(DBロックしない)
// --no-tablespaces CREATE LOGFILE GROUP ステートメントおよび CREATE TABLESPACE ステートメントを出力に書き出さない(これがないとWARNING出る)
exec_cmd("mysqldump -h {$host} -u {$user} -p{$pass} --single-transaction --no-tablespaces --default-character-set=utf8mb4 {$db} > {$sql_file}");
if (!file_exists($sql_file)) {
die("SQLファイルをダンプ出来ません" . PHP_EOL);
}
/* sqlファイルをzipに追加する */
exec_cmd("zip -q {$zippath} {$sql_file}");
/* sqlファイルはzipしたら不要なので消去 */
exec_cmd("rm {$sql_file}");
echo_msg("success : export {$zippath}");
// 最後に改行つけるだけのecho
function echo_msg($msg) {
echo $msg . PHP_EOL;
}
// コマンド実行関数
function exec_cmd($cmd) {
echo_msg("> {$cmd}");
system($cmd, $return); // exec()ではなくsystem()を使っているのは実行結果を出力してくれるから
return $return;
}
使い方
使い方は簡単です。
WordPressには必ずあるwp-contentへのパス・DB接続情報・エクスポート先をパラメータとして渡して実行するだけです。
以下のようなコマンドになります。
$ php /path/to/your/export_wp_data.php -w='/path/to/your/wp-content' -h='[db_host]' -u='[db_user]' -p='[db_pass]' -d='[db_name]' -e='/path/to/your/export'
uploads
ディレクトリと、このWordPressで使っているDBデータを内包したものをzipファイルにして生成します。
一応コマンドラインからしか実行出来ない記述を書いているのでサーバーに置いてもWeb実行出来なかったり、
zipファイル名に日付も入れてるのでzipファイルをダウンロードしにくいようになっています。
エクスポートしたzipファイルの中身は単純にuploadsディレクトリとwordpress_db.sqlというファイルの2つが存在するのみとなっています。
これがWordPressの運用データや
僕のブログでもこれで1.2GBくらいになってます。
そしてこのzipファイルをインポート先の環境に持ってきます。
uploadsにはたくさんの画像ファイルがありますが、それを1ファイルで持ってこれるのでいいですよね👍
WordPressデータをインポートするPHPスクリプト
次にWordPressデータをインポートするスクリプトです。
PHPスクリプト
<?php
/**
* import_wp_data.php
* export_wp_data.phpでWordPressの記事や写真のデータをインポートするPHPスクリプトです。
* このスクリプトは「Search-Replace-DB-master」を使います。これによりDB内のドメインデータが置換されます。
* https://interconnectit.com/search-and-replace-for-wordpress-databases/
*
* ■使い方
* 本スクリプトをwordpressディレクトリ直下に置くか、ドキュメントルート外に置いて引数でwp-load.phpのパスを指定して実行します。
*
* ■引数
* -z(必須) : export_wp_data.phpでエクスポートして、uploadsディレクトリに配置したzipのファイル名。
* -w(必須) : wp-contentディレクトリのパス。
* -h(必須) : MySQLのhostname
* -u(必須) : MySQLのusername
* -p(必須) : MySQLのpassword
* -d(必須) : MySQLのdatabase
* -s(オプション) : コピー元のWordPressドメイン。
* -r(オプション) : コピー先のWordPressドメイン。
* -b(オプション) : バックアップフラグ。フラグがある場合はインポート前にデータをエクスポートする(要export_wp_data.php)
*
* ■セキュリティについて
* 本スクリプトはCLIからしか実行出来ない最低限のセキュリティがありますが完璧ではありません。
* ドキュメントルート外に置いて引数指定で実行して、役目を終えたらいずれにファイルもすぐに消すとより安全です。
*/
if (php_sapi_name() != 'cli') {
die("only cli." . PHP_EOL);
}
echo_msg("start import_wp_data");
// まずはこのスクリプトの場所に移動
echo_msg("> cd " . __DIR__);
chdir(__DIR__);
/**
* パラメータの取得
*/
$options = getopt("z:h:u:p:d:w:s::r::b::");
// 必須パラメータ
$zip_path = (isset($options["z"])) ? $options["z"] : die("インポートzipのパス指定は必須です。" . PHP_EOL);
$wp_content_dir = (isset($options["w"])) ? $options["w"] : die("wp-contentディレクトリパスのパラメータは必須です" . PHP_EOL);
$host = (isset($options["h"])) ? $options["h"] : die("DB接続情報のhostは必須です。" . PHP_EOL);
$user = (isset($options["u"])) ? $options["u"] : die("DB接続情報のuserは必須です" . PHP_EOL);
$pass = (isset($options["p"])) ? $options["p"] : die("DB接続情報のpassは必須です" . PHP_EOL);
$db = (isset($options["d"])) ? $options["d"] : die("DB接続情報のdbは必須です" . PHP_EOL);
// オプションパラメータ
$source_str = (isset($options["s"])) ? $options["s"] : false;
$replace_str = (isset($options["r"])) ? $options["r"] : false;
$is_backup = (array_key_exists("b", $options)) ? true : false; // バックアップフラグはキーがあるかどうか
// wp-contentチェック
$wp_content_dir = realpath($wp_content_dir);
if (!$wp_content_dir) {
die("wp-contentディレクトリの指定が正しくありません" . PHP_EOL);
}
// zipファイルチェック
$zip_path = realpath($zip_path);
if (!file_exists($zip_path) || pathinfo($zip_path)["extension"] != "zip") {
die("インポートzipファイルが存在しないか、zipファイルではありません" . PHP_EOL);
}
// DB接続確認
try {
new PDO('mysql:host=' . $host . ';dbname=' . $db, $user, $pass); // 接続確認出来ない場合は例外となる
} catch (PDOException $e) {
if ( $e->getCode() == 1049 ){
die("データベース:{$db} が存在しません。データベースは予め作成してください。" . PHP_EOL);
}else {
die("MySQLに接続出来ません" . PHP_EOL);
}
}
/* バックアップ指定がある時はインポート前に現状のデータをバックアップする */
if ($is_backup) {
if (!file_exists(__DIR__ . "/export_wp_data.php")) {
die("バックアップオプションには同ディレクトリにexport_wp_data.phpが必要です" . PHP_EOL);
}
// インポート時のバックアップでは現在のディレクトリに置く。バックアップ先を指定するなら-eパラメータで可能
exec_cmd("php export_wp_data.php -w{$wp_content_dir} -h{$host} -u{$user} -p{$pass} -d{$db}");
}
// zipファイルが存在するディレクトリに移動する
echo_msg("> cd {$wp_content_dir}");
chdir($wp_content_dir);
/* 旧uploadsディレクトリの削除する */
$old_uploads_dir = "{$wp_content_dir}/uploads"; // 一応絶対パス
if (file_exists($old_uploads_dir)) { // 旧uploadsがある場合は削除する
exec_cmd("rm -rf {$old_uploads_dir}");
}
/* 新uploadsディレクトリをwp_content直下に解凍する */
exec_cmd("unzip -q {$zip_path}");
/* 新uploadsディレクトリはこの実行ユーザーで解凍されるのでアクセス権は変えておく(これは要検討) */
exec_cmd("chmod -R 777 uploads");
/* DBデータのインポート */
exec_cmd("mysql -u {$user} -h {$host} -p{$pass} {$db} < wordpress_db.sql");
/* 解凍したsqlファイルは削除する */
exec_cmd("rm wordpress_db.sql");
/* スクリプトの位置に戻ってSRDBがある場合のみDB内の置換処理をする */
echo_msg("> cd " . __DIR__);
chdir(__DIR__);
$srdb_path = __DIR__ . "/Search-Replace-DB/srdb.cli.php";
if (file_exists($srdb_path) && $source_str && $replace_str) {
echo_msg("replace database string.");
exec_cmd("php {$srdb_path} -h='{$host}' -u='{$user}' -p='{$pass}' -n='{$db}' -s='{$source_str}' -r='{$replace_str}'");
} else {
echo_msg("DB内の文字列置換は実行しません");
}
echo_msg("success : import {$zip_path}");
// 最後に改行つけるだけのecho
function echo_msg($msg) {
echo $msg . PHP_EOL;
}
// コマンド実行関数
function exec_cmd($cmd) {
echo_msg("> {$cmd}");
system($cmd, $return); // exec()ではなくsystem()を使っているのは実行結果を出力してくれるから
return $return;
}
使い方
こちらの使い方も簡単です。
先程エクスポートしたzipファイルパス・インポート先のwp-contentへのパス・DB接続情報をパラメータとして渡して実行するだけです。
以下のようなコマンド例になります。
$ php /path/to/your/import_wp_data.php -z='/path/to/your/wp_data-[db_name]-20210702190000.zip' -w='/path/to/your/wp-content' -h='[db_host]' -u='[db_user]' -p='[db_pass]' -d='[db_name]'
これにより、zipファイルの中身を取り出してuploadsディレクトリにwp-content直下に配置してDBデータを取り込みます。簡単ですね。
このコマンドで大事なのはあえてzipファイル名を必須パラメータとして、インポートするデータを明示的に指定している事です。
今から自分がインポートしようとしているデータを意識的に書くようにしています。
因みに旧データは消去してしまうのですが、この時-b
オプションで旧データをバックアップzipを作ることも出来ます。そしてその時-e
オプションでバックアップ先ディレクトリを指定出来ます。
PHPスクリプトの内容を見ればすぐにわかりますが、このバックアップに関してはexport_wp_data.phpを呼び出して再利用しているんですね。💪
ドメイン置換する方法
さて、本番環境のデータをそのままインポートしたままだとそのDBデータには本番環境ドメイン文字列が入ったレコードが多数あり、プレビュー環境やローカル環境でうまく動きません。
なのでDBデータ内の本番環境ドメイン文字列をその環境に合わせて置換することが必要なのですが、それを一括置換してくれるツールを紹介します。
『Search-Replace-DB』です。
WordPressのDBデータ内の一括置換ではわりと知る人ぞ知る有名なツールですね。
WordPressのDBデータ内では本番環境ドメイン文字列はシリアライズされたりしているので一般的なSQLコマンドでの置換というのはは難しいのですが、これを使えばシリアライズされたデータにも対応しているので安全にそのプレビュー環境・ローカル環境のドメインに置換することが出来ます。
全文英語となっていますがChromeでページ翻訳すれば大体何言っているかは理解出来る内容となっています。
このツールはダウンロードするのにリスク同意チェックとPayPal寄付が求められますが、まぁ同意はいいとして寄付は0円でも大丈夫です(すみません大変感謝はしています🙇♂️)
ダウンロードリンクはメールで送られてきます。
そしてダウンロード出来たらimport_wp_data.php
と同ディレクトリに設置すれば連携出来るようになります。
(※もちろんDB置換だけSearch-Replace-DB単体でも実行してもOKです。Search-Replace-DBはGUIからでも実行可能です。)
このように配置します。
Search-Replace-DBを連携する使い方
先程はzipファイル名を指定するだけでしたが、-s
と-r
で置換元と置換先の文字列を指定します。
僕のブログを例とします。
$ php /path/to/your/import_wp_data.php -z='/path/to/your/wp_data-[db_name]-20210702190000.zip' -w='/path/to/your/wp-content' -h='[db_host]' -u='[db_user]' -p='[db_pass]' -d='[db_name]' -s='kahoo.blog' -r='preview.kahoo.blog'
import_wp_data.php
と同ディレクトリにこのSearch-Replace-DB
ディレクトリを配置して、-s
と-r
でパラメータ指定した時だけDB内文字列置換も一緒に実行してくれるようになっています。
本番ではhttpsとなっていてコピー先でhttpの場合はする場合は、以下のようにhttpからの指定をすればよいでしょう。
$ php /path/to/your/import_wp_data.php -z='/path/to/your/wp_data-[db_name]-20210702190000.zip' -w='/path/to/your/wp-content' -h='[db_host]' -u='[db_user]' -p='[db_pass]' -d='[db_name]' -s='https://kahoo.blog' -r='http://preview.kahoo.blog'
これでphpコマンドライン実行をすると、WordPress本番環境データから他のWordPress環境データにワンコマンドでコピーして、すぐにその環境のドメインでアクセス出来るというわけです。
Tips. 本番以外は色を変えたり特定プラグインを停止する方法
さて、本番環境以外にプレビュー環境やローカル環境を作る時、本番環境以外では動かしたくないプラグインってありますよね。
一例を挙げるとアクセス解析しているjetpack
とか、自動バックアップしているupdraftplus
とかですね。
そしてそして本番環境以外はメインカラーや管理画面カラー、さらにはfaviconをも変えて本番とそれ以外であることが一発でわかるようにしたいところです。
そういう環境毎の設定変更もコード化してしまうと楽です。
それは上記のexport_wp_data.php
とimport_wp_data.php
を呼び出すスクリプトを書いて、そこに環境毎の設定変更するコードを書いてしまうことです。
それをここでは紹介します。
エクスポートを実行する関数
例えば僕の場合ですとエクスポートは以下のように関数として組み込んでいつでも実行出来るようにしています。
function export() {
$php = "/path/to/your/export_wp_data.php";
$w = WP_DIR . "/wp-content";
$e = STORAGE_DIR . "/migration";
if (!file_exists($e)) {
mkdir($e, 0777, true);
}
$cmd = "php {$php} -w='{$w}' -h='" . DB_HOST . "' -u='" . DB_USER . "' -p='" . DB_PASSWORD . "' -d='" . DB_NAME . "' -e='{$e}'";
system($cmd);
}
DB定義値をうまく活用しています。
インポートと環境設定変更を実行する関数
インポートする処理も関数化してzipファイルだけ引数で渡すようにしています。
function import($zip_file) {
// 本番環境へのインポートは基本不可とする
if (ENVIRONMENT == "master") {
die("本番にはインポート出来ません" . PHP_EOL);
}
$php = "/path/to/your/import_wp_data.php";
$z = STORAGE_DIR . "/migration/{$zip_file}";
$w = WP_DIR . "/wp-content";
$s = "kahoo.blog"; // 本番からこの環境のホスト名に置換する
$r = "preview.kahoo.blog";
$cmd = "php {$php} -z='{$z}' -w='{$w}'" . " -h='" . DB_HOST . "' -u='" . DB_USER . "' -p='" . DB_PASSWORD . "' -d='" . DB_NAME . "' -s='{$s}' -r='{$r}'";
system($cmd);
/* 本番データを適用後、環境ごとの設定変更 */
// WP関数を使いたい為まずwp-load.phpを読み込む
define('WP_DEBUG', false); // エクスポート時にちょっとしたWPデバッグ情報は不要なのでfalseにする
require_once WP_DIR . "/wp-load.php";
// 管理画面の配色変更
wp_update_user([
'ID' => 1, // メインユーザーなら1だが、それ以外の設定検討する必要がある
'admin_color' => ADMIN_COLOR
]);
// サイトアイコン(favicon)の変更(予め本番で画像をアップロードしている。)
update_option("site_icon", SITE_ICON_ID);
// 本番以外不必要なプラグインの無効化
// 本当はwp-cliを使って wp plugin deactivate [プラグイン名] --allow-root というコマンドで無効化したいが
// エラーをはくプラグインがいるので困ったものだ。でもこのwp_optionの値を変更するでも良さそう。
$plugins = get_option('active_plugins');
$deactive_plugins = [ // 無効化するプラグイン名の列挙
"jetpack",
"updraftplus",
];
foreach ($plugins as $idx => $plugin) {
$plugin_dirname = explode("/", $plugin)[0]; // 最初のプラグインのディレクトリ名だけに合わせる
if (in_array($plugin_dirname, $deactive_plugins)) {
unset($plugins[$idx]); // 発見したら削除
}
}
$plugins = array_values($plugins); // 配列の添え字が崩れたので直す
update_option("active_plugins", $plugins); // 更新(WP関数の中でシリアライズされている)
// メインカラーの変更
$theme_setting = get_option('theme_mods_sango-theme-child');
if (isset($theme_setting["header_bc"])) {
$theme_setting["header_bc"] = ACCENT_COLOR;
}
if (isset($theme_setting["main_color"])) {
$theme_setting["main_color"] = ACCENT_COLOR;
}
if (isset($theme_setting["wid_title_bc"])) {
$theme_setting["wid_title_bc"] = ACCENT_COLOR;
}
update_option("theme_mods_sango-theme-child", $theme_setting); // 更新(WP関数の中でシリアライズされている)
}
ご覧のようにimport_wp_data.php
を実行後、wp-load.php
を読み込んでWordPressの用意された関数を使って諸々変更していくのです。
WordPress管理画面の配色変更・favicon変更・特定プラグインの無効化・メインカラーの変更 等ですね。
これらをコード化することで本当に1回のコマンドで全て整うというわけなのです。
僕の本番サイトは以下のようになっていますが、
1コマンドで以下のようなわかりやすいプレビュー環境が出来上がります(シャキーン)
faviconとメインカラーが変わっています。フロント表示時の管理画面バーの色は他に変える方法が他にあるみたいです。
そして管理画面です。
管理画面も配色が変わるので今どの環境を見ているのかが一目でわかりやすいです。
因みにjetpack
やupdraftplus
等の特定プラグインもバッチリ無効化出来ています。
ここには書いてないですがGoogle AnalyticsのID変更なども入れてもいいかもですね。
これで本番環境からのデータコピーがめちゃくちゃ楽になりました👌
Tips. 本番環境の移行にも使う方法
上記までは本番環境データを他環境データにコピーする方法の紹介でしたが、もちろん本番環境のサーバー移行にも使えるのでその手順を紹介します。
- 旧サーバーから新サーバーにファイルのコピー
現状の本番環境のWordPressのファイル・ディレクトリをまるっと新サーバーにコピーします。 - 新サーバーでDB接続情報を変更する
wp-config.php
には旧サーバーのDB接続情報となっているのでそれを新サーバーのDB接続情報に変更します。 - 旧サーバーでエクスポートを実行
export_wp_data.php
を使ってzipファイルをエクスポートします。
1.でuploadsディクレトリもコピーしちゃってますが、まぁ下手に除外するよりは良いでしょう。 - 新サーバーでインポートを実行
import_wp_data_direct.php
を使ってzipファイルをインポートします。 - ドメインの向き先を変更
お名前.com等のDNSサービスの管理画面にログインして、本番ドメインの向き先を旧サーバーから新サーバーに変更します。
基本の流れはこれでOKです👌
まとめ
いかがでしたでしょうか。これを使えばWordPressの環境コピーはかなり楽になりますね💪
ソースコードはもちろん改変してOKなのでどうぞご自由にお使いください。
簡単なコードなので例えばpluginsディレクトリもzipに含めたいという程度ならちょっとPHPを知っている人なら簡単に改変出来るかと思います。
このスクリプトを使っていつでもWordPressの本番環境のデータを他環境に同期出来るようにしておけば、WordPressサイトの開発スピードを加速させることが出来ます。
現場からは以上です!