對 Amazon Aurora MySQL 使用 GTID 式複寫 - Amazon Aurora

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

Amazon Aurora MySQL 使用 GTID 式複寫

接下來,您可以了解如何在 Aurora MySQL 叢集和外部來源間搭配使用全域交易識別符 (GTID) 與二進位日誌 (binlog) 複寫。

注意

若為 Aurora,您僅可對會在外部 MySQL 資料庫間進行 binlog 複寫的 Aurora MySQL 叢集使用這項功能。其他資料庫可能是 Amazon RDS MySQL 執行個體、內部部署的 MySQL 資料庫,或是位於不同 AWS 區域 中的 Aurora 資料庫叢集。若要了解如何設定該類型的複寫作業,請參閱Aurora 與 MySQL 之間或 Aurora 與另一個 Aurora 資料庫叢集之間的複寫 (二進位複寫)

如果您是使用 binlog 複寫,且不熟悉如何在 MySQL 使用 GTID 式複寫,則可參閱 MySQL 背景文件中的使用全域交易識別符的複寫

Aurora MySQL 第 2 版和第 3 版不支援 GTID 型複寫。

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

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

注意

當 Aurora 在叢集中的資料庫執行個體間同步資料時,該複寫機制並不會用到二進位日誌 (binlog)。在 Aurora MySQL 中,唯有您同時使用 binlog 複寫功能來複寫資料至外部 MySQL 相容資料庫的 Aurora MySQL 資料庫叢集,或從中複寫資料的情況下,才能套用 GTID 式複寫。

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

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

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

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

一般而言,當您從外部 MySQL 相容資料庫複寫至 Aurora 叢集時,即可對 Aurora 叢集使用 GTID 式複寫。您可以設定這個複寫組態,將其做為從現場部署資料庫或 Amazon RDS 資料庫到 Aurora MySQL 遷移流程的一部分。如果外部資料庫已使用 GTID,則可為 Aurora 叢集啟用 GTID 式複寫功能,藉此簡化複寫程序。

若要為 Aurora MySQL 叢集設定 GTID 式複寫,您首先要在資料庫叢集參數群組中設定相關的組態參數。接著,請建立該參數群組與叢集間的關聯。

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 式複寫時,您可以使用下列設定來配置 Aurora MySQL 資料庫叢集的資料庫叢集參數群組:

  • ONON_PERMISSIVE 僅適用於從 Aurora MySQL 叢集進行的傳出複寫作業。這兩個值都會導致 Aurora 資料庫叢集使用 GTID 來執行複寫至外部資料庫的交易。如果設定 ON,外部資料庫需同時使用 GTID 式複寫。如果設定 ON_PERMISSIVE,則外部資料庫不一定要使用 GTID 式複寫。

  • 若設定 OFF_PERMISSIVE,表示 Aurora 資料庫叢集可接受來自外部資料庫的傳入複寫作業。無論外部資料庫是否使用 GTID 式複寫,此值都能實現這項功能。

  • 若設定 OFF,表示唯有在外部資料庫未使用 GTID 式複寫的情況下,Aurora 資料庫叢集才能接受來自該資料庫的傳入複寫作業。

提示

傳入複寫是 Aurora MySQL 叢集最常見的 binlog 複寫案例。如果要進行傳入複寫,建議您將 GTID 模式設定為 OFF_PERMISSIVE。該設定可允許來自外部資料庫的傳入複寫作業,不管複寫來源的 GTID 設定為何都是如此。

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

為 Aurora MySQL 叢集設定 GTID 式複寫。

當 Aurora MySQL 資料庫叢集的 GTID 式複寫處於啟用狀態時,即可將 GTID 設定套用至傳入和傳出 binlog 複寫作業。

為 Aurora MySQL 叢集啟用 GTID 式複寫
  1. 使用以下參數設定來建立或編輯資料庫叢集參數群組:

    • gtid_modeONON_PERMISSIVE

    • enforce_gtid_consistencyON

  2. 建立該資料庫叢集參數群組與 Aurora MySQL 叢集間的關聯。若要執行此作業,請遵循使用參數群組中的程序。

  3. (選用) 指定如何將 GTID 指派給不包含 GTID 的交易。若要這樣做,請呼叫 mysql.rds_assign_gtids_to_anonymous_transactions (Aurora MySQL 第 3 版) 中的預存程序。

Aurora MySQL 資料庫叢集停用 GTID 式複寫

您可以為 Aurora MySQL 資料庫叢集停用 GTID 式複寫。如此一來,Aurora 叢集就無法透過採用 GTID 式複寫的外部資料庫執行傳入或傳出 binlog 複寫作業。

注意

在下列程序中,「僅供讀取複本」指的是 Aurora 組態中的複寫目標,其會在外部資料庫間進行 binlog 複寫。僅供讀取複本並不是指唯讀 Aurora 複本資料庫執行個體。舉例來說,Aurora 叢集接受來自外部來源的傳入複寫作業時,Aurora 主要執行個體會以僅供讀取複本運作,供 binlog 複寫。

如需本節中提及的預存程序詳細資訊,請參閱 Aurora MySQL 預存程序

Aurora MySQL 資料庫叢集停用 GTID 式複寫
  1. 在 Aurora 主要執行個體上,執行下列程序。

    CALL mysql.rds_set_master_auto_position(0); (Aurora MySQL version 2) CALL mysql.rds_set_source_auto_position(0); (Aurora MySQL version 3)
  2. gtid_mode 重設為 ON_PERMISSIVE

    1. 確定與 Aurora MySQL 叢集相關聯的資料庫叢集參數群組有設定為 gtid_modeON_PERMISSIVE

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

    2. 重新啟動 Aurora MySQL 資料庫叢集。

  3. gtid_mode 重設為 OFF_PERMISSIVE

    1. 確定與 Aurora MySQL 叢集相關聯的資料庫叢集參數群組有設定為 gtid_modeOFF_PERMISSIVE

    2. 重新啟動 Aurora MySQL 資料庫叢集。

    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 叢集相關聯的資料庫叢集參數群組有下列參數設定:

      • gtid_modeOFF

      • enforce_gtid_consistencyOFF

    2. 重新啟動 Aurora MySQL 資料庫叢集。