文件首頁
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


MySQL 8.4 參考手冊  /  ...  /  設定群組的通訊協定版本

20.5.1.4 設定群組的通訊協定版本

MySQL 8.4 中的群組複製使用群組通訊協定的概念,其版本可以明確管理,並設定為符合您希望群組支援的最舊 MySQL Server 版本。這讓群組能夠由使用不同 MySQL Server 版本的成員組成,同時確保向後相容性。

群組的所有成員都必須使用相同的通訊協定版本,如此群組成員可以處於不同的 MySQL Server 版本,但只傳送可以被所有群組成員理解的訊息。

如果群組的通訊協定版本小於或等於 X,則 X 版本的 MySQL 伺服器才能加入並在複寫群組中達到 ONLINE 狀態。當新成員加入複寫群組時,它會檢查群組現有成員宣告的通訊協定版本。如果加入的成員支援該版本,它會加入群組並使用群組宣告的通訊協定,即使該成員支援其他通訊功能也是如此。如果加入的成員不支援通訊協定版本,它會被逐出群組。

如果兩個成員嘗試在同一個成員資格變更事件中加入,則只有在兩個成員的通訊協定版本都已與群組的通訊協定版本相容時,它們才能加入。通訊協定版本與群組不同的成員必須隔離加入。例如

  • 一個 MySQL Server 8.0.16 執行個體可以成功加入使用通訊協定版本 5.7.24 的群組。

  • 一個 MySQL Server 5.7.24 執行個體無法成功加入使用通訊協定版本 8.0.16 的群組。

  • 兩個 MySQL Server 8.0.16 執行個體無法同時加入使用通訊協定版本 5.7.24 的群組。

  • 兩個 MySQL Server 8.0.16 執行個體可以同時加入使用通訊協定版本 8.0.16 的群組。

您可以使用 group_replication_get_communication_protocol() 函數檢查群組正在使用的通訊協定,此函數會傳回群組支援的最舊 MySQL Server 版本。群組的所有現有成員都會傳回相同的通訊協定版本。例如

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 Server 版本不同。

如果您需要變更群組的通訊協定版本,以便較早版本的成員可以加入,請使用 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 叢集和群組複寫協定