さくらVPS の契約を追加して rsync でまるっと移行してみた

このエントリーをはてなブックマークに追加

2013年の5月にさくらVPSの HDD 2G のプランを借りて、勉強も兼ねていろいろと活用していましたが、バックアップどうしようかなとクラウドのほうがいいかなとかごちゃごちゃ1年以上考えていたのですが、最初のVPS契約から1年半を得て、もう一つプランを契約することにしました。

VPS(仮想専用サーバ)のさくらインターネット

正直、なぜ増契約!?とも思わないでもないですが、自分の使い方だとクラウドだと金額に見合うスペックが思い浮かばず、普通のレンサバだといろいろやりたいことが足りなく・・・程よかったのがVPSというオチだったので、今回もVPSを借りることに。

VPS → VPS の移行

今回借りたのは SSD 2G プラン。

CloudCore VPS にしようか SSD にしようか、はたまた DigitalOcian にするか、それとも Amazon EC2 するか、ものすごく迷った末に、最終的には今回もさくらVPSに。

新しく借りたところにいろいろと設定を再度しようとも思ったのですが、忘れていることなどなどもあったりや、移行に手間をかけるのも面倒だと思い、まるっと移行できる方法を考えることに。

とりあえず検索したところ、以下のような記事を見つける。

blog.rettuce.com » さくらVPSを512→1Gのプランに移行してみた。

こ、これだけで行けるのか!?とも不安になったのですが、失敗したらしたでやり直せばいいやと考え、 rsync の方法を使ってやることに。

SSH の root ログインの壁

借りた直後に、SSH の root ログインだけはできないようにしておこうと、先に SSH のログイン周りは変更をして PermitRootLogin no で設定してしまっていました。

そのため、単純にrsync しようとしただけだと、権限の問題で必要なものがコピーされない自体に。

何かあるかなーと探したところ、以下の記事を見つける。

あくまでも PermitRootLogin は no で - JULYの日記

--rsync-path のオプションと sudo を組み合わせたらなんとか・・・

ともう少し検索すると

パスワードありsudoでrsyncするシェルスクリプト - Qiita

このコメント欄で、特定のコマンドのみ NOPASSWD で root で繋げそう!

ってことで、以下のように設定。

%wheel  ALL=(ALL)   ALL, (root) NOPASSWD: /usr/bin/rsync

設定後に先に確認をしていた以下の rsync コマンドで旧VPSから新VPSにアップロード。

rsync -rtlzvogpHAX --exclude /boot/ --exclude /dev/ --exclude /proc/ --exclude /sys/ --exclude /var/run/ --exclude /var/lock/ --exclude ifcfg* --exclude ssh_host_* --exclude fstab --block-size=4096 -e ssh / 新鯖IP(***.***.***.***):/

30Gくらいのアップロードだったのですが、1時間程くらいで終了。

新VPS側の確認

とりあえず再起動をさせて、中身のチェック。旧VPSのIPで設定していた箇所を新VPSのIPに変更(自分は主にnginxまわりで直接指定した箇所が数箇所あったため変更)

httpdnginx は問題なく起動(nginxに集約したかったのですが、そうもいかないのが数個あったため、そこはまだそのまま Apache のままに)

WordPress が動いているかなーと見ようとしたところ、データベースの接続エラーが。そういえば参考にしたところでも、mysqlが動いてないって書いてあったので、なんのエラーかなと思いつつも、起動を試みる。

MySQL が起動しない

$ service mysqld start ってやってみるとなんかエラーで起動しない。とりあえずこういう時は log を見るのがいいらしいので、 log をチェック。

どこをみていいのかわからなかったりしたのですが、 ERROR って書いてあったので、そこを読んでみる。

[ERROR] /usr/libexec/mysqld: Can't create/write to file '/var/run/mysqld/mysqld.pid' (Errcode: 2)
[ERROR] Can't start server: can't create PID file: No such file or directory

/var/run/mysqld/mysqld.pid ってのをつくろうとしたけど、そんなディレクトリーないよ!ってことらしいので、調べたら、なーいー。

ってそりゃさっきアップロードするときに --exclude /var/run/ って入れていたからそりゃないですよね。

ってことで、ディレクトリを用意

$ mkdir /var/run/mysqld

再度 MySQL を起動! $ service mysqld start ってやったけどまたしてもエラー。今度はなんだろう?

[ERROR] /usr/libexec/mysqld: Can't create/write to file '/var/run/mysqld/mysqld.pid' (Errcode: 13)
[ERROR] Can't start server: can't create PID file: Permission denied

パーミッション!!!忘れていた!ということで、以下の様にして設定

$ chmod 755 /var/run/mysqld/
$ chown -R mysql:mysql /var/run/mysqld/

はたして755がいいかはわからないですが、コピー元のをチェックしたところそうなっていたので、今回もそれで。

再度起動!ってやったら無事に MySQL も起動してくれましたとさ。

DNS の設定を新しい VPS の IP に

動きそうってのがわかったので、 DNS の設定を新VPSに変更。

数時間後に無事にこのブログが表示されたので以降完了。他のサービスも動いたのを確認!

※追記(2014/11/07 00:00)

うまく全部コピーできたと思ったのですが、うまくコピーできていないのもあったので、改めてエントリーを追加していあります。そちらも見てください。

rsync でまるっと移行してみたと思ったらまるっと移行できていなかったので対応を加えた(特定のコマンドだけtty無しのsudoを許可する方法)