文件首頁
MySQL 9.0 參考手冊
相關文件 下載本手冊
PDF (美式 Letter) - 40.0Mb
PDF (A4) - 40.1Mb
Man Pages (TGZ) - 258.2Kb
Man Pages (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 9.0 參考手冊  /  ...  /  從沒有 GTID 的來源複製到有 GTID 的副本

19.1.3.6 從沒有 GTID 的來源複製到有 GTID 的副本

您可以設定複製通道,將 GTID 指派給尚未具有 GTID 的複製交易。此功能可讓您從未啟用 GTID 且未使用基於 GTID 的複製的來源伺服器,複製到已啟用 GTID 的副本。如果有可能在複製來源伺服器上啟用 GTID,如第 19.1.4 節,「在線上伺服器上變更 GTID 模式」中所述,請改用該方法。此功能是為無法啟用 GTID 的複製來源伺服器設計的。請注意,根據 MySQL 複製的標準,此功能不支援從早於上一個發行系列的 MySQL 來源伺服器進行複製,因此 MySQL 8.4 是 MySQL 9.0 副本的最早支援來源。

您可以使用 CHANGE REPLICATION SOURCE TO 陳述式的 ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS 選項,在複製通道上啟用 GTID 指派。LOCAL 指派一個包含副本自身 UUID ( server_uuid 設定) 的 GTID。 uuid 指派一個包含指定 UUID 的 GTID,例如複製來源伺服器的 server_uuid 設定。使用非本機 UUID 可讓您區分源自副本的交易和源自來源的交易,以及多來源副本上,源自不同來源的交易。如果來源傳送的任何交易已經具有 GTID,則會保留該 GTID。

重要事項

在任何通道上設定 ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS 的副本,在需要容錯移轉時,無法升級以取代複製來源伺服器,且從該副本取得的備份無法用於還原複製來源伺服器。相同的限制適用於取代或還原在任何通道上使用 ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS 的其他副本。

複本必須設定 gtid_mode=ON,而且之後不能變更,除非您設定 ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS=OFF。如果複本伺服器在未啟用 GTID 的情況下啟動,並且為任何複寫通道設定了 ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS,則設定不會變更,但會將警告訊息寫入錯誤日誌,說明如何變更情況。

對於多來源複本,您可以混合使用使用 ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS 的通道,以及不使用的通道。特定於 Group Replication 的通道無法使用 ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS,但是對於身為 Group Replication 群組成員的伺服器實例上另一個來源的非同步複寫通道可以這樣做。對於 Group Replication 群組成員上的通道,請勿將 Group Replication 群組名稱指定為建立 GTID 的 UUID。

在複寫通道上使用 ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS 與為通道引入基於 GTID 的複寫並不相同。從使用 ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS 設定的複本建立的 GTID 集 (gtid_executed) 不應傳輸到另一個伺服器,或與另一個伺服器的 gtid_executed 集進行比較。分配給匿名交易的 GTID,以及您為它們選擇的 UUID,僅對該複本自己的使用具有意義。此例外的狀況是任何啟用 ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS 的複本的下游複本,以及從該複本的備份建立的任何伺服器。

如果您設定任何下游複本,這些伺服器不會啟用 ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS。只有直接從非 GTID 來源伺服器接收交易的複本才需要在相關的複寫通道上設定 ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS。在該複本及其下游複本之間,您可以比較 GTID 集、從一個複本容錯移轉到另一個複本,並使用備份來建立其他複本,就像在任何基於 GTID 的複寫拓樸中一樣。ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS 用於從此群組外部的非 GTID 伺服器接收交易的情況。

使用 ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS 的複寫通道,與基於 GTID 的複寫有以下行為差異:

  • 當複製的交易被套用時,會將 GTID 分配給它們(除非它們已經有 GTID)。通常會在複寫來源伺服器上提交交易時分配 GTID,並與交易一起傳送到複本。在多執行緒複本上,這表示 GTID 的順序不一定與交易的順序匹配,即使 replica_preserve_commit_order = 1。

  • CHANGE REPLICATION SOURCE TO 陳述式的 SOURCE_LOG_FILESOURCE_LOG_POS 選項用於定位複寫 I/O (接收器) 執行緒,而不是 SOURCE_AUTO_POSITION 選項。

  • SET GLOBAL sql_replica_skip_counter 陳述式用於跳過使用 ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS 設定的複寫通道上的交易,而不是提交空交易的方法。有關說明,請參閱第 19.1.7.3 節「跳過交易」

  • START REPLICA 陳述式的 UNTIL SQL_BEFORE_GTIDSUNTIL_SQL_AFTER_GTIDS 選項不能用於該通道。

  • 函式 WAIT_FOR_EXECUTED_GTID_SET() 可跨伺服器運作,並且可用於等待任何已啟用 ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS 的伺服器的下游複本。若要等待已啟用 ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS 的通道趕上不使用 GTID 的來源,請使用 SOURCE_POS_WAIT() 函式。

效能結構描述的 replication_applier_configuration 表格會顯示是否在複寫通道上將 GTID 分配給匿名交易,以及 UUID 是什麼,以及它是複本伺服器 (LOCAL) 的 UUID 還是使用者指定的 UUID (UUID)。此資訊也會記錄在套用程式中繼資料存放庫中。RESET REPLICA ALL 陳述式會重設 ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS 設定,但 RESET REPLICA 陳述式不會。