VPSサーバーでWebサイト公開 備忘録 ~Linux、MySQLからAJAXまで

WordPressの記事をサイト間でコピーする方法

開発中のテーマで記事の表示確認をするために、他のサイトで公開中の記事をまとめてコピーし、開発中サイトに移動しました。その手順を備忘としてまとめました。

ここでは、データベース名、データベースユーザー名を下記としています。
 
・コピー元
データベース名:wpmydb
データベースユーザー名:wpmydbuser
 
・コピー先
データベース名:wpnewdb
データベースユーザー名:wpnewdbuser
 

1)コピー元サイトがあるサーバーでデータベースをバックアップ


 
mysqldump --add-drop-table -h localhost -u wpmydbuser -p wpmydb | bzip2 -c > wp_mydb.bz2

 

2)コピー先サイトでデータベースリストア


 
$ bzip2 -d wp_mydb.bz2
$ mysql -h localhost -u wpnewdbuser -p wpnewdb 

 

3)データベース内に記録されているコピー元サイトのURLをコピー先URLに置換


 
下記サイトのツールを使ってデータベース内に記録されているサイトURLを置換します。
 
DATABASE SEARCH AND REPLACE SCRIPT IN PHP
 
手順の概要は下記の通りです。
 
①上記サイトからツール(zipファイル)を入手
 
②zipファイルを解凍し、他のユーザに不正に実行されないようにするため、フォルダ名(デフォルトはsecret-name-please)を変更
 
③上記フォルダををWordPressのルートディレクトリにアップロード
 
④ブラウザから上記スクリプトにアクセス
 
⑤ブラウザの画面の指示に従ってURLを置換
 
⑥作業が終了したら不正に実行されないようにフォルダを削除
 

4)wp_optionsテーブルの'siteurl'、'home'に設定されているサイトURLをコピー先のURLに変更


 
3)の専用スクリプトを実行するだけだとコピー先サイトの管理画面にログインするとコピー元サイトへリダイレクトされてしまいました。
 
手動で下記のようにwp_optionsテーブルの'siteurl'、'home'に設定されているサイトURLを更新しました。
 
ここでは、コピー先サイトのサイトURLをhttp://new.example.com/wpnewと仮定しています。
 
update wp_options set option_value = 'http://new.example.com/wpnew' where option_name = 'siteurl';
update wp_options set option_value = 'http://new.example.com/wpnew' where option_name = 'home';
 

5)コピー先サイトの管理画面にログイン


 
コピー元サイトの記事が正しくコピーされているか確認します。
 
検索エンジンがサイトをインデックスしないように下記設定をします。
管理画面「設定」→「表示設定」→「検索エンジンでの表示」
"検索エンジンがサイトをインデックスしないようにする"にチェックを入れて、「変更を保存」
モバイルバージョンを終了