Aurora MySQL のバイナリログレプリケーションの設定 - Amazon Aurora

Aurora MySQL のバイナリログレプリケーションの設定

Aurora MySQL と MySQL との間でレプリケーションを設定するには、次のステップを使用します。各ステップについては、このトピックで詳しく説明します。

1. レプリケーション出典のバイナリログ記録を有効にする

以下のデータベースエンジンのレプリケーション出典で、バイナリログを有効にする手順を確認します。

2. レプリケーション出典のバイナリログを不要になるまで保持する

MySQL バイナリログのレプリケーションを使用する場合、Amazon RDS はレプリケーションプロセスを管理しません。したがって、レプリケーション出典のバイナリログファイルは、変更がレプリカに適用されるまで保持する必要があります。このメンテナンスによって、障害発生時にソースデータベースを復元しやすくなります。

次のステップに従って、データベースエンジンのバイナリログを保持します。

3. レプリケーションソースのコピーまたはダンプを作成する

レプリケーションソースのスナップショット、クローン、またはダンプを使用して、データのベースラインコピーをレプリカにロードします。次に、その時点からレプリケーションを開始します。

次の指示に従って、データベースエンジンのレプリケーションソースのコピーまたはダンプを作成します。

4. レプリカターゲットにダンプをロードする (必要な場合)

Amazon RDS の外部 MySQL データベースのダンプからデータをロードする場合、ダンプファイルのコピー先となる EC2 インスタンスを作成しなければならない場合があります。その後、その EC2 インスタンスから DB クラスターまたは DB インスタンスにデータをロードできます。この方法では、ダンプファイルを EC2 インスタンスにコピーする前に圧縮して、Amazon RDS へのデータのコピーに関連するネットワークコストを削減できます。また、ダンプファイルを暗号化して、ネットワーク経由で転送されるデータを保護することもできます。

注記

レプリカターゲットとして新しい Aurora MySQL DB クラスターを作成する場合、ダンプファイルをロードする必要はありません。

次のステップに従って、レプリケーションソースのダンプをデータベースエンジンのレプリカターゲットにロードします。

5. レプリケーションソースでレプリケーションユーザーを作成する

レプリケーション専用のユーザー ID をソースに作成します。次の例は、RDS for MySQL または外部の MySQL ソースデータベース用です。

mysql> CREATE USER 'repl_user'@'domain_name' IDENTIFIED BY 'password';

Aurora MySQL ソースデータベースの場合、skip_name_resolveDB クラスターパラメータは 1 (ON) に設定され、変更できないため、ドメイン名の代わりにホストの IP アドレスを使用する必要があります。詳細については、MySQL ドキュメントの「skip_name_resolve」を参照してください。

mysql> CREATE USER 'repl_user'@'IP_address' IDENTIFIED BY 'password';

ユーザーには REPLICATION CLIENT および REPLICATION SLAVE 権限が必要です。ユーザーのこれらの権限を付与します。

暗号化レプリケーションを使用する必要がある場合は、レプリケーションのユーザーに対して SSL 接続を要求します。例えば、以下のいずれかのステートメントを使用して、ユーザーアカウント repl_user に SSL 接続を要求できます。

GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'repl_user'@'IP_address';
GRANT USAGE ON *.* TO 'repl_user'@'IP_address' REQUIRE SSL;
注記

REQUIRE SSL が含まれていない場合には、レプリケーション接続がメッセージの表示なしで非暗号化接続に戻る場合があります。

6. レプリカターゲットでレプリケーションを有効にする

レプリケーションを有効化する前に、MySQL DB インスタンスレプリカターゲットの Aurora MySQL DB クラスターまたは RDS のスナップショットを手動で作成することをお勧めします。問題が発生し、DB クラスターまたは DB インスタンスレプリカターゲットとのレプリケーションを再開する必要がある場合は、このスナップショットから DB クラスターまたは DB インスタンスを復元できます。そのために、再びレプリカターゲットにデータをインポートする必要はありません。

次のステップに従って、データベースエンジンでレプリケーションを有効にします。

レプリケーションが失敗した場合、レプリカにおいて意図しない I/O が大幅に増加することで、パフォーマンスが低下する可能性があります。レプリケーションが失敗するか、不要になった場合は、mysql.rds_reset_external_master (Aurora MySQL バージョン 2) または mysql.rds_reset_external_source (Aurora MySQL バージョン 3) ストアドプロシージャを実行して、レプリケーション設定を削除できます。

リードレプリカへのレプリケーションを停止する場所の設定

Aurora MySQL バージョン 3.04 以降では、mysql.rds_start_replication_until (Aurora MySQL バージョン 3) ストアドプロシージャを使用してレプリケーションを開始してバイナリログファイルの指定した位置で停止できます。

リードレプリカへのレプリケーションをスタートして指定の位置でレプリケーションを停止するには
  1. MySQL クライアントを使用して、マスターユーザーとしてレプリカ Aurora MySQL DB クラスターに接続します。

  2. mysql.rds_start_replication_until (Aurora MySQL バージョン 3) ストアドプロシージャを実行します。

    次の例では、レプリケーションをスタートし、120 バイナリログファイルの場所 mysql-bin-changelog.000777 に達するまで変更をレプリケートします。災害対策シナリオでは、場所 120 は災害発生直前の時点として想定されます。

    call mysql.rds_start_replication_until( 'mysql-bin-changelog.000777', 120);

停止ポイントに達すると、レプリケーションは自動的に停止します。RDS イベントとして、Replication has been stopped since the replica reached the stop point specified by the rds_start_replication_until stored procedure が生成されます。

GTID ベースのレプリケーションを使用する場合は、mysql.rds_start_replication_until_gtid (Aurora MySQL バージョン 3) ストアドプロシージャの代わりに、mysql.rds_start_replication_until (Aurora MySQL バージョン 3) ストアドプロシージャを実行します。GTID ベースのレプリケーションの詳細については、「GTID ベースレプリケーションを使用する」を参照してください。

7. レプリカをモニタリングする

Aurora MySQL DB クラスターと MySQL との間のレプリケーションを設定する場合、Aurora MySQL DB クラスターがレプリカターゲットであれば、そのクラスターのフェイルオーバーイベントをモニタリングする必要があります。フェイルオーバーが発生すると、レプリカターゲットである DB クラスターが、新しいホスト上に別のネットワークアドレスで再作成されます。フェイルオーバーイベントをモニタリングする方法については、「Amazon RDS イベント通知の操作」を参照してください。

また、レプリカターゲットがどれほどレプリケーションソースに遅れをとっているかをモニタリングするには、レプリカターゲットに接続して、SHOW SLAVE STATUS (Aurora MySQL バージョン 2) または SHOW REPLICA STATUS (Aurora MySQL バージョン 3) コマンドを実行します。このコマンドの出力の Seconds Behind Master フィールドに、マスターからレプリカターゲットへのコピーの進行状況が示されます。

レプリケーション出典とレプリケーションターゲット間でのパスワードの同期

SQL ステートメントを使用してレプリケーション出典のユーザーアカウントとパスワードを変更すると、それらの変更はレプリケーションターゲットに自動的にレプリケートされます。

AWS Management Console、AWS CLI、または RDS API を使用してレプリケーション出典のマスターパスワードを変更した場合、それらの変更はレプリケーションターゲットに自動的にレプリケートされません。出典システムとターゲットシステム間でマスターユーザーとマスターパスワードを同期する場合は、レプリケーションターゲットに対して同様の変更を自分で行う必要があります。