Posted at

HerokuからAWSへ移行する(DBエクスポート・インポート)


 やりたいこと

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オプションでさらに分割する。


重量級(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