WordPressのテンプレートを自作していると、本番機となるサーバではなく、PCのローカルでいろいろといじって見栄えを確認したくなることが多々ある。
特に大幅なリニューアルをするとなると、本番機でテンプレートをいじるなんて有り得ないし、ちょっと機能追加しようとfunction.phpをいじって、構文ミスした日にはアクセスできなくなっちゃうことも。
記事を同期する目的
テンプレートのデザインを変えたり、微調整したい時、できれば直近で書いた記事を表示サンプルとして使いたい。ローカルに残っている(日付的に)古い記事だと、無意識的に変化している自分の執筆の癖とか、新たに導入したタグなどが使われていなかったりする。
あとは、なるべくなら本番に近い状態のデータで検証したいというプロ意識(笑)
環境の比較
サーバ
- kt-kiyoshi.com/wp
- Apache/2.2.15 (Unix)
- mysql Ver 14.14 Distrib 5.5.27
ローカル
- kt-kiyoshi.com/wp
- Apache/2.4.9 (Unix)
- mysql Ver 14.14 Distrib 5.6.22
と書いておいてなんだけど、特に関係はないと思われる。但し、前提として、サーバ上のDB名とローカルで使うDB名は一緒。
手順
- サーバからDBをダンプ
- サーバ上でホスト名を置き換える
- FTPとかでローカルに落とす
- ローカルのDBの中身を削除(DBは空で残す)
- ダンプをリストア
- サーバ上の画像フォルダを落としてローカルに入れる
- アクセスして表示確認
サーバからDBをダンプする
コマンドで一発なんだけど、今回は僕が使ってるバックアップシェルの一部を貼る。
#!/bin/sh
# Read setting file
. /home/XXXXX/scripts/YYYYY
FILENAME=db_backup_`date +%Y%m%d`.sql
# Back up
mysqldump -u${USER} -p${PASS} _kiyoshi_wp > /home/XXXXX/backup/${FILENAME}
# Delete old one
rm /home/XXXXX/backup/db_backup_`date -d '7 days ago' +%Y%m%d`.sql
ユーザ名とかが書かれた設定ファイルを読み込んで、mysqldumpを実行するだけ。結果は日付入りのSQLファイルになる。
サーバ上でホスト名を置き換える
これがかなり重要な作業。これをしないで取り込むと動かないし、その後に手で修正するのは骨が折れる。
バックアップファイル(例:db_backup_20150117.sql)をローカルに落としてから置き換えることもできるのだけど、僕の場合、8MB近くあるのでテキストファイルとして開くとかなり重い。。
というわけで、これもサーバ上で済ませる。sedコマンドを使ってこんな感じ。-iを付ければ上書きにもなるみたい。一瞬です。
sed -e 's/https:\/\/kt-kiyoshi.com\/wp/http:\/\/localhost\/wp\//g' db_backup_20150117.sql > db_backup_20150117_local.sql
FTPとかでローカルに落とす
もちろん、ローカル用に書き換えた「db_backup_20150117_local.sql」のほう。
ローカルのDBの中身を削除(DBは空で残す)
方法は何でもいいんだけど、とりあえずローカルのDBを空にできればよい。一旦DB消して、同じDB名で作りなおしてもいいし、中身だけ消すのでもいいと思う。
書いていて思ったのだけど、ダンプのSQLの中身見たら、下記のようになってるから消さなくてもいけるのかな。
DROP TABLE IF EXISTS `wp_commentmeta`;
CREATE TABLE `wp_commentmeta` (
ダンプをリストア
空になったDBに、サーバのダンプ(ローカル書き換え済み)をリストアする。
mysql -u [username] -p [DB name] < db_backup_20150117_local.sql
サーバ上の画像フォルダを落としてローカルに入れる
これはそのままなので省略します。ちなみにこれをやらないと以下のようになります。
アクセスして表示確認
うまくいっていればサーバ上と瓜二つのローカルブログが見られるはずです。ちなみにここで何らかのエラーが出る場合はデータに異常がある可能性が高いです。パーマリンクの設定とかが怪しいかなと。
ローカルにテスト環境を構築して快適な自作テンプレートライフを!