您可以設定複製通道,將 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 的 GTID,例如複製來源伺服器的 uuid
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_FILE
和SOURCE_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_GTIDS
和UNTIL_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
陳述式不會。