この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
よく訓練されたアップル信者、都元です。
MySQLのデータベースのコピーとか、お引っ越しをしたい時、ありますよね。今AWS上で新規にMySQLを使いたいのであれば迷い無くRDSを選ぶと思いますが、まだRDSのmicroインスタンスが無かった頃に、microのEC2上に生でMySQLを建てた…とか、まぁ歴史上の理由は様々でしょう。
まぁ「無停止で」とか言い出すと色々大変ですが、そうでなければ(計画停止をすれば)MySQLの引っ越しって実はかなり簡単です。
まずは事前に出力先のMySQLの方はCREATE DATABASEを済ませておきます。CREATE DATABASE済みの場合は不要です。
$ mysqladmin \
-u'cmsampleuser' \
-p'cmsamplepass' \
-h'dest.hostname.example.com' \
--default-character-set=utf8
create dest_database
あとは、アプリを止めて、mysqldumpとmysqlをパイプで繋いでドーンと一発です。
$ mysqldump \
--single-transaction \
--no-autocommit \
-u'cmsampleuser' \
-p'cmsamplepass' \
-h'source.hostname.example.com' \
source_database \
| mysql \
-u'cmsampleuser' \
-p'cmsamplepass' \
-h'dest.hostname.example.com' \
dest_database
場合によっては、パイプで直結ではなく、ファイルを経由させれば、バックアップにもなりますね。
$ mysqldump \
--single-transaction \
--no-autocommit \
-u'cmsampleuser' \
-p'cmsamplepass' \
-h'source.hostname.example.com' \
source_database \
| gzip >cmsampledb-dump.sql.gz
$ gunzip -c cmsampledb-dump.sql.gz | mysql \
-u'cmsampleuser' \
-p'cmsamplepass' \
-h'dest.hostname.example.com' \
dest_database
終わったら、アプリの接続先を新DBに切り替えて起動するだけですね。
その他、お引っ越し用途だけでなく、ローカルの開発用DBのコピーを作る場合など、かなり応用は効くと思います。