文件首頁
MySQL 8.4 參考手冊
相關文件 下載本手冊
PDF (美式信紙) - 39.9Mb
PDF (A4) - 40.0Mb
Man Pages (TGZ) - 258.5Kb
Man Pages (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


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

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

您可以設定複製通道,將 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 會指派一個包含指定 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 的通道和不使用此設定的通道。特定於群組複寫的通道不能使用 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_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 是什麼,以及它是複本伺服器的 UUID (LOCAL) 還是使用者指定的 UUID (UUID)。資訊也會記錄在套用程式中繼資料儲存庫中。RESET REPLICA ALL 陳述式會重設 ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS 設定,但 RESET REPLICA 陳述式則不會。