组复制根据与其捆绑的 MySQL 服务器版本进行版本控制。例如,如果成员运行的是 MySQL 8.4.0,那么这就是组复制插件的版本。要检查组成员上 MySQL 服务器的版本,请发出
SELECT MEMBER_HOST,MEMBER_PORT,MEMBER_VERSION FROM performance_schema.replication_group_members;
+-------------+-------------+----------------+
| member_host | member_port | member_version |
+-------------+-------------+----------------+
| example.com | 3306 | 8.4.0 |
+-------------+-------------+----------------+
有关了解 MySQL 服务器版本和选择版本的指南,请参阅第 2.1.2 节,“安装哪个 MySQL 版本和发行版”。
为了获得最佳兼容性和性能,组的所有成员应运行相同版本的 MySQL 服务器,因此也应运行相同版本的组复制。但是,在升级联机组的过程中,为了最大限度地提高可用性,您可能需要同时运行具有不同 MySQL 服务器版本的成员。根据 MySQL 版本之间所做的更改,在这种情况下,您可能会遇到不兼容问题。例如,如果某个功能在主要版本之间已被弃用,则在组中组合这些版本可能会导致依赖于已弃用功能的成员失败。相反,当组中存在运行旧版 MySQL 服务器的读写成员时,写入运行较新版 MySQL 服务器的成员可能会导致缺少较新版本中引入的功能的成员出现问题。
为了防止出现这些问题,组复制包含兼容性策略,使您能够安全地在同一个组中组合运行不同版本 MySQL 的成员。成员应用这些策略来决定是正常加入组,还是以只读模式加入组,还是不加入组,具体取决于哪种选择会导致加入成员和组的现有成员安全运行。在升级场景中,每个服务器必须离开组,进行升级,然后以其新的服务器版本重新加入组。此时,成员将应用其新服务器版本的策略,这些策略可能与其最初加入组时应用的策略有所不同。
作为管理员,您可以通过适当地配置服务器并发出START GROUP_REPLICATION
语句来指示任何服务器尝试加入任何组。是否加入组或以只读模式加入组的决定由加入成员本身在您尝试将其添加到组后做出并实施。加入成员接收有关当前组成员的 MySQL 服务器版本的信息,评估其自身与这些成员的兼容性,并应用其自身 MySQL 服务器版本(而不是现有成员使用的策略)中使用的策略来决定其是否兼容。
加入成员在尝试加入组时应用的兼容性策略如下:
如果成员运行的 MySQL 服务器版本与现有组成员运行的最低版本相同,则该成员将正常加入组。
如果成员运行的 MySQL 服务器版本高于现有组成员运行的最低版本,则该成员将加入组,但保持只读模式。此行为仅在组以多主模式运行时才会产生差异,因为在以单主模式运行的组中,新添加的成员在任何情况下默认都为只读。
成员在检查兼容性时会考虑软件的完整 major.minor.release 版本。
在使用不同 MySQL 服务器版本的多主模式组中,组复制会自动管理成员的读写和只读状态。如果某个成员离开组,则运行现在最低版本的成员将自动设置为读写模式。当您使用group_replication_switch_to_multi_primary_mode()
函数将以单主模式运行的组更改为以多主模式运行时,组复制会自动将成员设置为正确的模式。如果成员运行的 MySQL 服务器版本高于组中存在的最低版本,则这些成员将自动置于只读模式,而运行最低版本的成员将置于读写模式。