Amazon Relational Database Service
ユーザーガイド

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

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

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

注記

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

注記

外部データベースとの GTID ベースのレプリケーションの設定については、「Amazon RDS の外部で実行される MySQL または MariaDB インスタンスとのレプリケーション」を参照してください。

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

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

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

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

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

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

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

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

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 の整合性に違反することを許可しますが、違反が発生すると警告を生成します。

GTID ベースのレプリケーションでは、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 ベースのレプリケーションを使用しない外部データベースからの送信レプリケーションのみを受け入れることができることを意味します。

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

注記

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

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

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

新しいリードレプリカの GTID ベースのレプリケーションを有効にするには

  1. DB インスタンスに関連付けられたパラメータグループに次のパラメータ設定があることを確認します。

    • gtid_modeON または ON_PERMISSIVE

    • enforce_gtid_consistencyON

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

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

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

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

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

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

既存のリードレプリカの GTID ベースレプリケーションを有効にするには

  1. DB インスタンスまたはリードレプリカで RDS MySQL バージョン 5.7.22 以下を使用している場合は、DB インスタンスまたはリードレプリカをアップグレードします。RDS MySQL バージョン 5.7.23 以降の MySQL 5.7 バージョンにアップグレードします。

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

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

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

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

    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);

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

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

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

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

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

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

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

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

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

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

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

      • gtid_modeOFF

      • enforce_gtid_consistencyOFF

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