Amazon EC2 マイクロインスタンスに移行

仕事で 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 をインストール

これは、今までも当ブログで何度か書いてますね。

今回は、素の 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 に限った話ではないですね。

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください