オンプレミスやEC2その他のサーバで動かしているMySQLとAmazon RDSをレプリケーションさせる方法です。
昨年、以下の資料が発表されています。
オンプレミスのMySQLデータをAmazon RDSに移動する
https://aws.amazon.com/blogs/aws/migrate-mysql-data-to-amazon-rds-and-back/
ダウンタイム無しでAmazon RDS MySQLデータベースにデータをインポート
http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/MySQL.Procedural.Importing.NonRDSRepl.html
ひじょうに簡単になっていたので纏めてみました。
MySQLマスターサーバは既に立ち上がっているとします。
IPアドレス: 100.100.100.100
コンソールからRDSを作成します。
ホスト名: rds.xxx.ap-northeast-1.rds.amazonaws.com
ユーザ: userrds
パスワード: passwordrds
MySQLマスターにスレーブ用のユーザを作成。
$ mysql -uroot -pxxxxxxxx mysql> GRANT REPLICATION SLAVE ON *.* TO userrds@"%"IDENTIFIED BY "passwordrds"; mysql> FLUSH PRIVILEGES;
mysqldumpを使ってMySQLマスターのデータベースをバックアップ。
$ /usr/bin/ionice -c2 -n7 /bin/nice -n19 /usr/bin/mysqldump -uroot -pxxxxxxxx --master-data=2 --single-transaction --routines --triggers --databases databasename > databasename.sql
binlog名とポジションを調べて、控えておく。
$ head -100 databasename.sql | grep CHANGE -- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000855', MASTER_LOG_POS=846543983;
RDSにデータベースを作っておく。
$ mysql -uuserrds -ppasswordrds -hrds.xxx.ap-northeast-1.rds.amazonaws.com mysql> CREATE DATABASE databasename;
RDSにバックアップファイルをインポートする。
$ mysql -uuserrds -ppasswordrds -hrds.xxx.ap-northeast-1.rds.amazonaws.com databasename < databasename.sql
RDSにMySQLマスターの情報を登録する。
$ mysql -uuserrds -ppasswordrds -hrds.xxx.ap-northeast-1.rds.amazonaws.com mysql> CALL mysql.rds_set_external_master('100.100.100.100',3306,'userrds','passwordrds','mysql-bin.000855',846543983,0);
レプリケーションをスタート。
mysql> CALL mysql.rds_start_replication;
レプリケーションの状態を確認。
mysql> SHOW SLAVE STATUS\G
※ read_onlyがOFFになっているので、書き込み可能な状態になっています。お好みによって、read_onlyをONにしてください。
mysql> SHOW GLOBAL VARIABLES like 'read_only'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | read_only | OFF | +---------------+-------+ 1 row in set (0.00 sec)
以下、その他のコマンドです。
レプリケーションをストップする。
mysql> CALL mysql.rds_stop_replication;
レプリケーションを解除する。
mysql> CALL mysql.rds_reset_external_master;
レプリケーションの状態を確認する。
mysql> SELECT * FROM mysql.rds_replication_status;
レプリケーション設定のログを表示する。
mysql> SELECT * FROM mysql.rds_history;
参考資料)
Importing Data to an Amazon RDS MySQL DB Instance with Reduced Downtime - Amazon Relational Database Service
http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/MySQL.Procedural.Importing.NonRDSRepl.html
付録: MySQL Amazon RDS SQL リファレンス - Amazon Relational Database Service
http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/Appendix.MySQL.SQLRef.html
既存のMySQLサーバからRDSインスタンスへの移行をテストする « サーバーワークス エンジニアブログ
http://blog.serverworks.co.jp/tech/2011/10/17/mysql-to-rds-test/
EC2・オンプレ環境のMySQLからRDSのマイグレーションがやりやすくなった - まめ畑
http://d.conma.me/entry/2013/09/06/133656