MGR优雅升级为MySQL8.0.16的传统升级方式之一。5.7MGR集群和8.0MGR集群进行数据传输。程序切换到新集群后,测试正常。如果不是,要么将新集群新增的数据同步回旧集群,要么丢弃这部分数据。一般来说,这种回滚比较繁琐,繁琐的操作一般也会相应增加风险。8.0.16的发布还带来了一个新特性——MGR通信协议的支持,这让我们可以更轻松地切换到8.0,或者轻松切换回5.7。那么MGR通信协议是什么?MGR通信协议(TheCommunicationProtocolInGroupReplication)从MySQL8.0.16开始,MGR有了通信协议的概念。MGR通信协议版本可以直接管理并设置以适合您希望MGR成员支持的MySQL服务器版本。这样,同一个MGR可用性组就可以由不同MySQL服务器版本的成员组成。是的,你没有看错,也就是说:成员1:8.0.16成员2:8.0.16成员3:5.7.22他们可以组成一个MGR集群。还要确保向后兼容性。MySQL5.7.14版本允许压缩消息,MySQL8.0.16版本也允许消息分片。同一组内的所有成员必须使用相同的通信协议版本,这样MGR成员虽然在不同的MySQL版本中,但只能发送所有MGR成员都能理解的消息。如果组的通信协议版本小于或等于X,X版本的MySQL服务器只能加入复制组并达到ONLINE状态。当新成员加入复制组时,它会检查通告的通信协议版本。集团的现任成员。如果加入的成员支持该版本,则它加入该组并使用该组公布的通信协议,即使该成员支持其他通信能力。如果加入的成员不支持通信协议版本,则将其开除出群。如果两个成员试图加入同一个MGR集群,则只有当他们的通信协议版本已经与该MGR现有成员的协议版本兼容时,他们才能加入。来自不同通信协议版本的群组成员必须单独加入。例如:MySQLServer8.0.16实例可以使用通信协议版本5.7.22成功加入组。MySQLServer5.7.22实例无法加入使用通信协议版本8.0.16的组。两个MySQLServer8.0.16实例不能同时加入使用通信协议版本5.7.22的组。两个MySQLServer8.0.16实例可以同时加入组,通讯协议版本为8.0.16。两个核心UDF(UserDefinedFunction)1.group_replication_get_communication_protocol用于获取MGR成员中最早的MySQL版本的通信协议SELECTgroup_replication_get_communication_protocol();2.group_replication_set_communication_protocol需要修改MGR的通讯协议版本,才能让低版本成员加入,需要有GROUP_REPLICATION_ADMIN权限SELECTgroup_replication_set_communication_protocol("5.7.22");版本),通信协议不会自动升级兼容,需要继续执行group_replication_set_communication_protocol函数指定:SELECTgroup_replication_set_communication_pruseotocol("8.0.16");DEMO环境:集群节点:192.168.4.35:3309-PrimaryNode-MySQL5.7.25192。168.4.34:3309-SecondsNode-MySQL5.7.25192.168.4.36:3309-SecondsNode-MySQL5.7.25想加入集群的节点:192.168.4.35:3816-MySQL8.0.16开始测试主节点(192.168.4.353309):showmasterstatus;+----------------------------+--------+--------------+----------------+------------------------------------------------------------------+|文件|职位|Binlog_Do_DB|Binlog_Ignore_DB|Executed_Gtid_Set|+------------------------+--------+-------------+----------------+-----------------------------------------------------------------+|0040353309-mysql-bin.000037|4090993|||2c7b4762-5963-5789-acdd-047677b98a9d:1-32876403:33576383-33576398|+-----------------------------+------------+------------+--------------------+------------------------------------------------------------------+新节点(192.168.4.353816)MySQL8.0.16changemaster+installplugin请自行完成--如果GTID已经通过restore同步,忽略这个步骤,这里简单测试,新的Gu节点不同步原有集群数据?resetmaster;?setglobalgtid_purge='2c7b4762-5963-5789-acdd-047677b98a9d:1-32876403:33576383-33576398'--设置MGR相关参数setglobalbinlog_checksum=NONE;?setglobalgroup_replication_group_name='2c7b4762-5963-5789-acdd-047677b98a9d';?setglobalgroup_replication_local_address='192.168.4.35:23816';?setglobalgroup_replication_group_seeds="192.168.4.35:23309";?setglobalgroup_replication_bootstrap_group=off;?setglobalgroup_replication_single_primary_mode=0;?setglobalgroup_replication_enforce_update_everywhere_checks=0;?setglobalgroup_replication_unreachable_majority_timeout=120;?setglobalgroup_replication_enforce_update_everywhere_checks=1;--启动群startgroup_replication--尝试执行UDF:group_replication_get_communication_protocol:SELECTgroup_replication_get_communication_protocol();+----------------------------------------------+|group_replication_get_communication_protocol()|+-----------------------------------------------+|5.7.14|+----------------------------------------------+--新增MySQL8.0.16,所有节点均为5.7.25版本,通讯协议自动降为5.7.14,相互兼容--同时也说明MySQL通信协议的版本可能与MySQL实例的版本不一致(这点需要论证,不敢保证)--注:如果出现如下错误,原因是执行UDF,必须在集群成员都是Onlinepair时执行--ERROR1123(HY000):Can'initializefunction'group_replication_get_communication_protocol';Amemberisjoiningthegroup,waitforittobeONLINE.'--检查集群节点状态:[performance_schema]>select*fromreplication_group_members;+--------------------------+------------------------------------+------------+-----------+---------------+------------+----------------+|CHANNEL_NAME|MEMBER_ID|MEMBER_HOST|MEMBER_PORT|MEMBER_STATE|MEMBER_ROLE|MEMBER_VERSION|+------------------------+-------------------------------------+------------+-------------+---------------+------------+--------------+|group_replication_applier|6990a8f4-777c-11e9-a906-20040fecc760|node004035|3816|在线|中学|8.0.16||group_replication_applier|cc??11c7de-446a-11e9-ae80-20040fecc760|node004035|3309|在线|中学|5.7.285|组复制|5.7.285|446a-11e9-be34-20040fed73f8|node004036|3309|ONLINE|SECONDARY|5.7.25||group_replication_applier|cc??88974a-446a-11e9-9e99-20040fed8fd8|node004034|3309|ONLINE|PRIMARY|5.7.25|+--------------------------+--------------------------------------+------------+------------+------------+-----------+----------------+搭建完成,全部手动测试,可以正常同步数据,测试数据可以阅读。这里就不介绍了,大家可以自己玩。总的来说,这个功能对于已经专注于5.7MGR但又想体验8.0的一些功能的公司来说是一个非常好的工具。该架构支持不同的MySQL版本,因此玩法可以多种多样。
