您可以設定複製通道,將 GTID 指派給尚未具有 GTID 的已複製交易。此功能可讓您從未啟用 GTID 且不使用基於 GTID 的複製的來源伺服器,複製到已啟用 GTID 的副本。如果可以如章節 19.1.4,「在線上伺服器上變更 GTID 模式」中所述,在複製來源伺服器上啟用 GTID,請改用該方法。此功能專為無法在上面啟用 GTID 的複製來源伺服器所設計。請注意,如同 MySQL 複製的標準做法,此功能不支援從早於前一個版本系列的 MySQL 來源伺服器進行複製,因此 MySQL 8.3 是 MySQL 8.4 副本所支援的最早來源。
您可以使用 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
的通道和不使用此設定的通道。特定於群組複寫的通道不能使用 ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS
,但在作為群組複寫群組成員的伺服器執行個體上,用於其他來源的非同步複寫通道則可以這樣做。對於群組複寫群組成員上的通道,請勿指定群組複寫群組名稱作為建立 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 是什麼,以及它是複本伺服器的 UUID (LOCAL
) 還是使用者指定的 UUID (UUID
)。資訊也會記錄在套用程式中繼資料儲存庫中。RESET REPLICA ALL
陳述式會重設 ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS
設定,但 RESET REPLICA
陳述式則不會。