仕事で Amazon EC2 使うことが増えてきたこともあって、このサイトのサーバも Amazon EC2 のマイクロインスタンスに移行しました。
移行作業自体は、簡単。
- 新サーバに Nginx, PHP, MySQL をインストール
- 現行サーバから rsync で WordPress フォルダの内容を全て新サーバにコピー
- 現行サーバの MySQL でテーブルをロックしてから /var/lib/mysql/ 以下を全部 tar で固めて、新サーバにコピー
- /etc/my.cnf, /etc/php.ini, /etc/nginx/ 等の設定ファイルをコピー
- ローカルPCの hosts 変更して確認取れたら DNS 変更
の5ステップです。
以下、メモがてら作業ログを書いておきます。
VPS – VPS 間での WordPress のお引越しの参考になれば幸いです。
新サーバに Nginx, PHP, MySQL をインストール
これは、今までも当ブログで何度か書いてますね。
- VPS 借りたら、せめてこれくらいはやっとけというセキュリティ設定
- さくらVPSに lighttpd + PHP 5.3 + MySQL 5.1 をインストール
- Percona MySQL をさくらのVPSで使う
- nginx 1.0.0 が出てます
- Nginx に cache purge モジュールを追加する
今回は、素の MySQL ではなく Percona MySQL を使ってみました。
現行サーバから rsync で WordPress フォルダの内容を全て新サーバにコピー
rsync を使えば、WordPress のソースを一括でコピーするのは簡単です。
まずは、以下を参考にして新サーバに ~/.ssh/config を用意しておきます。
ssh 接続を簡単にする ~/.ssh/config
そんで rsync で WordPress の入ってるフォルダごとファイル同期。
WordPress は /var/www/vhosts/ って所に入れてるんで、新サーバで以下のようにして同期します。
$ rsync -avz --delete -e ssh oldserver:/var/www/vhosts/ /var/www/vhosts/
現行サーバの MySQL でテーブルをロックしてから /var/lib/mysql/ 以下を全部 tar で固めて、新サーバにコピー
まずは、現行サーバでの作業。
/var/lib/mysql/ 以下をコピーするに当たって、作業中に DB に変更が加えられないようにロックします。
$ mysql -u root -p Enter password: : mysql> FLUSH TABLES WITH READ LOCK; Query OK, 0 rows affected (0.05 sec) mysql> quit Bye
/var/lib/mysql/ 以下を tar で固めます。
$ cd /var/lib/mysql/ $ sudo tar cpfz /tmp/mysql-snapshot.tar.gz ./ tar: ./mysql.sock: ソケットは無視します
テーブルをアンロックしておきます。
$ mysql -u root -p Enter password: : mysql> UNLOCK TABLES; Query OK, 0 rows affected (0.00 sec) mysql> quit Bye
次に新サーバでの作業。
scp で /tmp/mysql-snapshot.tar.gz を取ってきます。
$ scp oldserver:/tmp/mysql-snapshot.tar.gz /tmp/ mysql-snapshot.tar.gz 100% 19MB 1.6MB/s 00:12
MySQL が動いているなら停止してから、mysql-snapshot.tar.gz を /var/lib/mysql/ に展開。
バイナリログやエラーログは、必要ないので削除します。
$ sudo /sbin/service mysqld stop mysqld を停止中: [ OK ] $ cd /var/lib/mysql/ $ sudo rm -fr * $ sudo tar zxvf /tmp/mysql-snapshot.tar.gz $ sudo rm -f mysqld-bin.* $ rm /tmp/mysql-snapshot.tar.gz
MySQL を起動後、アンロックします。
$ sudo /sbin/service mysqld start mysqld を起動中: [ OK ] $ mysql -u root -p Enter password: : mysql> UNLOCK TABLES; Query OK, 0 rows affected (0.00 sec) mysql> quit Bye
これで MySQL のデータ移行は終了。
一応 mysql コマンドとか、phpMyAdmin とかで中身を確認しておいてください。
/etc/my.cnf, /etc/php.ini, /etc/nginx/ 等の設定ファイルをコピー
scp とか rsync とか好きな方法で、現行サーバからコピーしてくれば良いよ。
設定ファイルコピー後に設定を反映させるために mysqld とか nginx とか php-fpm とか httpd とか、再起動するのを忘れずに。
ローカルPCの hosts 変更して確認取れたら DNS 変更
Mac の hosts は /private/etc/hosts にあるので、ターミナルで
$ sudo vi /private/etc/hosts
via. Mac で hosts を変更する方法 – 頭ん中
linux なら /etc/hosts 。
Windows XP なら c:\windows\system32\drivers\etc\hosts 。Vista と 7 は、知らん。
例えば、新サーバの IP アドレスが 10.1.2.30 で、サイトが blog.example.com なら、以下を追加しましょう。
10.1.2.30 blog.example.com
変更できたらブラウザで動作確認しましょう。
まとめ
別に Amazon EC2 に限った話ではないですね。