• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • 在组中组合不同的成员版本

    根据组复制插件捆绑的MySQL Server版本对组复制进行版本控制。例如,如果成员运行的是MySQL 5.7.26,则该版本为“组复制”插件的版本。要在组成员问题上检查MySQL Server的版本:

    SELECT MEMBER_HOST,MEMBER_PORT,MEMBER_VERSION FROM performance_schema.replication_group_members;
    +-------------	+-------------	+----------------	+
    | member_host 	| member_port 	| member_version 	|
    +-------------	+-------------	+----------------	+
    | example.com 	|	   3306     	|   8.0.13	     	|
    +-------------	+-------------	+----------------	+
    

    有关了解MySQL Server版本和选择版本的指导,请参见“要安装的MySQL版本和发行版本”。

    为了获得最佳兼容性和性能,组中的所有成员应运行相同版本的MySQL Server,因此应运行相同版本的组复制。但是,在升级在线组的过程中,为了使可用性最大化,您可能需要同时运行具有不同MySQL Server版本的成员。根据MySQL版本之间所做的更改,在这种情况下可能会遇到不兼容的情况。例如,如果某个功能在主要版本之间已被弃用,则将版本组合到一个组中可能会导致依赖于已弃用的功能的成员失败。反过来,

    为防止出现这些问题,组复制包括兼容性策略,这些策略使您可以安全地在同一组中组合运行不同版本MySQL的成员。成员应用这些策略来决定是正常加入组还是以只读模式加入或不加入组,具体取决于哪种选择会导致加入成员和该组现有成员的安全运行。在升级方案中,每台服务器必须离开组,进行升级,然后使用其新的服务器版本重新加入该组。此时,成员将为其新服务器版本应用策略,该策略可能与其最初加入该组时所应用的策略有所不同。

    作为管理员,您可以通过适当地配置服务器并发出一条START GROUP_REPLICATION语句来指示任何服务器尝试加入任何组。在尝试将其添加到组后,将由加入成员自己决定并实施加入或不加入该组或以只读模式加入该组的决定。加入成员将接收有关当前组成员的MySQL Server版本的信息,评估其自身与那些成员的兼容性,并应用其自己的MySQL Server版本中使用的策略(而不是现有成员使用的策略)来确定是否为兼容。

    尝试加入组时加入成员所应用的兼容性策略如下:

    • 如果成员所运行的MySQL Server版本低于现有组成员所运行的最低版本,则该成员不会加入该组。
    • 如果成员运行与现有组成员所运行的最低版本相同的MySQL Server版本,则该成员通常会加入该组。
    • 成员加入组,但如果运行的MySQL Server版本高于现有组成员运行的最低版本,则该成员将保持只读模式。仅当组在多主模式下运行时,此行为才有所不同,因为在单主模式下运行的组中,无论如何,新添加的成员默认为只读。

    运行MySQL 8.0.17或更高版本的成员在检查其兼容性时会考虑该发行版的补丁程序版本。运行MySQL 8.0.16或更低版本或MySQL 5.7的成员仅考虑主要版本。例如,如果您有一个成员均运行MySQL版本8.0.13的组:

    • 运行MySQL 5.7版的成员无法加入。
    • 运行MySQL 8.0.16的成员可以正常加入(因为它认为是主要版本)。
    • 运行MySQL 8.0.17的成员加入,但保持只读模式(因为它考虑了补丁程序版本)。

    请注意,在MySQL 5.7.27之前运行版本的加入成员会检查所有组成员,以发现自己的MySQL Server主版本是否较低。因此,对于任何成员正在运行MySQL 8.0版本的组,他们将无法通过此检查,即使该组已经具有运行MySQL 5.7的其他成员,也无法加入该组。从MySQL 5.7.27开始,加入成员仅检查运行最低主要版本的组成员,因此他们可以加入存在其他MySQL 5.7服务器的混合版本组。

    在成员使用不同MySQL服务器版本的多主模式组中,组复制自动管理运行MySQL 8.0.17或更高版本的成员的读写状态。如果成员离开该组,则运行当前最低版本的成员将自动设置为读写模式。当您使用group_replication_switch_to_multi_primary_mode() UDF 将以单主要模式运行的组更改为以多主要模式运行时,组复制会自动将成员设置为正确的模式。如果成员运行的MySQL服务器版本高于组中存在的最低版本的成员,则成员将自动置于只读模式,而运行最低版本的成员将处于读写模式。


    升级期间的成员版本

    在联机升级过程中,如果组处于单主要模式,则当前未脱机进行升级的所有服务器都将像以前一样运行。该小组将根据“单小学模式”中所述的选举政策在必要时选出新的小学。。请注意,如果您要求主数据库在整个过程中保持相同(除非它本身正在升级),则必须首先将所有第二数据库升级到高于或等于目标主要成员版本的版本,然后再升级主数据库。除非它运行组中最低的MySQL Server版本,否则不能将其保留为主要数据库。升级主数据库后,可以使用group_replication_set_as_primary() UDF重新指定它作为主数据库。

    如果该组处于多主模式,则在升级过程中可用于执行写入操作的联机成员会更少,因为升级后的成员在升级后会以只读模式加入。从MySQL 8.0.17开始,这适用于补丁版本之间的升级,而对于较低版本,这仅适用于主要版本之间的升级。当所有成员都已从MySQL 8.0.17升级到同一版本时,它们都会自动变回读写模式。对于早期版本,必须在升级后手动设置为主要成员的每个成员上设置super_read_onlyOFF手动。

    为了解决问题,例如,如果您必须在紧急情况下回滚升级或为组添加额外的容量,则可以允许成员加入在线组,尽管该组运行的MySQL Server版本低于其他小组成员使用的最低版本。group_replication_allow_local_lower_version_join在这种情况下,可以使用组复制系统变量来覆盖常规兼容性策略。请务必注意,将选项设置为ON不会使新成员与该组兼容,并允许其加入该组而没有任何措施防止现有成员的不兼容行为。因此,必须仅在特定情况下谨慎使用该选件,并且您必须采取其他预防措施,以避免新成员由于正常的组活动而失败。有关这些注意事项的详细信息,请参见的说明group_replication_allow_local_lower_version_join

    组复制通信协议版本

    复制组使用的组复制通信协议版本可能与成员的MySQL Server版本不同。要检查组的通信协议版本,请对任何成员发出以下声明:

    SELECT group_replication_get_communication_protocol();
    

    返回值显示可以加入该组并使用该组的通信协议的最旧的MySQL Server版本。MySQL 5.7.14的版本允许压缩消息,而MySQL 8.0.16的版本也允许消息分段。请注意,group_replication_get_communication_protocol() UDF返回该组支持的最低MySQL版本,该最低版本可能与传递给group_replication_set_communication_protocol() UDF 的版本号以及使用UDF的成员上安装的MySQL Server版本不同。

    当您将复制组的所有成员升级到新的MySQL Server版本时,如果仍然需要允许早期版本的成员加入,则组复制通信协议版本不会自动升级。如果您不需要支持较旧的成员,并且希望允许升级的成员使用任何附加的通信功能,则在升级后,请使用group_replication_set_communication_protocol() UDF升级通信协议,并指定将成员升级到的新MySQL Server版本。有关更多信息,请参见“设置组的通信协议版本”。