使用 GTID 式複寫 - Amazon Relational Database Service

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

使用 GTID 式複寫

以下內容說明如何在 Amazon RDS for MySQL 資料庫執行個體之間使用全域交易識別碼 (GTID) 搭配二進位日誌 (binlog) 複寫。

如果您使用 binlog 複寫,而且不熟悉 MySQL 以 GTID 為基礎的複寫,請參閱 MySQL 文件中的使用全域交易識別碼進行複寫

所有 RDS for MySQL 5.7 版,以及 RDS for MySQL 8.0.26 版和更新的 8.0 版本都支援 GTID 式複寫。複寫組態中的所有 MySQL 資料庫執行個體都必須符合此要求。

全域交易識別符 (GTID) 的概觀

「全域交易識別符 (GTID)」是系統為遞交的 MySQL 交易所產生的唯一識別符。GTID 能讓 binlog 複寫的操作更簡單,也更容易進行故障診斷。

進行 binlog 複寫作業時,MySQL 會使用兩種不同類型的交易:

  • GTID 交易 – 透過 GTID 識別的交易。

  • 匿名交易 – 未指派 GTID 的交易。

在複寫組態中,全部的資料庫執行個體都有各自不同的 GTID。GTID 可簡化複寫組態,因為使用時不需要參照日誌檔案位置。GTID 也使得追蹤複寫的交易更容易,而且可決定來源執行個體和複本是否一致。

您可使用 GTID 式複寫來複寫 RDS for MySQL 僅供讀取複本的資料。您可在建立新的僅供讀取複本時設定 GTID 式複寫,也可轉換現有的僅供讀取複本以使用 GTID 式複寫。

如果是 RDS for MySQL,您也可以在延遲的複寫組態中使用 GTID 式複寫。如需詳細資訊,請參閱 透過 MySQL 設定延遲複寫

GTID 式複寫的參數

使用以下參數來設定 GTID 式複寫。

參數 有效值 描述

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 式複寫時,您可以使用下列設定來配置資料庫執行個體或僅供讀取複本的參數群組:

  • ONON_PERMISSIVE 僅適用於從 RDS 資料庫執行個體的傳出複寫作業。這兩個值都會導致 RDS 資料庫執行個體使用 GTID 以供複寫的交易使用。ON 要求目標資料庫也使用 GTID 式複寫。ON_PERMISSIVE 使 GTID 式複寫可在目標資料庫上選用。

  • 若設定 OFF_PERMISSIVE,表示 RDS 資料庫執行個體可接受來源資料庫的傳入複寫作業。無論來源資料庫是否使用 GTID 式複寫,皆可進行。

  • 若設定 OFF,表示唯有來源資料庫未使用 GTID 式複寫的情況下,RDS 資料庫執行個體才能接受來自該資料庫的傳入複寫作業。

如需參數群組的詳細資訊,請參閱使用參數群組

為新的僅供讀取複本設定 GTID 式複寫

當 RDS for MySQL 資料庫執行個體的 GTID 式複寫處於啟用狀態時,系統會自動為資料庫執行個體的僅供讀取複本設定 GTID 式複寫。

為新的僅供讀取複本啟用 GTID 式複寫
  1. 確定與資料庫執行個體有關的參數群組有下列參數設定:

    • gtid_modeONON_PERMISSIVE

    • enforce_gtid_consistencyON

    如需使用參數群組設定組態參數的詳細資訊,請參閱使用參數群組

  2. 如果已變更資料庫執行個體的參數群組,請重新啟動資料庫執行個體。如需如何進行的詳細資訊,請參閱 重新啟動中的資料庫執行個體

  3. 建立資料庫執行個體的一個或多個僅供讀取複本。如需如何進行的詳細資訊,請參閱 建立僅供讀取複本

Amazon RDS嘗試使用 MASTER_AUTO_POSITION,在 MySQL 資料庫執行個體與僅供讀取複本之間建立 GTID 式複寫。如果嘗試失敗,Amazon RDS 會使用日誌檔案位置進行僅供讀取複本的複寫。如需 MASTER_AUTO_POSITION 的詳細資訊,請參閱 GTID 自動定位功能

為現有的僅供讀取複本設定 GTID 式複寫

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

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

    如需詳細資訊,請參閱 升級 MySQL 資料庫引擎

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

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

      如需使用參數群組設定組態參數的詳細資訊,請參閱使用參數群組

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

      如需更多詳細資訊,請參閱 重新啟動中的資料庫執行個體

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

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

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

    1. 確定與資料庫執行個體有關的參數群組和每個僅供讀取複本有下列參數設定:

      • gtid_modeON_PERMISSIVE

      • enforce_gtid_consistencyON

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

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

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

      SHOW MASTER STATUS;

      請注意 FilePosition 欄中的值。

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

      • gtid_modeON

      • enforce_gtid_consistencyON

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

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

    CALL mysql.rds_set_master_auto_position(1);

具備僅供讀取複本的 MySQL 資料庫執行個體停用 GTID 式複寫

您可以為 具備僅供讀取複本的 MySQL 資料庫執行個體停用 GTID 式複寫。

具備僅供讀取複本的 MySQL 資料庫執行個體停用 GTID 式複寫
  1. 在每個僅供讀取複本上,執行下列程序:

    CALL mysql.rds_set_master_auto_position(0);
  2. gtid_mode 重設為 ON_PERMISSIVE

    1. 確定與 MySQL 資料庫執行個體和每個僅供讀取複本關聯的參數群組將 gtid_mode 設定為 ON_PERMISSIVE

      如需使用參數群組設定組態參數的詳細資訊,請參閱使用參數群組

    2. 重新啟動 MySQL 資料庫執行個體和每個僅供讀取複本。如需重新啟動的詳細資訊,請參閱重新啟動中的資料庫執行個體

  3. gtid_mode 重設為 OFF_PERMISSIVE

    1. 確定與 MySQL 資料庫執行個體和每個僅供讀取複本關聯的參數群組將 gtid_mode 設定為 OFF_PERMISSIVE

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

  4. 等待系統將全部的 GTID 交易套用至所有僅供讀取複本。要檢查這些是否應用,請執行以下步驟:

    1. MySQL 資料庫 執行個體上,執行 SHOW MASTER STATUS 命令。

      您的輸出應類似於以下輸出。

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

      請注意輸出中的檔案和位置。

    2. 在每個僅供讀取複本上,使用其來源執行個體的檔案和位置資訊,在上一個步驟中執行下列查詢:

      適用於 MySQL 8.0.26 及更高版本

      SELECT SOURCE_POS_WAIT('file', position);

      對於 MySQL 5.7 版本

      SELECT MASTER_POS_WAIT('file', position);

      例如,如果檔案名稱為mysql-bin-changelog.000031且位置為107,請執行下列陳述式:

      適用於 MySQL 8.0.26 及更高版本

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

      對於 MySQL 5.7 版本

      SELECT MASTER_POS_WAIT('mysql-bin-changelog.000031', 107);
  5. 重設 GTID 參數以停用以 GTID 為基礎的複寫。

    1. 確定與 MySQL 資料庫執行個體有關的參數群組和每個僅供讀取複本有下列參數設定:

      • gtid_modeOFF

      • enforce_gtid_consistencyOFF

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