MySQL 9.0 中的群組複製使用群組通訊協定的概念,其版本可以明確管理,並設定為容納您希望群組支援的最舊 MySQL 伺服器版本。這可讓群組由使用不同 MySQL 伺服器版本的成員形成,同時確保回溯相容性。
MySQL 5.7.14 及更新版本允許訊息壓縮(請參閱 章節 20.7.4,「訊息壓縮」)。
MySQL 8.0.16 及更新版本也允許訊息分段(請參閱 章節 20.7.5,「訊息分段」)。
MySQL 8.0.27 及更新版本也允許群組通訊引擎在群組處於單主節點模式且
group_replication_paxos_single_leader
設定為 true 時,以單一共識領導者運作(請參閱 章節 20.7.3,「單一共識領導者」)。
群組的所有成員都必須使用相同的通訊協定版本,以便群組成員可以處於不同的 MySQL 伺服器版本,但只能傳送所有群組成員都能理解的訊息。
如果群組的通訊協定版本小於或等於 X,則 X 版本的 MySQL 伺服器只能加入複製群組並達到 ONLINE
狀態。當新成員加入複製群組時,它會檢查群組現有成員宣告的通訊協定版本。如果加入成員支援該版本,則它會加入群組並使用群組已宣告的通訊協定,即使成員支援其他通訊功能也是如此。如果加入成員不支援通訊協定版本,則會將其從群組中逐出。
如果兩個成員嘗試在相同的成員資格變更事件中加入,則只有在兩個成員的通訊協定版本已與群組的通訊協定版本相容時,它們才能加入。與群組具有不同通訊協定版本的成員必須隔離加入。例如
一個 MySQL 伺服器 8.0.16 執行個體可以成功加入使用通訊協定版本 5.7.24 的群組。
一個 MySQL 伺服器 5.7.24 執行個體無法成功加入使用通訊協定版本 8.0.16 的群組。
兩個 MySQL 伺服器 8.0.16 執行個體無法同時加入使用通訊協定版本 5.7.24 的群組。
兩個 MySQL 伺服器 8.0.16 執行個體可以同時加入使用通訊協定版本 8.0.16 的群組。
您可以使用 group_replication_get_communication_protocol()
函數檢查群組使用的通訊協定,該函數會傳回群組支援的最舊 MySQL 伺服器版本。群組的所有現有成員都會傳回相同的通訊協定版本。例如
SELECT group_replication_get_communication_protocol();
+------------------------------------------------+
| group_replication_get_communication_protocol() |
+------------------------------------------------+
| 8.0.16 |
+------------------------------------------------+
請注意,group_replication_get_communication_protocol()
函數會傳回群組支援的最低 MySQL 版本,這可能與傳遞至 group_replication_set_communication_protocol()
函數的版本號碼,以及從您使用該函數的成員上安裝的 MySQL 伺服器版本不同。
如果您需要變更群組的通訊協定版本,以便可以加入較早版本的成員,請使用 group_replication_set_communication_protocol()
函數指定您要允許的最舊成員的 MySQL 伺服器版本。如果可能,這會使群組回溯到相容的通訊協定版本。使用此函數需要 GROUP_REPLICATION_ADMIN
權限,而且當您發出陳述式時,所有現有群組成員都必須在線上,且沒有多數遺失。例如
SELECT group_replication_set_communication_protocol("5.7.25");
如果您將複製群組的所有成員升級到新的 MySQL 伺服器版本,則群組的通訊協定版本不會自動升級以符合。如果您不再需要支援較早版本的成員,則可以使用 group_replication_set_communication_protocol()
函數,將通訊協定版本設定為您已將成員升級到的新 MySQL 伺服器版本。例如
SELECT group_replication_set_communication_protocol("8.0.16");
group_replication_set_communication_protocol()
函數會實作為群組動作,因此它會在群組的所有成員上同時執行。群組動作會開始緩衝訊息,並等待傳送任何已在進行中的外寄訊息完成,然後變更通訊協定版本並傳送緩衝的訊息。如果您變更通訊協定版本之後,有成員嘗試加入群組,則群組成員會宣告新的通訊協定版本。
每當使用 AdminAPI 操作變更叢集拓撲時,MySQL InnoDB 叢集會自動且透明地管理其成員的通訊協定版本。InnoDB 叢集始終使用目前屬於叢集或正在加入叢集的所有執行個體所支援的最新通訊協定版本。如需詳細資訊,請參閱InnoDB 叢集和群組複寫協定。