What's this?
サーバのAWS移設で、DBのデータをRDSに持っていった際の備忘です。
気をつけるべきポイントは以下の通りです。
- RDSではrootを使用できない
- 多くの場合直接RDSに接続でいないため、対向サーバ(今回の場合EC2)を経由させる必要がある
注意
取得したダンプファイルはmy_databases_yyyyMMdd.sqlで表しています。
Mysqlは5.7系です
手順
①オンプレの方のフルダンプを取得する
> mysqldump --password=■■■ --skip-add-drop-table --single-transaction --databases 【ダンプ取得対象のDB】 > my_databases_yyyyMMdd.sql
新規の(まっさらな)RDSに反映させる前提なので--skip-add-drop-table
をつけてDROP TABLEステートメントを省略しています。
またデータの整合性を保つために--single-transaction
を付与しております。
②sqlデータを置き替える
RDSではrootは取れないので、代わりにadminに修正します。
> sed -i -e 's/DEFINER=`root`@`localhost`/DEFINER=`admin`@`%`/g' my_databases_yyyyMMdd.sql
③sqlデータをzip化する
> zip -e --password=【パスワード】 my_databases_yyyyMMdd.zip my_databases_yyyyMMdd.sql
④zipデータをローカルに取得する
WinSCPなりなんだりでよしなに取得してください
⑤データをEC2サーバに上げる
今回の場合、ローカルからS3にアップし、EC2からS3にアップしたファイルを引き上げてます
> aws s3 cp s3://tmp/my_databases_yyyyMMdd.zip .
⑥zipデータを解凍する
# unzip -P 【パスワード】 my_databases_yyyyMMdd.zip
⑦RDSにデータを突っ込む
# mysql -h 【RDSエンドポイント】 -u admin -p < my_databases_yyyyMMdd.sql