HerokuからAWSへ移行する(DBエクスポート・インポート)
HerokuからAWSへ移行する(DBエクスポート・インポート):
Herokuで運用していたアプリケーションをAWSへ移行する。
今回はDB関連の作業を対象に備忘として残す。
MySQL5.7
Heroku JawsDB
RDB
MacOS
一応説明。
基本形で一発でいければ楽なのだけど、データが多いと以下が返却される。
その場合は重量級テーブルとそれ以外のエクスポートを分ける必要がある。
重量級については、一発でエクスポートできない場合は
ちなみに
RDSはインターネットからは繋げない(設定にした方が良い)のでEC2を踏み台に接続する。
そのため事前にEC2にDumpファイルをコピーしておく。参考
やりたいこと
Herokuで運用していたアプリケーションをAWSへ移行する。今回はDB関連の作業を対象に備忘として残す。
環境
MySQL5.7Heroku 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
コメント
コメントを投稿