MySQL8.0.16新特性:The Communication Protocol In Group Replication
MGR优雅升级到MySQL8.0.16
传统的升级手段之一,5.7 MGR集群与8.0 MGR集群进行数据传输,程序切换新集群后测试是否正常.
如果不正常,要么将新集群的新增数据同步回旧集群,要么就舍弃掉这部分数据,一般看来这种回滚都是繁琐的,繁琐的操作一般都会相应的增加风险。

8.0.16的发布也带来一个新的功能-MGR通信协议的支持,可以让我们更轻松地切换到8.0,或者轻松地再切换回5.7。那么什么是MGR通信协议呢?
MGR通信协议(The Communication Protocol In Group Replication)
成员1:8.0.16 成员2:8.0.16 成员3:5.7.22 他们可以组成一个MGR集群了。
无论从集群的迁移成本,应用程序切换过程的平滑度,回滚时数据一致性都可以更好的保障。
应用程序切换过程的平滑度:老司机会有感触,一般应用程序都是多个节点,每个节点访问新地址的生效存在时间差,会导致新旧节点会存在有数据同时写入情况,这个就会成为架构的设计的核心考虑之一。
如果两个成员尝试加入相同的MGR集群,则只有两个成员的通信协议版本已与该MGR已有成员的通信协议版本兼容时,它们才能加入。 来自该组的具有不同通信协议版本的成员必须单独加入。
例如:
1个MySQL Server 8.0.16实例可以成功加入使用通信协议版本为5.7.22的组。
1个MySQL Server 5.7.22实例无法加入使用通信协议版本为8.0.16的组。
2个MySQL Server 8.0.16实例无法同时加入使用通信协议版本为5.7.22的组。
2个MySQL Server 8.0.16实例可以同时加入使用通信协议版本8.0.16的组
两个核心UDF (User Defined Function)
1. group_replication_get_communication_protocol
SELECT group_replication_get_communication_protocol();
2. group_replication_set_communication_protocol
GROUP_REPLICATION_ADMIN 权限哦SELECT group_replication_set_communication_protocol("5.7.22");
如果后续将MGR的成员都升级成同一版本(原集群中最新的版本),通信协议是不会自动升级兼容的,需要继续执行group_replication_set_communication_protocol函数来指定:
SELECT group_replication_set_communication_pruseotocol("8.0.16");
DEMO
环境:
集群的节点:
192.168.4.35:3309 - Primary Node - MySQL 5.7.25
192.168.4.34:3309 - Seconds Node - MySQL 5.7.25
192.168.4.36:3309 - Seconds Node - MySQL 5.7.25
希望加入集群的节点:
192.168.4.35:3816 - MySQL 8.0.16
开始测试
Primary Node (192.168.4.35 3309):
show master status;
+-----------------------------+----------+--------------+------------------+-------------------------------------------------------------------+
| File | Position | 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.35 3816)MySQL 8.0.16
change master + install plugin 请自行完成
-- 如果通过还原已同步了GTID,忽略此步骤,这里为了简单测试,顾新节点没有同步原集群数据。
reset master;
set global gtid_purge = '2c7b4762-5963-5789-acdd-047677b98a9d:1-32876403:33576383-33576398' -- 设置MGR相关参数
set global binlog_checksum = NONE;
set global group_replication_group_name = '2c7b4762-5963-5789-acdd-047677b98a9d';
set global group_replication_local_address = '192.168.4.35:23816';
set global group_replication_group_seeds = "192.168.4.35:23309";
set global group_replication_bootstrap_group = off;
set global group_replication_single_primary_mode = 0;
set global group_replication_enforce_update_everywhere_checks = 0;
set global group_replication_unreachable_majority_timeout = 120;
set global group_replication_enforce_update_everywhere_checks = 1;
-- 启动集群
start group_replication
-- 尝试执行UDF:group_replication_get_communication_protocol:
SELECT group_replication_get_communication_protocol();
+------------------------------------------------+
| group_replication_get_communication_protocol() |
+------------------------------------------------+
| 5.7.14 |
+------------------------------------------------+
-- MySQL 8.0.16 加入由全部节点均为5.7.25版本,自动将通讯协议降成了5.7.14,以便相互通讯兼容。
-- 同时也说明 MySQL的通信协议版本可能和MySQL实例版本有可能不是一致的哦(这点还需要论证下,不敢打包票)
-- 注意:如果出现以下错误,原因是执行UDF,必须要在集群成员均为Online对的状态下才可执行
-- ERROR 1123 (HY000): Can't initialize function 'group_replication_get_communication_protocol'; A member is joining the group, wait for it to be ONLINE.'
-- 查看集群节点状态:
[performance_schema]> select * from replication_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 | ONLINE | SECONDARY | 8.0.16 |
| group_replication_applier | cc11c7de-446a-11e9-ae80-20040fecc760 | node004035 | 3309 | ONLINE | SECONDARY | 5.7.25 |
| group_replication_applier | cc830e26-446a-11e9-be34-20040fed73f8 | node004036 | 3309 | ONLINE | SECONDARY | 5.7.25 |
| group_replication_applier | cc88974a-446a-11e9-9e99-20040fed8fd8 | node004034 | 3309 | ONLINE | PRIMARY | 5.7.25 |
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
搭建完成,均手工测试,数据可正常同步及读取。测试数据就不在这里介绍,可自行玩耍。
小结
总的来说,这个特性对于已5.7 MGR为主的公司,但又想体验8.0的一些特性是个非常好的利器。
架构支持了不同的MySQL版本,玩法就可以多种多样了。
迁移时一定要注意数据一致性,第一优先级保证:无论迁移前、中、后的数据同步,或者迁移后的失败回迁,都要保证两边数据一定要一致。当你面临修复数据,你就会知道它是个无底洞了。
参考文档:
https://dev.mysql.com/doc/refman/8.0/en/group-replication-communication-protocol.html
MySQL8.0.16新特性:The Communication Protocol In Group Replication的更多相关文章
- mysql8.0的新特性
https://www.cnblogs.com/kevingrace/p/10482469.html MySQL 8 正式版 8.0.11 已发布,官方表示 MySQL 8 要比 MySQL 5.7 ...
- MySQL-8.0.x 新特性之索引页合并
[背景] 索引的重要是在些不表.在这里我想说的另一个问题:索引和数据一样在innodb中都是以page的形式来组织的,那么问题就来了. 比如果说索引 ix_person_name 的内容只要8个页面就 ...
- mysql8.0发布新特性
2018年4月21日 14:36:42 https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-11.html#mysqld-8-0-11-b ...
- MySQL8.0哪些新特性你最期待
1.数据字典全部采用InnoDB引擎存储,支持DDL原子性.crash safe,metadata管理更完善 2.快速在线加新列(腾讯互娱DBA团队贡献) 3.并行redo log,并提升redo l ...
- 【SQL必知必会笔记(1)】数据库基础、SQL、MySQL8.0.16下数据库、表的创建及数据插入
文章目录 1.数据库基础 1.1 数据库(database) 1.2 表(table) 1.3 列和数据类型 1.4 行 1.5 主键 2.什么是SQL 3.创建后续练习所需数据库.表(MySQL8. ...
- php5.3到php7.0.x新特性介绍
<?php /*php5.3*/ echo '<hr>'; const MYTT = 'aaa'; #print_r(get_defined_constants()); /* 5.4 ...
- [PHP] 从PHP 5.6.x 移植到 PHP 7.0.x新特性
从PHP 5.6.x 移植到 PHP 7.0.x 新特性: 1.标量类型声明 字符串(string), 整数 (int), 浮点数 (float), 布尔值 (bool),callable,array ...
- Mysql8.0.16 only_full_group_by
[1]Mysql8.0.16 关于only_full_group_by问题 应公司业务的需求,安装了Mysql8.0.16版本,原来在Mysql5.6版本执行无恙的SQL语句: SELECT prod ...
- centos7编译安装LNMP(nginx-1.16.0,mysql8.0.16,php-7.3.6)常见问题报错及解决方法
LNMP的安装与配置 nginx-1.16.0安装及配置: 第一步:前往官网下载nignx源码包 下载完毕后上传至服务器(先安装lrzsz) yum -y install lrzsz 安装完毕后执行: ...
随机推荐
- (图解)Description Resource Path Location Type Java compiler level does not match the version of
Description Resource Path Location Type Java compiler level does not match the version of project 编译 ...
- 流畅python学习笔记:第十二章:子类化内置类型
子类化内置类型 在python2.2之后,内置类型都可以子类化,但是有一个注意事项:内置类型不会调用用户定义的类覆盖的特殊方法.这个说起来比较绕口,什么意思呢.我们来看下下面的代码: class Do ...
- git 从远端拉取指定分支和推送本地某个分支到远端
如题,可以直接从远端拉取某个分支,也可以直接将本地某个分支推送到远端. 原文链接:https://www.cnblogs.com/hamsterPP/p/6810831.html
- hdu 2015校赛1002 Dual horsetail (思维题 )
Dual horsetail Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- UVA11426 GCD - Extreme (II) —— 欧拉函数
题目链接:https://vjudge.net/problem/UVA-11426 题意: 求 ∑ gcd(i,j),其中 1<=i<j<=n . 题解:1. 欧拉函数的定义:满足 ...
- BZOJ3262 陌上花开 —— 三维偏序 CDQ分治
题目链接:https://vjudge.net/problem/HYSBZ-3262 3262: 陌上花开 Time Limit: 20 Sec Memory Limit: 256 MBSubmit ...
- Visual Studio "无法查找或打开PDB文件"解决方法
1.问题: 使用C#语言时遇到的问题(C/C++类似,方法一致),我用qt和VS2013也遇到这种问题 编译链接都没问题,调试时出现以下错误提示: 2.解决方法 第一步: 第二步:[调 ...
- mysql七:视图、触发器、事务、存储过程、函数
阅读目录 一 视图 二 触发器 三 事务 四 存储过程 五 函数 六 流程控制 一 视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名 ...
- html5--2.9新的布局元素(5)-hgroup/address
html5--2.9新的布局元素(5)-hgroup/address 学习要点 了解hgroup/address元素的语义和用法 通过实例理解hgroup/address元素的用法 对照新元素布局与d ...
- 分享知识-快乐自己:Struts2(动态方法、动态结果、通配符、方法内部跳转、action跳转、OGNL 的使用及注意事项)
这里主要以案例演示:涵盖以下知识点 1.动态方法调用:使用关键 符号 ! 进行操作 例如:/命名空间 ! 方法名 2.动态结果集:就是说,通过后台返回的结果 ${} 获取,重定向到符合预期的页面. ...
