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


19.1.4.1 複製模式概念

在設定線上伺服器的複製模式之前,務必了解一些複製的關鍵概念。本節說明這些概念,在嘗試修改線上伺服器的複製模式之前,這是必要的閱讀。

MySQL 中可用的複製模式依賴不同的技術來識別已記錄的交易。複製使用的交易類型在此處列出

  • GTID 交易由全域交易識別碼 (GTID) 識別,該識別碼採用兩種形式之一:UUID:NUMBERUUID:TAG:NUMBER。二進位日誌中的每個 GTID 交易之前都有一個 Gtid_log_event。GTID 交易可以透過其 GTID 或透過記錄該交易的檔案名稱及其在該檔案中的位置來定址。

  • 匿名交易沒有 GTID;MySQL 8.4 確保日誌中的每個匿名交易之前都有一個 Anonymous_gtid_log_event。(在舊版的 MySQL 中,匿名交易之前沒有任何特定事件。)匿名交易只能透過檔案名稱和位置來定址。

當使用 GTID 時,您可以利用 GTID 自動定位和自動容錯移轉,並使用 WAIT_FOR_EXECUTED_GTID_SET()session_track_gtids 和 Performance Schema 表格來監控複製的交易(請參閱第 29.12.11 節,「Performance Schema 複製表格」)。

來自執行舊版 MySQL 的來源的中繼日誌中的交易可能沒有任何特定事件,但在副本的二進位日誌中重新執行並記錄後,它會以 Anonymous_gtid_log_event 作為前導。

若要線上變更複製模式,必須使用具有足夠權限設定全域系統變數的帳戶來設定 gtid_modeenforce_gtid_consistency 變數;請參閱第 7.1.9.1 節「系統變數權限」。這裡依序列出 gtid_mode 的允許值,以及它們的意義:

  • OFF:僅可以複製匿名交易。

  • OFF_PERMISSIVE:新的交易是匿名的;複製的交易可能是 GTID 或匿名的。

  • ON_PERMISSIVE:新的交易使用 GTID;複製的交易可能是 GTID 或匿名的。

  • ON:所有交易都必須有 GTID;不能複製匿名交易。

在同一個複製拓撲中,有可能有使用匿名交易的伺服器和使用 GTID 交易的伺服器。例如,gtid_mode=ON 的來源可以複製到 gtid_mode=ON_PERMISSIVE 的複本。

從使用 gtid_mode=ON 的來源進行複製,可以利用 GTID 自動定位,使用 SOURCE_AUTO_POSITION 選項來設定 CHANGE REPLICATION SOURCE TO 陳述式。正在使用的複製拓撲會影響是否可以啟用自動定位,因為此功能依賴 GTID,且與匿名交易不相容。強烈建議在啟用自動定位之前,確保拓撲中沒有剩餘的匿名交易;請參閱第 19.1.4.2 節「線上啟用 GTID 交易」

下表顯示來源和複本上 gtid_mode 和自動定位的有效組合。每個條目的意義如下:

  • Y:來源和複本上的 gtid_mode 值是相容的。

  • N:來源和複本上的 gtid_mode 值是不相容的。

  • *:自動定位可以與此值組合一起使用。

表 19.1 來源和複本 gtid_mode 的有效組合

gtid_mode

來源 OFF

來源 OFF_PERMISSIVE

來源 ON_PERMISSIVE

來源 ON

複本 OFF

Y

Y

N

N

複本 OFF_PERMISSIVE

Y

Y

Y

Y*

複本 ON_PERMISSIVE

Y

Y

Y

Y*

複本 ON

N

N

Y

Y*


gtid_mode 的目前值也會影響 gtid_next。下表顯示伺服器在 gtid_modegtid_next 不同值組合下的行為。每個條目的意義如下:

  • ANONYMOUS:產生匿名交易。

  • Error:產生錯誤,且不執行 SET GTID_NEXT

  • UUID:NUMBER:產生具有指定 UUID:NUMBER 的 GTID。

  • UUID:TAG:NUMBER:產生具有指定 UUID:TAG:NUMBER 的 GTID。

  • New GTID:產生具有自動產生數字的 GTID。

表 19.2 gtid_mode 和 gtid_next 的有效組合

gtid_next = AUTOMATIC (二進位日誌開啟) gtid_next = AUTOMATIC (二進位日誌關閉) gtid_next = AUTOMATIC:<TAG> gtid_next = ANONYMOUS gtid_next = <UUID>:<NUMBER> gtid_next = <UUID>:<TAG>:<NUMBER>
gtid_mode = OFF ANONYMOUS ANONYMOUS Error ANONYMOUS Error Error
gtid_mode = OFF_PERMISSIVE ANONYMOUS ANONYMOUS Error ANONYMOUS ANONYMOUS Error
gtid_mode = ON_PERMISSIVE New GTID ANONYMOUS New GTID ANONYMOUS ANONYMOUS Error
gtid_mode = ON New GTID ANONYMOUS New GTID Error ANONYMOUS Error

當未使用二進位日誌,且 gtid_nextAUTOMATIC 時,不會產生 GTID。