既存のMySQLデータベースをAmazonRDSにインポートするにはどうすればよいですか?
9 に答える
このページは、 mysqldumpを使用してRDSインスタンスにパイプする方法を説明しているAWSドキュメントで見つけました。
サンプルコードは次のとおりです(コマンドライン/シェル/ sshで使用):
mysqldump acme | mysql --host=hostname --user=username --password acme
acme
移行するデータベースはどこにあり、 hostname
/username
はRDSインスタンスからのデータベースです。
通常のmysqlサーバーであるかのようにRDSに接続できます。このフォーラムの投稿に従って、EC2IPをセキュリティグループに追加してください。
ローカルのmysqldumpのパスワードを含める必要があったため、コマンドは次のようになりました。
mysqldump --password=local_mysql_pass acme | mysql --host=hostname --user=username --password acme
FWIW、データベースの移動が完了しました。このリファレンスは、ユーザーの作成や権限の付与などのmysqlコマンドに使用しました。
お役に立てれば!
データをインポートするには、次の 2 つの方法があります。
mysqldump
: データ サイズが 1GB 未満の場合は、mysqldump コマンドを直接使用してデータを RDS にインポートできます。mysqlimport
: データ サイズが 1GB を超える場合、またはその他の形式の場合は、データをフラット ファイルに圧縮し、sqlimport コマンドを使用してデータをアップロードできます。
私はSqlYogツールの大ファンです。ソース データベースとターゲット データベースに接続し、スキーマやデータを同期できます。SQLWaveも使用しましたが、 SqlYogに切り替えました。切り替えてからかなり時間が経ちましたが、なぜ切り替えたのか正確には思い出せません。とにかく、それは私の 2 セントです。MySQL 用の Windows GUI ツールに関する私の提案に反対する人もいるでしょう。私は実際に SqlYog 製品がとても気に入っているので、Wine から実行しています (Ubuntu の Wine から問題なく動作します)。このブログが参考になるかもしれません。
GoSquared Engineering の投稿の簡単な要約:
構成 + 起動
- インスタンスの負荷が最も低くなるメンテナンス ウィンドウとバックアップ ウィンドウを選択します
- マルチ AZ を選択するかどうか (自動フェイルオーバーとメンテナンスに強くお勧めします)
- RDS インスタンスを起動します
- アプリなどが新しいインスタンスにアクセスできるように、セキュリティ グループを構成します。
データ移行+準備
- まだバイナリログを有効にしていない場合は有効にします
- 古いインスタンスで実行
mysqldump --single-transaction --master-data=2 -C -q dbname -u username -p > backup.sql
して、現在のデータのダンプを取得します - 実行
mysql -u username -p -h RDS_endpoint DB_name < backup.sql
してデータを RDS インスタンスにインポートします (DB のサイズによっては時間がかかる場合があります)。 - それまでの間、現在の実稼働インスタンスは引き続きクエリを処理しています - ここで
master-data=2
バイナリログの出番です。 - backup.sql ファイルの先頭に、次のような行があります。
CHANGE MASTER TO MASTER_LOG_FILE=’mysql-bin.000003′, MASTER_LOG_POS=350789121;
backup.sql
SQL ファイルとして差分を取得するmysqlbinlog /var/log/mysql/mysql-bin.000003 --start-position=350789121 --base64-output=NEVER > output.sql
- RDS インスタンスでこれらのクエリを実行して更新します
cat output.sql | mysql -h RDS_endpoint -u username -p DB_name
end_log_pos
最新のファイルの末尾を検索して、新しいログの位置を取得しoutput.sql
ます。- 最後からの差分を取得し
output.sql
(手順 6 と同様)、手順 7 + 8 を繰り返します。
実際の移住
- 新しい RDS インスタンスを使用してすべてのアプリを迅速にデプロイする準備を整える
end_log_pos
から最新のものを入手するoutput.sql
- 古いインスタンスで実行
FLUSH TABLES WITH READ LOCK;
して、すべての書き込みを停止します - 新しい RDS インスタンスでアプリのデプロイを開始する
- 上記の手順 6 ~ 8 を実行して、古いサーバーへの最後のクエリで RDS インスタンスを更新します。
結論
この方法を使用すると、わずかな時間 (アプリのデプロイにかかる時間 + MySQL インスタンスが処理する書き込みの数に応じて、おそらく 1 ~ 2 分) で古いサーバーからの書き込みが拒否されますが、読み取りのダウンタイムなしで、一貫した移行が行われます。
私たち (GoSquared) が最小限のダウンタイム (エラーのデバッグを含む) で RDS に移行した方法を説明する完全かつ詳細な投稿は、https://engineering.gosquared.com/migrating-mysql-to-amazon-rds で入手できます。
ターミナルを使用している場合、これは私にとってはうまくいきました:
mysqldump -u local_username -plocal_password local_db_name | mysql -h myRDS-at-amazon.rds.amazonaws.com -u rds-username -prds_password_xxxxx remote_db_name
次に、MYSQL WorkBench (無料ダウンロード) を使用して動作していることを確認しました。これは、送信を押した後にコマンド ラインが静的だったためです。出力を確認するために最後に -v を付けた可能性があります。
注: -p の後にスペースはありません
Mysql の AWS RDS 顧客データ インポート ガイドは、http://aws.amazon.com/articles/2933 から入手できます。
- ロードするデータを含むフラット ファイルを作成する
- ターゲット DB インスタンスにアクセスしているすべてのアプリケーションを停止します
- DB スナップショットを作成する
- Amazon RDS 自動バックアップを無効にする
- mysqlimport を使用してデータをロードする
- 自動バックアップを再度有効にする