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

Aurora MySQL の 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 ドキュメントの「グローバルトランザクション ID によるレプリケーション」で概要を参照してください。

注記

GTID ベースのレプリケーションは、Aurora MySQL バージョン 2.04 以降の MySQL 5.7 互換のクラスターでサポートされています。GTID ベースのレプリケーションは、Aurora MySQL バージョン 1 の MySQL 5.6 互換のクラスターでサポートされていません。

グローバルトランザクション 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 ベースレプリケーションを設定します。

パラメータ 有効な値 説明

gtid_mode

OFFOFF_PERMISSIVEON_PERMISSIVEON

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

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

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

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

enforce_gtid_consistency

OFFONWARN

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

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

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

注記

AWS マネジメントコンソール では、gtid_mode パラメータは gtid-mode のように表示されます。

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

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

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

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

ヒント

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

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

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

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

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

  1. DB クラスターパラメータグループを作成または編集するには、以下のパラメータ設定を使用します。

    • gtid_modeON または ON_PERMISSIVE

    • enforce_gtid_consistencyON

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

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 プライマリインスタンスで、次の手順を実行します。

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

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

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

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

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

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

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

    1. Aurora プライマリインスタンスで、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);

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

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

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

      • gtid_modeOFF

      • enforce_gtid_consistencyOFF

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