Amazon Relational Database Service (Amazon RDS) for MySQL DB インスタンスをオンプレミスのスタンバイサーバーに複製したいと考えています。
簡単な説明
Amazon RDS for MySQL DB インスタンスからオンプレミスサーバーにデータを移行するには、AWS にリードレプリカを作成します。次に、レプリケーションのターゲットを Amazon RDS for MySQL リードレプリカからオンプレミスサーバーに切り替えます。
グローバルトランザクション識別子 (GTID) ベースのレプリケーションを使用する場合は、「外部のソースインスタンスを使用してバイナリログファイル位置基準のレプリケーションを設定する」を参照してください。
解決策
アクティブ DB インスタンスのリードレプリカを作成する
次の手順を実行します。
-
複製するアクティブ DB インスタンスにおいて、自動バックアップが有効であることを確認します。
注: バックアップの最小保持期間は 1 日です。データをバックアップする際、追加コストが発生します。詳細については、「Amazon RDS の料金」を参照してください。
-
同じ設定でアクティブ DB インスタンスのリードレプリカを作成します。
-
リードレプリカ DB インスタンスにログインします。
-
次のコマンドを実行し、リードレプリカ DB インスタンスがアクティブ DB インスタンスと一致することを確認します。
MySQL バージョン 8.0.23 以降:
mysql> show replica status \G
8.0.23 より前の MySQL バージョン:
mysql> show slave status \G
注: レプリカインスタンスには、DB インスタンスに対する遅延がない場合は、Seconds_Behind_Master パラメータは 0 と表示されます。
-
次のコマンドを実行すると、リードレプリカ DB インスタンスへのレプリケーションが停止します。
mysql> call mysql.rds_stop_replication;
-
-log_file パラメータおよび -log_position パラメータを記録するには、リードレプリカ DB インスタンスに次のコマンドを実行します。
MySQL バージョン 8.0.23 以降:
mysql> show replica status \G
8.0.23 より前の MySQL バージョン:
mysql> show slave status \G
注: -log_file は relay_source_log_file 値、-log_position は exec_source_log_pos 値です。
リードレプリカ DB インスタンスのダンプファイルを作成する
次の手順を実行します。
-
mysqldump クライアントまたは同等のユーティリティで次のコマンドを実行して、リードレプリカ DB インスタンスのバックアップを作成します。
mysqldump -h hostname -u username -p dbname > backup_file_name.sql
-
オンプレミスサーバーにログインし、このサーバーにダンプファイルを転送します。
ダンプファイルを新しい DB インスタンスに復元する
次の手順を実行します。
-
オンプレミスサーバーに外部 DB インスタンスを新規作成します。
-
次のコマンドを実行し、ダンプファイルを新しい外部 DB インスタンスに復元します。
mysql -h hostname -u username -p dbname < backup_file_name.sql
-
アクティブ 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 をレプリケーションユーザー名に置き換えてください。
-
新しい外部 DB インスタンスにログインした後、オンプレミスサーバーを停止します。
-
my.cnf ファイルのパラメータを変更し、複製対象の一意のサーバー ID およびデータベース名を指定します (例: server_id=2、replicate-do-db=test)。
-
ファイルを保存します。
-
オンプレミスサーバーを再起動します。
新しい外部 DB インスタンスがアクティブ DB インスタンスに接続できることを確認する
Amazon Elastic Compute Cloud (Amazon EC2) を外部 MySQL インスタンスとして使用する場合は、インスタンスを更新し、セキュリティグループからの接続を許可します。または、アクティブ DB インスタンスのセキュリティグループに属する IP アドレスからの接続を許可します。外部 MySQL サーバーを使用する場合は、telnet を実行して接続をテストします。詳細については、「Amazon RDS DB インスタンスに接続できない原因を教えてください」を参照してください。
次の手順を実行します。
- レプリカサーバーがソースへの接続に使用するパラメータを変更するには、新しい外部 DB インスタンスで次のコマンドを実行します。
MySQL バージョン 8.0.23 以降:
mysql> change replication source to source_host='rds-endpoint', source_user='repl_user', source_password='password', source_log_file='mysql-bin.000001', source_log_pos=107;
8.0.23 より前の MySQL バージョン:
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;
**注:**rds-endpoint をアクティブ DB インスタンスのエンドポイントに置き換えてください。ダンプファイルを新しいデータベースに復元した際に作成したユーザー名とパスワードを使用します。relay_source_file 値と exec_source_log_pos 値を、リードレプリカの -log_file 値と -log_position 値に置き換えます。
- オンプレミスサーバーがアクティブ DB インスタンスに接続できることを確認します。
レプリケーションを開始する
次の手順を実行します。
-
オンプレミスサーバーにログインします。
-
次のコマンドを実行してレプリケーションを開始します。
MySQL バージョン 8.0.23 以降:
mysql> start replica;
8.0.23 より前の MySQL バージョン:
mysql> start slave;
-
次のコマンドを実行し、レプリケーションがアクティブ DB インスタンスとオンプレミスサーバーの間で同期されていることを確認します。
MySQL バージョン 8.0.23 以降:
mysql> show replica status\G
8.0.23 より前の MySQL バージョン:
mysql> show slave status\G
-
Seconds_Behind_Master パラメータが 0 になった時点で、リードレプリカ DB インスタンスを削除します。
関連情報
AWS DMS を使用して Amazon RDS または Amazon Aurora DB インスタンスに移行する方法を教えてください
レプリケーションを使用して MySQL DB インスタンスからデータをエクスポートする
Aurora と MySQL 間、または Aurora と別の Aurora DB クラスター間のレプリケーション (バイナリログレプリケーション)