文件首頁
MySQL 9.0 參考手冊
相關文件 下載本手冊
PDF (美式信紙) - 40.0Mb
PDF (A4) - 40.1Mb
Man Pages (TGZ) - 258.2Kb
Man Pages (Zip) - 365.3Kb
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 9.0 確保日誌中的每個匿名交易之前都有一個 Anonymous_gtid_log_event。(在舊版本的 MySQL 中,匿名交易之前沒有任何特定的事件。)匿名交易只能透過檔案名稱和位置來定址。

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

來自執行舊版 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 自動定位,並使用 CHANGE REPLICATION SOURCE TO 陳述式的 SOURCE_AUTO_POSITION 選項進行設定。使用中的複寫拓撲會影響是否可以啟用自動定位,因為此功能依賴 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 錯誤 ANONYMOUS 錯誤 錯誤
gtid_mode = OFF_PERMISSIVE ANONYMOUS ANONYMOUS 錯誤 ANONYMOUS <UUID>:<NUMBER> <UUID>:<TAG>:<NUMBER>
gtid_mode = ON_PERMISSIVE 新的 GTID ANONYMOUS 新的 GTID ANONYMOUS <UUID>:<NUMBER> <UUID>:<TAG>:<NUMBER>
gtid_mode = ON 新的 GTID ANONYMOUS 新的 GTID 錯誤 <UUID>:<NUMBER> <UUID>:<TAG>:<NUMBER>

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