

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 為 RDS for MySQL 的現有僅供讀取複本啟用 GTID 式複寫
<a name="mysql-replication-gtid.configuring-existing-read-replicas"></a>

如果現有的 MySQL 資料庫執行個體具備僅供讀取複本，且並未使用 GTID 式複寫，則您可設定資料庫執行個體和僅供讀取複本間的 GTID 式複寫。

**為現有的僅供讀取複本啟用 GTID 式複寫**

1. 如果資料庫執行個體或任何僅供讀取複本正在使用低於 8.0.26 版的 RDS for MySQL 8.0 版，請將資料庫執行個體或僅供讀取複本升級為 8.0.26 版或更新的 MySQL 8.0 版本。所有 RDS for MySQL 8.4 版和 5.7 版都支援 GTID 式複寫。

   如需詳細資訊，請參閱[RDS for MySQL 資料庫引擎的升級](USER_UpgradeDBInstance.MySQL.md)。

1. (選用) 重設 GTID 參數，並測試資料庫執行個體和僅供讀取複本的行為：

   1. 確定與資料庫執行個體和每個僅供讀取複本相關聯的參數群組有設定為 `enforce_gtid_consistency` 的 `WARN` 參數。

      如需使用參數群組設定組態參數的詳細資訊，請參閱[Amazon RDS 的參數群組](USER_WorkingWithParamGroups.md)。

   1. 如果已變更資料庫執行個體的參數群組，請重新啟動資料庫執行個體。如果已變更僅供讀取複本的參數群組，請重新啟動僅供讀取複本。

      如需詳細資訊，請參閱 [在資料庫執行個體](USER_RebootInstance.md)。

   1. 對於一般的工作負載執行資料庫執行個體和僅供讀取複本，並監視日誌檔案。

      如果您看見 GTID 不相容交易的警告，請調整應用程式，以便僅使用 GTID 相容功能。確定資料庫執行個體未產生與 GTID 不相容交易的任何警告，再進行下一個步驟。

1. 對於允許匿名交易的 GTID 式複寫重設 GTID 參數，直到僅供讀取複本處理全部的參數為止。

   1. 確定與資料庫執行個體有關的參數群組和每個僅供讀取複本有下列參數設定：
      + `gtid_mode` – `ON_PERMISSIVE`
      + `enforce_gtid_consistency` – `ON`

   1. 如果已變更資料庫執行個體的參數群組，請重新啟動資料庫執行個體。如果已變更僅供讀取複本的參數群組，請重新啟動僅供讀取複本。

1. 等候全部的匿名交易完成複寫。若要檢查這些是否已複寫，請執行下列動作：

   1. 對於來源資料庫執行個體執行下列陳述式。

      **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. 確定與資料庫執行個體有關的參數群組和每個僅供讀取複本有下列參數設定：
      + `gtid_mode` – `ON`
      + `enforce_gtid_consistency` – `ON`

   1. 重新啟動資料庫執行個體和每個僅供讀取複本。

1. 在每個僅供讀取複本上，執行下列程序。

   **MySQL 8.4 和更新的主要版本**

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

   **MySQL 8.0 和更低的主要版本**

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