やりたいこと
Herokuで運用していたアプリケーションをAWSへ移行する。
今回はDB関連の作業を対象に備忘として残す。
環境
MySQL5.7
Heroku JawsDB
RDB
MacOS
JawsDBからエクスポート
mysqldump --set-gtid-purged=OFF -uユーザ -h ホスト -p データベース > dump.sql
一応説明。
--set-gtid-purged=OFF
はgtid関連のWarning抑止。
--single-transaction
は、バックアップなどではよく使われるけど、今回は移行なので未使用。(業務的にデータ更新を止めれたので。)
基本形で一発でいければ楽なのだけど、データが多いと以下が返却される。
mysqldump: Error 1317: Query execution was interrupted when dumping table xxx at row: xxx
その場合は重量級テーブルとそれ以外のエクスポートを分ける必要がある。
mysqldump -t --set-gtid-purged=OFF -uユーザ -h ホスト -p データベース --ignore-table=データベース.除外したいテーブル > dump_other_tables.sql
--ignore-table
で重量級テーブルを除外する。重量級が複数ある場合は--ignore-table
ごと複数書く。
重量級については、一発でエクスポートできない場合はwhere
オプションでさらに分割する。
mysqldump -t --set-gtid-purged=OFF -uユーザ -h ホスト -p データベース 対象テーブル --where "id < 100000" > dump_XXX.sql
ちなみに-t
はcreate table含めない。なので、移行先でいちいちDDLを叩きたくない場合は-d
で定義だけエクスポートも必要。
EC2にDumpファイルコピー
RDSはインターネットからは繋げない(設定にした方が良い)のでEC2を踏み台に接続する。
そのため事前にEC2にDumpファイルをコピーしておく。参考
/Users/XXX/.ssh
scp -i aws-eb コピーしたいファイル ec2-user@IPアドレス:/home/ec2-user dump_XXX.sql
EC2にsshでログインしてインポート
cd プロジェクトディレクトリ
eb ssh
[ec2-user@xxx ~]$ mysql -uユーザ -h エンドポイント -p データベース < dump_XXX.sql