

# RDS for MySQL の既存のリードレプリカの GTID ベースのレプリケーションを有効にする
<a name="mysql-replication-gtid.configuring-existing-read-replicas"></a>

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 8.4 バージョンおよび 5.7 バージョンで GTID ベースのレプリケーションをサポートしています。

   詳細については、「[RDS for MySQL DB エンジンのアップグレード](USER_UpgradeDBInstance.MySQL.md)」を参照してください。

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

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

      パラメータグループを使用して設定パラメータの設定の詳細については、「[Amazon RDS のパラメータグループ](USER_WorkingWithParamGroups.md)」を参照してください。

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

      詳細については、「[ DB インスタンスの再起動](USER_RebootInstance.md)」を参照してください。

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

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

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

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

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

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

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

      **MySQL 8.4**

      ```
      SHOW BINARY LOG STATUS;
      ```

      **MySQL 5.7 および 8.0**

      ```
      SHOW MASTER STATUS;
      ```

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

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

      ```
      SELECT MASTER_POS_WAIT('file', position);
      ```

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

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

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

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

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

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

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

   **MySQL 8.4 以降のメジャーバージョン**

   ```
   CALL mysql.rds_set_source_auto_position(1);
   ```

   **MySQL 8.0 以前のメジャーバージョン**

   ```
   CALL mysql.rds_set_master_auto_position(1);
   ```