GTID ベースレプリケーションを使用する - Amazon Aurora

GTID ベースレプリケーションを使用する

以下では、Aurora MySQL クラスターと外部ソースとの間において、バイナリログ (binlog) レプリケーションでグローバルトランザクション ID (GTID) を使用する方法について説明します。

注記

Aurora では、この機能は、外部 MySQL データベースとの間で binlog レプリケーションを使用する Aurora MySQL クラスターでのみ使用できます。もう一方のデータベースは、Amazon RDS MySQL インスタンス、オンプレミス MySQL データベース、または別の AWS リージョン にある Aurora DB クラスターです。その種類のレプリケーションを設定する方法については、「Aurora と MySQL との間、または Aurora と別の Aurora DB クラスターとの間のレプリケーション (バイナリログレプリケーション)」を参照してください。

binlog レプリケーションを使用する際に MySQL での GTID ベースのレプリケーションに慣れていない場合は、MySQL ドキュメントの「Replication with global transaction identifiers」を参照してください。

GTID ベースのレプリケーションは、Aurora MySQL バージョン 2 および 3 でサポートされています。

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

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

注記

Aurora がクラスター内の DB インスタンス間でデータを同期する場合、そのレプリケーションメカニズムにバイナリログ (binlog) は含まれません。Aurora MySQL では、GTID ベースのレプリケーションは、binlog レプリケーションも使用して外部の MySQL 互換データベースから Aurora MySQL DB クラスター間でレプリケートする場合にのみ適用されます。

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

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

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

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

外部の MySQL 互換データベースから Aurora クラスターにレプリケートする場合は通常、GTID ベースのレプリケーションを Aurora と共に使用します。このレプリケーション設定は、オンプレミスまたは Amazon RDS データベースから Aurora MySQL への移行の一環として行うことができます。外部データベースで既に GTID が使用されている場合に、Aurora クラスターに対して GTID ベースのレプリケーションを有効にすると、レプリケーションプロセスが簡単になります。

Aurora MySQL クラスター用に GTID ベースのレプリケーションを設定するには、まず DB クラスターパラメータグループの関連設定パラメータを設定します。その後、そのパラメータグループとクラスターを関連付けます。

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 ベースのレプリケーションでは、Aurora MySQL DB クラスターの DB クラスターパラメータグループでこれらの設定を使用します。

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

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

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

ヒント

受信レプリケーションは、Aurora MySQL クラスターの最も一般的な binlog レプリケーションのシナリオです。受信レプリケーションでは、GTID モードを OFF_PERMISSIVE に設定することをお勧めします。この設定では、レプリケーション出典の GTID 設定に関係なく、外部データベースからの受信レプリケーションが可能になります。

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

Aurora MySQL クラスターの GTID ベースレプリケーションの設定

GTID ベースのレプリケーションが Aurora MySQL DB クラスターで有効になっている場合、GTID 設定は、インバウンドとアウトバウンドの binlog レプリケーションのいずれにも適用されます。

Aurora MySQL クラスターの GTID ベースのレプリケーションを有効にするには
  1. DB クラスターパラメータグループを作成または編集するには、以下のパラメータ設定を使用します。

    • gtid_mode - ON または ON_PERMISSIVE

    • enforce_gtid_consistencyON

  2. DB クラスターパラメータグループを Aurora MySQL クラスターに関連付けます。そのためには、「「パラメータグループを使用する」 」の手順に従います。

  3. (オプション) GTID を含まないトランザクションに GTID を割り当てる方法を指定します。これを行うには、mysql.rds_assign_gtids_to_anonymous_transactions (Aurora MySQL バージョン 3) でストアドプロシージャを呼び出します。

Aurora MySQL DB クラスターの GTID ベースレプリケーションを無効にする

Aurora MySQL DB クラスターに対する GTID ベースのレプリケーションは、無効にすることができます。これを行うと、Aurora クラスターは、GTID ベースのレプリケーションを使用する外部データベースとのインバウンドまたはアウトバウンドの binlog レプリケーションを実行できなくなります。

注記

次の手順で、リードレプリカは、外部データベースとの間で binlog レプリケーションを伴う Aurora 設定のレプリケーションターゲットを意味します。読み取り専用の Aurora レプリカ DB インスタンスを意味するものではありません。例えば、Aurora クラスターが外部出典からの受信レプリケーションを受け入れる場合、Aurora プライマリインスタンスは binlog レプリケーションのリードレプリカとして機能します。

このセクションで示されているストアドプロシージャの詳細については、「Aurora MySQL ストアドプロシージャ」を参照してください。

Aurora MySQL DB クラスターの GTID ベースレプリケーションを無効にするには
  1. Aurora レプリカで、次の手順を実行します。

    バージョン 3 の場合

    CALL mysql.rds_set_source_auto_position(0);

    バージョン 2 の場合

    CALL mysql.rds_set_master_auto_position(0);
  2. gtid_modeON_PERMISSIVE にリセットします。

    1. Aurora MySQL クラスターに関連付けられている DB クラスターパラメータグループで、gtid_modeON_PERMISSIVE に設定されていることを確認します。

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

    2. Aurora MySQL DB クラスターを再起動します。

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

    1. Aurora MySQL クラスターに関連付けられている DB クラスターパラメータグループで、gtid_modeOFF_PERMISSIVE に設定されていることを確認します。

    2. Aurora MySQL DB クラスターを再起動します。

  4. すべての GTID トランザクションが Aurora プライマリインスタンスに適用されるまで待ちます。適用されたことを確認するには、次の手順を実行します。

    1. Aurora プライマリインスタンスで、SHOW MASTER STATUS コマンドを実行します。

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

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

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

    2. リードレプリカごとに、前のステップで得たソースインスタンスのファイルと位置の情報を使用して、次のクエリを実行します。

      バージョン 3 の場合

      SELECT SOURCE_POS_WAIT('file', position);

      バージョン 2 の場合

      SELECT MASTER_POS_WAIT('file', position);

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

      バージョン 3 の場合

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

      バージョン 2 の場合

      SELECT MASTER_POS_WAIT('mysql-bin-changelog.000031', 107);
  5. GTID パラメータをリセットして、GTID ベースのレプリケーションを無効にします。

    1. Aurora MySQL クラスターに関連付けられた DB クラスターパラメータグループに次のパラメータが設定されていることを確認します。

      • gtid_modeOFF

      • enforce_gtid_consistencyOFF

    2. Aurora MySQL DB クラスターを再起動します。