既存のデータベースをAmazon RDSに移行します
-
23-10-2019 - |
質問
既存のMySQLデータベースをAmazon RDSにインポートするにはどうすればよいですか?
解決
データをインポートするには2つの方法があります。
mysqldump
:データサイズが1GB未満の場合、MySQLDUMPコマンドを直接使用してRDSにデータをインポートできます。mysqlimport
:データサイズが1GB以上または他の形式である場合、データをフラットファイルに圧縮し、SQLimportコマンドを使用してデータをアップロードできます。
他のヒント
私は見つけました AWSドキュメントのこのページ MySqldumpを使用してRDSインスタンスにパイプする方法を説明しています。
これらのサンプルコード(コマンドライン/シェル/SSHで使用)は次のとおりです。mysqldump acme | mysql --host=hostname --user=username --password acme
どこ acme
あなたが移行しているデータベースです hostname
/username
RDSインスタンスのものです。
RDSには通常のMySQLサーバーであるかのように接続できます。EC2IPSをセキュリティグループに追加してください。 このフォーラムの投稿.
ローカルMySqldumpのパスワードを含める必要があるため、私のコマンドはこのように見えました。mysqldump --password=local_mysql_pass acme | mysql --host=hostname --user=username --password acme
FWIW、私はデータベースの移動を完了しました。使った MySQLコマンドのこのリファレンス ユーザーの作成や許可の付与など。
お役に立てれば!
Gosquared Engineering Postの簡単な要約:
構成 +ブート
- インスタンスが最低の負荷になる場合、メンテナンスウィンドウとバックアップウィンドウを選択します
- Multi-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;
- それ以来、diffを取得します
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
ファイル。 - 最後からdiffを取得します
output.sql
(ステップ6のように)、ステップ7 + 8を繰り返します。
実際の移行
- すべてのアプリを新しいRDSインスタンスですばやく展開する準備をしてください
- 最新情報を入手してください
end_log_pos
からoutput.sql
- 走る
FLUSH TABLES WITH READ LOCK;
古いインスタンスでは、すべての書き込みを停止します - 新しいRDSインスタンスでアプリの展開を開始します
- 上から手順6-8を実行して、古いサーバーに最後のクエリを使用してRDSインスタンスを更新する
結論
この方法を使用して、あなたはあなたのアプリの展開にかかる時間に応じて、あなたのMySQLインスタンスが提供するmysqlインスタンスのいくつかの書き込み(おそらく1、2分しか書いていない)があなたの古いサーバーから拒否されますが、読み取りダウンタイムなしで一貫した移行があります。
最小限のダウンタイム(エラーデバッグを含む)でRDSにどのように移行したかを説明する完全かつ詳細な投稿がこちらから入手できます。 https://engineering.gosquared.com/migrating-mysql-to-amazon-rds.
私は@sanketdangiに完全に同意しています。
これを1つの方法で行う方法は2つあります。 mysqldump
また mysqlimport
.
クラウド上のデータを復元している間に問題が発生する場合を見てきました。
しかし、クラウドでアプリケーションをインポートすることは、今でははるかに簡単になりました。 Ravelloを介してDBサーバーをパブリッククラウドにアップロードしてみてください。
Ravelloを使用して、Amazonにデータベースサーバー自体をインポートできます。
開示:私はラベロで働いています。
MySQLのAWS RDSカスタマーデータインポートガイドはこちらから入手できます。 http://aws.amazon.com/articles/2933
- ロードするデータを含むフラットファイルを作成します
- ターゲットDBインスタンスにアクセスするアプリケーションを停止します
- DBスナップショットを作成します
- Amazon RDS自動バックアップを無効にします
- MySqlimportを使用してデータをロードします
- 自動バックアップを再度有効にします
あなたが端末を使用している場合、これは私のために働いたものです:
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ワークベンチ(無料ダウンロード)を使用して、コマンドラインが送信を押した後に静的だったため、動作していることを確認しました。
注:-Pの後のスペースはありません
最も簡単な例:
# export local db to sql file:
mysqldump -uroot -p —-databases qwe_db > qwe_db.sql
# Now you can edit qwe_db.sql file and change db name at top if you want
# import sql file to AWS RDS:
mysql --host=proddb.cfrnxxxxxxx.eu-central-1.rds.amazonaws.com --port=3306 --user=someuser -p qwe_db < qwe_db.sql
これが私がやった手順と成功した手順です。
必要なデータベースのmysqldumpを取ります。
mysqldump -u username -p databasename - single-transaction -quick - lock-tables = false> databasename-backup-$(date +%f).sql
(ユーザー名をルートとして置き換えることを忘れないでください - ほとんどの場合、データベースネーム - > DB RDSに移行するデータベースの名前は> db
プロンプトが表示されたら、パスワードを入力します。
完了したら、MySQLサーバーからRDSインスタンスにログインします(セキュリティグループがEC2からRDSへの接続を許可するように構成されていることを確認してください)
mysql -h hostaddress -p 3306 -u rdsusername -p
(RDSインスタンスのアドレスにHostAddressを置き換え、RDSインスタンスのユーザー名でRDSusernmaeを置き換えることを忘れないでください。
AWSコンソールのRDSデータベースの下にあるHostAddressの下にある - > Endpoint&Port。
ログインしたら、MySQLコマンドを使用してデータベースを作成します。
データベースデータベースネームを作成します。 q
データベースがRDSで作成されたら、ステップ1で作成されたSQLファイルをインポートします。
mysql -h hostaddress -u rdsusername -p databasename <backupfile.sql
これにより、SQLファイルをRDSにインポートし、コンテンツを新しいデータベースに復元する必要があります。