从MySQL 8.0.16开始,组复制有了组通信协议的概念。可以显式地管理组复制通信协议版本,并将其设置为适应希望组支持的最老的MySQL Server版本。这使得不同MySQL Server版本的成员可以组成组,同时确保向后兼容。MySQL 5.7.14的版本允许消息压缩,MySQL 8.0.16的版本还允许消息碎片化。组的所有成员必须使用相同的通信协议版本,这样组成员可以使用不同的MySQL Server版本,但只发送所有组成员都能理解的消息。
版本X的MySQL服务器只能加入和到达在线
当有新成员加入复制组时,复制组将检查现有成员发布的通信协议版本。如果加入的成员支持该版本,则它将加入该组并使用该组已宣布的通信协议,即使该成员支持额外的通信功能。如果加入的成员不支持该通信协议版本,将被逐出组。
如果两个成员试图在同一成员变更事件中加入,则只有当两个成员的通信协议版本已经与组的通信协议版本兼容时,他们才能加入。组中具有不同通信协议版本的成员必须以隔离方式加入。例如:
一个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版本。该组的所有现有成员返回相同的通信协议版本。例如:
选择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
使用此功能需要特权,并且在发布声明时,所有现有的组成员必须在线,不损失多数。例如:
选择group_replication_set_communication_protocol(“5.7.25”);
如果将复制组的所有成员升级到新的MySQL Server版本,则组的通信协议版本不会自动升级到匹配。如果您不再需要在早期版本中支持成员,则可以使用group_replication_set_communication_protocol ()
函数,将通信协议版本设置为已升级成员的新MySQL Server版本。例如:
选择group_replication_set_communication_protocol(“8.0.16”);
的group_replication_set_communication_protocol ()
函数作为组操作实现,因此它将同时在组的所有成员上执行。组操作开始缓冲消息,并等待已经在进行中的任何传出消息的交付完成,然后更改通信协议版本并发送缓冲的消息。更改通信协议版本后,任何时候如果有成员试图加入群组,群组成员将宣布新的协议版本。
当使用AdminAPI操作改变集群拓扑结构时,MySQL InnoDB集群自动透明地管理其成员的通信协议版本。InnoDB集群总是使用最新的通信协议版本,该版本被当前属于集群或加入集群的所有实例所支持。详细信息请参见InnoDB集群和组复制协议.