Amazon RDS for MySQL の GTID ベースレプリケーションを使用する - Amazon Relational Database Service

Amazon RDS for MySQL の GTID ベースレプリケーションを使用する

次に、 Amazon RDS for MySQL DB インスタンスにおけるバイナリログ (binlog) レプリケーションでグローバルトランザクション ID (GTID) を使用する方法について説明します。

binlog レプリケーションを使用する際に MySQL での GTID ベースレプリケーションに慣れていない場合は、MySQL ドキュメントの「グローバルトランザクション ID によるレプリケーション」で概要を参照してください。

GTID ベースのレプリケーションは、すべての RDS for MySQL 5.7 バージョンおよび RDS for MySQL 8.0.26 以降の MySQL 8.0 バージョンでサポートされています。レプリケーション設定のすべての MySQL DB インスタンスがこの要件を満たしている必要があります。

グローバルトランザクション ID (GTID) の概要

グローバルトランザクション ID (GTID) はコミットされた MySQL トランザクションに対して生成される一意の ID です。GTID を使用することで、簡単に binlog をレプリケーションおよびトラブルシューティングできるようになります。

MySQL では、binlog レプリケーションに 2 種類のトランザクションを使用します。

  • GTID トランザクション - GTID によって識別されるトランザクション。

  • 匿名トランザクション - GTID が割り当てられていないトランザクション。

レプリケーション設定では、GTID はすべての DB インスタンスで一意です。GTID を使用すると、ログファイルの位置を参照する必要がないため、GTID はレプリケーション設定を簡素化します。GTID はまた、レプリケートされたトランザクションを追跡し、出典インスタンスとレプリカが一致しているかどうかの判断を容易にします。

GTID ベースのレプリケーションを使用して、RDS for MySQL リードレプリカでデータをレプリケートできます。新しいリードレプリカの作成時に GTID ベースのレプリケーションを設定するか、GTID ベースのレプリケーションを使用するように既存のリードレプリカを変換することができます。

また、RDS for MySQL を使用し、遅延レプリケーション設定で GTID ベースのレプリケーションを使用することもできます。詳細については、「MySQL での遅延レプリケーションの設定」を参照してください。

GTID ベースレプリケーションのパラメータ

以下のパラメータを使用して、GTID ベースレプリケーションを設定します。

Parameter 有効な値 説明

gtid_mode

OFF, OFF_PERMISSIVE, ON_PERMISSIVE, ON

OFF は新しいトランザクションが匿名トランザクション (つまり GTID を持たない) であることを指定し、トランザクションは匿名でレプリケートされる必要があります。

OFF_PERMISSIVE は新しいトランザクションが匿名トランザクションであることを指定しますが、すべてのトランザクションをレプリケートできます。

ON_PERMISSIVE は新しいトランザクションが GTID トランザクションであることを指定しますが、すべてのトランザクションをレプリケートできます。

ON は新しいトランザクションが GTID トランザクションであることを指定し、トランザクションは複製される GTID トランザクションでなければなりません。

enforce_gtid_consistency

OFF, ON, WARN

OFF はトランザクションが GTID の整合性に違反することを許可します。

ON はトランザクションが GTID の整合性に違反することを防ぎます。

WARN は、トランザクションが GTID の整合性に違反することを許可しますが、違反が発生すると警告を生成します。

注記

AWS Management Console では、gtid_mode パラメータは gtid-mode のように表示されます。

GTID ベースのレプリケーションでは、DB インスタンスまたはリードレプリカのパラメータグループでこれらの設定を使用します。

  • ONON_PERMISSIVE は、RDS DB インスタンスからの送信レプリケーションにのみ適用されます。いずれの値でも、RDS DB インスタンスは、レプリケートされるトランザクションに GTID を使用します。ON の場合は、ターゲットデータベースも GTID ベースのレプリケーションを使用します。ON_PERMISSIVE の場合、GTID ベースのレプリケーションは、ターゲットデータベースではオプションになります。

  • OFF_PERMISSIVE が設定された場合、これは、RDS DB インスタンスがソースデータベースからの受信レプリケーションを受け入れることができることを意味します。これは、ソースデータベースで GTID ベースのレプリケーションが使用されているかどうかにかかわらず実行できます。

  • OFF が設定された場合、これは、RDS DB インスタンスが、GTID ベースのレプリケーションを使用しないソースデータベースからの受信レプリケーションのみを受け入れることができることを意味します。

パラメータグループの詳細については、「「パラメータグループを使用する」 」を参照してください。

新しいリードレプリカの GTID ベースレプリケーションの設定

RDS for MySQL DB インスタンスで GTID ベースのレプリケーションが有効になっている場合、GTID ベースのレプリケーションは DB インスタンスのリードレプリカに対して自動的に設定されます。

新しいリードレプリカの GTID ベースのレプリケーションを有効にするには
  1. DB インスタンスに関連付けられたパラメータグループに次のパラメータ設定があることを確認します。

    • gtid_mode - ON または ON_PERMISSIVE

    • enforce_gtid_consistencyON

    パラメータグループを使用して設定パラメータの設定の詳細については、「「パラメータグループを使用する」 」を参照してください。

  2. DB インスタンスのパラメータグループを変更した場合は、DB インスタンスを再起動します。方法の詳細については、 DB インスタンスの再起動 を参照してください。

  3. DB インスタンスの 1 つまたは複数のリードレプリカを作成します。方法の詳細については、リードレプリカの作成 を参照してください。

Amazon RDS は、MASTER_AUTO_POSITION を使用して MySQL DB インスタンスとリードレプリカ間で GTID ベースのレプリケーションの接続の確立を試みます。試行が失敗した場合、Amazon RDS はリードレプリカを使用してレプリケーションにログファイルの位置を使用します。MASTER_AUTO_POSITION の詳細については、MySQL ドキュメントの「GTID 自動配置」を参照してください。

既存のリードレプリカの GTID ベースレプリケーションの設定

GTID ベースのレプリケーションを使用しないリードレプリカを持つ既存の MySQL DB インスタンスでは、DB インスタンスとリードレプリカ間で GTID ベースのレプリケーションを設定できます。

既存のリードレプリカの GTID ベースレプリケーションを有効にするには
  1. DB インスタンスまたはリードレプリカで RDS for MySQL バージョン 8.0.26 以下の 8.0 バージョンを使用している場合は、DB インスタンスまたはリードレプリカを8.0.26 以降の MySQL 8.0 バージョンにアップグレードします。すべての RDS for MySQL 5.7 バージョンで GTID ベースのレプリケーションをサポートしています。

    詳しくは、「MySQL DB エンジンのアップグレード」を参照してください。

  2. (オプション) GTID パラメータをリセットし、DB インスタンスとリードレプリカの動作をテストします。

    1. DB インスタンスおよび各リードレプリカに関連付けられたパラメータグループで enforce_gtid_consistency パラメータが WARN に設定されていることを確認します。

      パラメータグループを使用して設定パラメータの設定の詳細については、「「パラメータグループを使用する」 」を参照してください。

    2. DB インスタンスのパラメータグループを変更した場合は、DB インスタンスを再起動します。リードレプリカのパラメータグループを変更した場合は、リードレプリカを再起動します。

      詳細については、「 DB インスタンスの再起動」を参照してください。

    3. DB インスタンスとリードレプリカを通常のワークロードで実行し、ログファイルをモニタリングします。

      GTID と互換性のないトランザクションに関する警告が表示された場合は、GTID 互換の機能のみを使用するようアプリケーションを調整してください。以下のステップに進む前に、DB インスタンスが GTID と互換性のないトランザクションに関する警告を生成していないことを確認してください。

  3. リードレプリカがすべてを処理するまで匿名トランザクションを許可する GTID ベースのレプリケーションの GTID パラメータをリセットします。

    1. DB インスタンスおよび各リードレプリカに関連付けられたパラメータグループに、以下のパラメータ設定が含まれていることを確認します。

      • gtid_modeON_PERMISSIVE

      • enforce_gtid_consistencyON

    2. DB インスタンスのパラメータグループを変更した場合は、DB インスタンスを再起動します。リードレプリカのパラメータグループを変更した場合は、リードレプリカを再起動します。

  4. すべての匿名トランザクションがレプリケートされるまで待ちます。これらがレプリケートされていることを確認するには、次の作業を行います。

    1. 出典 DB インスタンスで、次のステートメントを実行します。

      SHOW MASTER STATUS;

      [File] および [Position] 列の値に注意してください。

    2. 各リードレプリカで前述のステップの出典インスタンスからのファイルと位置情報を使用し、次のクエリを実行します。

      SELECT MASTER_POS_WAIT('file', position);

      例えば、ファイル名が mysql-bin-changelog.000031 で、場所が 107 の場合、以下のステートメントを実行します。

      SELECT MASTER_POS_WAIT('mysql-bin-changelog.000031', 107);

      リードレプリカが指定された位置を過ぎている場合、クエリは直ちに返ります。変更しなかった場合、その関数は待ちます。すべてのリードレプリカに対してクエリが返るときは、以下のステップに進みます。

  5. GTID ベースのレプリケーションの GTID パラメータのみをリセットします。

    1. DB インスタンスおよび各リードレプリカに関連付けられたパラメータグループに、以下のパラメータ設定が含まれていることを確認します。

      • gtid_modeON

      • enforce_gtid_consistencyON

    2. DB インスタンスと各リードレプリカを再起動します。

  6. 各リードレプリカで、以下の手順を実行します。

    CALL mysql.rds_set_master_auto_position(1);

リードレプリカを持つ MySQL DB インスタンスの GTID ベースレプリケーションを無効にする

リードレプリカを含む MySQL DB インスタンスです。

リードレプリカを使用する MySQL DB インスタンスの GTID ベースレプリケーションを無効にするには
  1. 各リードレプリカで、以下の手順を実行します。

    CALL mysql.rds_set_master_auto_position(0); (Aurora MySQL version 2) CALL mysql.rds_set_source_auto_position(0); (Aurora MySQL version 3)
  2. gtid_modeON_PERMISSIVE にリセットします。

    1. MySQL DB インスタンスおよび各リードレプリカに関連付けられたパラメータグループで gtid_modeON_PERMISSIVE になっていることを確認します。

      パラメータグループを使用して設定パラメータの設定の詳細については、「「パラメータグループを使用する」 」を参照してください。

    2. MySQL DB インスタンスと各リードレプリカを再起動します。再起動の詳細については、「 DB インスタンスの再起動」を参照してください。

  3. gtid_modeOFF_PERMISSIVE にリセットします。

    1. MySQL DB インスタンスおよび各リードレプリカに関連付けられたパラメータグループで gtid_modeOFF_PERMISSIVE になっていることを確認します。

    2. MySQL DB インスタンスと各リードレプリカを再起動します。

  4. すべての GTID トランザクションがすべてのリードレプリカに適用されるまで待ちます。これらが適用されていることを確認するには、次の作業を行います。

    すべての GTID トランザクションが Aurora プライマリインスタンスに適用されるまで待ちます。これらが適用されていることを確認するには、次の作業を行います。

    1. MySQL DB インスタンスで、SHOW MASTER STATUS コマンドを実行します。

      出力は次のようになります。

      File Position ------------------------------------ mysql-bin-changelog.000031 107 ------------------------------------

      出力のファイルと位置に注意してください。

    2. 各リードレプリカで前述のステップの出典インスタンスからのファイルと位置情報を使用し、次のクエリを実行します。

      SELECT MASTER_POS_WAIT('file', position);

      例えば、ファイル名が mysql-bin-changelog.000031 で、場所が 107 の場合、以下のステートメントを実行します。

      SELECT MASTER_POS_WAIT('mysql-bin-changelog.000031', 107);

      リードレプリカが指定された位置を過ぎている場合、クエリは直ちに返ります。変更しなかった場合、その関数は待ちます。すべてのリードレプリカでクエリが返ったら、以下のステップに進みます。

  5. GTID パラメータをリセットし、GTID ベースのレプリケーションを無効にします。

    1. MySQL DB インスタンスおよび各リードレプリカに関連付けられたパラメータグループに、以下のパラメータ設定が含まれていることを確認します。

      • gtid_modeOFF

      • enforce_gtid_consistencyOFF

    2. MySQL DB インスタンスと各リードレプリカを再起動します。