Amazon RDS for MySQL のアクティブ DB インスタンスのバイナリログを使用して、オンプレミスのスタンバイインスタンスにレプリケートするにはどうすればよいですか?

最終更新日: 2020 年 8 月 14 日

バイナリログを使用して MySQL DB インスタンスの Amazon Relational Database Service (Amazon RDS) を外部のオンプレミス環境にレプリケートする方法を教えてください。

簡単な説明

Amazon RDS for MySQL からオンプレミスのデータベースサーバーにデータを移行するには、AWS にリードレプリカを作成し、レプリケーションのターゲットを Amazon RDS MySQL リードレプリカからオンプレミスサーバーに切り替えることができます。

GTID ベースのレプリケーションを使用する場合は、外部マスターインスタンスを使用した GTID ベースのレプリケーションの設定を参照してください。

解決方法

1.    レプリケートする DB インスタンスで自動バックアップが有効になっていることを確認します。この例では、DB インスタンスは RDS-active です。

注意: バックアップの最小保持期間は 1 日です。

2.    同じ設定を使用して DB インスタンスのリードレプリカを作成します。この例では、レプリカは RDS-standby です。

3.    RDS-standby DB インスタンスにログインし、レプリカが RDS-active に追いついていることを確認します。

mysql> show slave status \G

注意: seconds_behind_master0 である必要があります。これは、レプリカラグがないことを意味します。

4.    RDS-standbyレプリケーションを停止します。

mysql> call mysql.rds_stop_replication;

5.    レプリカからデータを記録し、-log_file および -log_ position パラメータを書き留めます。

mysql> show slave status \G

注意: -log_fileRelay_Master_Log_File の値で、-log_positionExec_Master_Log_Pos の値です。

6.    ターミナルを終了し、mysqldump (または同様のユーティリティ) を使用して、ターゲットサーバーにレプリケートされる RDS-standby のバックアップを作成します。この例では、ターゲットオンプレミスサーバーは MySQL-target です。

$ mysqldump -h hostname -u username -p dbname > backup_file_name.sql

7.    バックアップを作成したら、MySQL-target にログインして、ターゲットオンプレミスサーバーにバックアップファイルを転送します。

8.    新しいデータベースを作成し、dumpfile を使用して新しい外部 DB インスタンスにデータベースを復元します。

$ mysql -h hostname -u username -p dbname < backup_file_name.sql

9.    RDS-active DB インスタンスにログインし、レプリケーションユーザーをセットアップして、必要な権限をユーザーに付与します。

mysql> create user repl_user@'%' identified by 'repl_user';
   mysql>grant replication slave, replication client on *.* to repl_user@'%';
   mysql>show grants for repl_user@'%';

注意: repl_user を自分のレプリケーションユーザー名に置き換えてください。

10.    ターゲット DB インスタンスにログインし、MySQL サーバーを停止します。

11.    my.cnf file パラメータを変更して、一意のサーバー ID (server_id=2 など)、および DB インスタンスからレプリケートするデータベースの名前 (replicate-do-db=test など) を指すようにします。

12.    ファイルを保存します。

13.    MySQL-target の MySQL サーバーを再起動します。

14.    RDS-active DB インスタンスへの接続を確立します。

mysql> change master to master_host='rds-endpoint',master_user='repl_user', master_password='password', master_log_file='mysql-bin.000001', master_log_pos= 107;

15.    MySQL-targetRDS-active に接続できることを確認します。

注意: Amazon Elastic Compute Cloud (Amazon EC2) を外部 MySQL インスタンスとして使用する場合、RDS-active DB インスタンスのセキュリティグループのセキュリティグループまたは IP アドレスからの接続を許可します。外部 MySQL サーバーを使用する場合は、telnet を実行して接続をテストします。詳細については、Amazon RDS DB インスタンスに接続する際の問題を解決するにはどうすればよいですか? を参照してください。

RDS-Endpoint は、RDS-active DB インスタンスのエンドポイントです。ユーザー名とパスワードは、ステップ 9 で作成したユーザー名とパスワードと同じです。MASTER_LOG_FILEMASTER_LOG_POS は、ステップ 5 で書き留めた値です。

16.    MySQL-target にログインし、レプリケーションを開始します。

mysql> start slave;

17.    レプリケーションが RDS-activeMySQL-target の間で同期中であることを確認します。

mysql> Show slave status\G

18.    マスターからの遅れの秒数がゼロになったら、RDS-standby DB インスタンスを削除できます。