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