文件首頁
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 參考手冊  /  ...  /  群組複製限制

20.3.2 群組複製限制

以下是群組複製的已知限制。請注意,針對多主模式群組描述的限制和問題,在單主模式叢集發生容錯移轉事件期間,當新選出的主要執行個體從舊的主要執行個體清除其套用程式佇列時,也可能適用。

提示

群組複製建立於以 GTID 為基礎的複製之上,因此您也應該注意 第 19.1.3.7 節「使用 GTID 複製的限制」

  • --upgrade=MINIMAL 選項。  使用 MINIMAL 選項 (--upgrade=MINIMAL) 進行 MySQL 伺服器升級後,無法啟動群組複製,因為此選項不會升級複製內部程式相依的系統表格。

  • 間隙鎖定。  群組複製的並行交易驗證程序不會將間隙鎖定納入考量,因為關於間隙鎖定的資訊在 InnoDB 之外無法取得。請參閱 間隙鎖定 以取得更多資訊。

    注意

    對於多主模式中的群組,除非您在應用程式中依賴 REPEATABLE READ 語意,否則建議您搭配群組複製使用 READ COMMITTED 隔離層級。InnoDB 不會在 READ COMMITTED 中使用間隙鎖定,這會使 InnoDB 內部的本機衝突偵測與群組複製執行的分散式衝突偵測一致。對於單主模式中的群組,只有主要執行個體會接受寫入,因此 READ COMMITTED 隔離層級對群組複製並不重要。

  • 表格鎖定與具名鎖定。  驗證程序不會將表格鎖定 (請參閱第 15.3.6 節「LOCK TABLES 和 UNLOCK TABLES 陳述式」) 或具名鎖定 (請參閱 GET_LOCK()) 納入考量。

  • 二進位記錄檔檢查碼。  MySQL 8.4 中的群組複製支援檢查碼,因此群組成員可以使用預設設定 binlog_checksum=CRC32binlog_checksum 的設定不一定要對群組的所有成員都相同。

    當檢查碼可用時,群組複製不會使用檢查碼來驗證 group_replication_applier 通道上的傳入事件,因為事件是從多個來源寫入該轉送記錄檔,並且是在實際寫入來源伺服器的二進位記錄檔之前寫入,這時才會產生檢查碼。檢查碼用於驗證 group_replication_recovery 通道和群組成員上任何其他複製通道上的事件完整性。

  • SERIALIZABLE 隔離層級。  預設情況下,多主群組不支援 SERIALIZABLE 隔離層級。將交易隔離層級設定為 SERIALIZABLE 會將群組複製設定為拒絕認可交易。

  • 並行 DDL 與 DML 操作。  當使用多主模式時,不支援對相同物件執行,但在不同伺服器上的並行資料定義陳述式和資料操作陳述式。在物件上執行資料定義語言 (DDL) 陳述式期間,在相同物件上執行並行的資料操作語言 (DML),但在不同的伺服器執行個體上執行時,會有在不同執行個體上執行的衝突 DDL 未被偵測到的風險。

  • 具有串聯限制的外來索引鍵。  多主模式群組 (所有成員都設定為 group_replication_single_primary_mode=OFF) 不支援具有多層外來索引鍵相依性的表格,特別是具有已定義 CASCADING 外來索引鍵限制的表格。這是因為多主模式群組執行的串聯操作所導致的外來索引鍵限制可能會導致未被偵測到的衝突,並導致群組成員之間的資料不一致。因此,我們建議在多主模式群組中使用的伺服器執行個體上設定 group_replication_enforce_update_everywhere_checks=ON,以避免未偵測到的衝突。

    在單主模式中,這不是問題,因為它不允許同時寫入群組的多個成員,因此沒有未偵測到衝突的風險。

  • 多主模式的死鎖。當群組以多主模式運作時,SELECT .. FOR UPDATE 陳述式可能會導致死鎖。這是因為鎖定並未在群組的成員之間共享,因此這類陳述式的預期結果可能無法實現。

  • 複寫篩選器。全域複寫篩選器無法用於設定為群組複寫的 MySQL 伺服器實例,因為在某些伺服器上篩選交易會導致群組無法就一致狀態達成共識。通道特定的複寫篩選器可以用於非直接參與群組複寫的複寫通道,例如群組成員也充當群組外部來源的複本時。它們不能用於 group_replication_appliergroup_replication_recovery 通道。

  • 加密連線。如果使用 OpenSSL 1.1.1 或更高版本編譯,MySQL 中可以使用 TLSv1.3 協定的支援。群組複寫支援 TLSv1.3,可用於群組通訊連線和分散式復原連線。

    group_replication_recovery_tls_versiongroup_replication_recovery_tls_ciphersuites 可用於設定客戶端對任何加密套件選擇的支援,包括僅在需要時使用非預設的加密套件。請參閱第 8.3.2 節,「加密連線 TLS 協定和加密方式」

  • 複製操作。群組複寫會啟動和管理分散式復原的複製操作,但設定為支援複製的群組成員也可以參與使用者手動啟動的複製操作。如果操作涉及正在執行群組複寫的群組成員,您可以手動啟動複製操作,前提是複製操作不會移除並取代接收方上的資料。因此,如果正在執行群組複寫,則啟動複製操作的陳述式必須包含 DATA DIRECTORY 子句。請參閱第 20.5.4.2.4 節,「其他用途的複製」

群組大小的限制

單一複寫群組中可包含的 MySQL 伺服器最大數量為 9 個。如果其他成員嘗試加入群組,其請求會被拒絕。此限制是透過測試和基準測試識別出的安全界限,在此界限內,群組可以在穩定的區域網路中可靠地執行。

交易大小的限制

如果單一交易產生的訊息內容過大,導致訊息無法在 5 秒的時間範圍內透過網路在群組成員之間複製,則成員可能會被懷疑為失敗,然後被驅逐,僅僅因為它們忙於處理交易。大型交易也可能因為記憶體配置問題而導致系統速度變慢。為了避免這些問題,請使用以下緩解措施

最大交易大小、訊息壓縮和訊息分割都可以透過為相關系統變數指定零值來停用。如果您已停用所有這些安全措施,則複寫群組成員的套用程式執行緒可以處理的訊息上限大小是成員的 replica_max_allowed_packet 系統變數的值,該變數的預設值和最大值為 1073741824 位元組 (1 GB)。當接收成員嘗試處理訊息時,如果訊息超過此限制,則會失敗。群組成員可以產生並嘗試傳輸至群組的訊息上限大小為 4294967295 位元組 (約 4 GB)。這是群組複寫 (XCom,Paxos 變體) 的群組通訊引擎接受的封包大小的硬性限制,該引擎會在 GCS 處理訊息後接收訊息。當原始成員嘗試廣播訊息時,如果訊息超過此限制,則會失敗。