MySQL での遅延レプリケーションの設定
遅延レプリケーションは、災害対策用の戦略として使用できます。遅延レプリケーションでは、ソースからリードレプリカへのレプリケーションを遅延させる最小時間を秒数で指定します。障害発生時 (意図しないテーブルの削除など) には、以下のステップを実行して障害から早急に復旧します。
-
障害を起こした変更がリードレプリカに送られる前に、リードレプリカへのレプリケーションを停止します。
レプリケーションを停止するには、mysql.rds_stop_replication ストアドプロシージャを使用します。
-
レプリケーションをスタートし、レプリケーションがログファイルの場所で自動的に停止するように指定します。
障害発生の直前の場所を指定するには、mysql.rds_start_replication_until ストアドプロシージャを使用します。
-
「リードレプリカをスタンドアロン DB インスタンスに昇格させる」の手順を使用してリードレプリカを新しいソースの DB インスタンスに昇格させます。
注記
-
RDS for MySQL 8.0 の場合、遅延レプリケーションは MySQL 8.0.28 以降でサポートされています。RDS for MySQL 5.7 の場合、遅延レプリケーションは MySQL 5.7.44 以降でサポートされています。
-
遅延レプリケーションを設定するには、ストアドプロシージャを使用します。遅延レプリケーションを AWS Management Console、AWS CLI、または Amazon RDS API で設定することはできません。
-
RDS for MySQL 5.7.44 以降の MySQL 5.7 バージョンおよび RDS for MySQL 8.0.28 以降の 8.0 バージョンでは、遅延レプリケーション設定でグローバルトランザクション識別子 (GTID) に基づくレプリケーションを使用できます。GTID ベースのレプリケーションを使用する場合は、mysql.rds_start_replication_until_gtid ストアドプロシージャの代わりに、mysql.rds_start_replication_until ストアドプロシージャを実行します。GTID ベースのレプリケーションの詳細については、「GTID ベースレプリケーションを使用する」を参照してください。
リードレプリカ作成時の遅延レプリケーションの設定
DB インスタンスから今後作成するリードレプリカの遅延レプリケーションを設定するには、mysql.rds_set_configuration パラメータを指定して target delay
ストアドプロシージャを実行します。
リードレプリカの作成時に遅延レプリケーションを設定するには
-
MySQL クライアントを使用し、マスターユーザーとして、リードレプリカのソースとなる MySQL DB インスタンスに接続します。
-
mysql.rds_set_configuration パラメータを指定して
target delay
ストアドプロシージャを実行します。例えば、現在の DB インスタンスから作成されるリードレプリカへのレプリケーションを少なくとも 1 時間 (3600 秒) 遅延させるように指定するには、次のストアドプロシージャを実行します。
call mysql.rds_set_configuration('target delay', 3600);
注記
このストアドプロシージャを実行すると、AWS CLI または Amazon RDS API を使用して作成したリードレプリカには、指定した秒数で遅延するレプリケーションが設定されます。
既存のリードレプリカの遅延レプリケーションの変更
既存のリードレプリカの遅延レプリケーションを変更するには、mysql.rds_set_source_delay ストアドプロシージャを実行します。
既存のリードレプリカの遅延レプリケーションを変更するには
-
MySQL クライアントを使用して、マスターユーザーとしてリードレプリカに接続します。
-
レプリケーションを停止するには、mysql.rds_stop_replication ストアドプロシージャを使用します。
-
mysql.rds_set_source_delay ストアドプロシージャを実行します。
例えば、リードレプリカへのレプリケーションを少なくとも 1 時間 (3600 秒) 遅延させるように指定するには、次のストアドプロシージャを実行します。
call mysql.rds_set_source_delay(3600);
-
mysql.rds_start_replication ストアドプロシージャを使用してレプリケーションをスタートします。
リードレプリカへのレプリケーションを停止する場所の設定
リードレプリカへのレプリケーションが停止したら、mysql.rds_start_replication_until ストアドプロシージャを使用してレプリケーションをスタートしてバイナリログファイルの指定した位置で停止できます。
リードレプリカへのレプリケーションをスタートして指定の位置でレプリケーションを停止するには
-
MySQL クライアントを使用して、マスターユーザーとしてソース MySQL DB インスタンスに接続します。
-
mysql.rds_start_replication_until ストアドプロシージャを実行します。
次の例では、レプリケーションをスタートし、
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
が生成されます。
リードレプリカの昇格
レプリケーションが停止したら、災害対策シナリオでリードレプリカを新しいソース DB インスタンスに昇格させます。リードレプリカの昇格については、「リードレプリカをスタンドアロン DB インスタンスに昇格させる」を参照してください。