点击蓝字
关注我们
前文阅读:
1.MySQL高可用--MGR入门(1)单主/多主模式搭建
2.MySQL高可用--MGR入门(2)组复制监控常用相关表
3.MySQL高可用--MGR入门(3)单主/多主模式切换
1.网络异常
MGR 对网络要求很高,有的时候会因网络波动,自动退出集群的情况,此时需要先在出问题的节点停止组复制,然后再重新加入到集群中。
如下,该节点被踢出集群,直接执行Stop group_replication;报错:
需要先执行 stop group_replication 然后再 start group_replication:
Stop group_replication;
Start group_replication;
2.节点启动长时间处于RECOVERING
SET SQL_LOG_BIN=0;
alter USER repl@'%' IDENTIFIED WITH mysql_native_password BY 'repl';
GRANT REPLICATION SLAVE ON *.* TO repl@'%';
GRANT BACKUP_ADMIN ON *.* TO repl@'%';
FLUSH PRIVILEGES;
SET SQL_LOG_BIN=1;
STOP GROUP_REPLICATION;
START GROUP_REPLICATION;
3.数据异常修复
3.1暂时性恢复
MGR 对数据具有一定的容错性和最终一致性,原则上并不会出现数据不一致的情况,并且每次执行事务都会检测冲突,如果某个节点的数据因为异常导致不一致,切主节点的 binlog 丢失的情况,势必会导致集群数据不一致,此时可以通过以下的方法暂时让集群起来。
停止异常节点的组复制Stop group_replication;清空当前的 GTID EXECUTEDReset master;在异常节点将 GTID 事务号设置和主节点一致SET @@GLOBAL.GTID_PURGED='主节点的 GTID 号';启动异常节点的组复制Start group_replication;
这里需要注意,这样的方式即使恢复了集群,因为 binlog 的缺失,实际上数据是不一致的,极有可能发生后续因为数据不一致导致集群出现问题,这里强烈不建议这么做。
4.分布式恢复
前面提到了暂时性的集群恢复,这样的恢复会有很大的问题,这里将阐述 MGR 正常的恢复方式。当 MGR 中新的成员加入节点时,通常有两种方法,当 binlog 全,或者 binlog 在删除前接入的节点能够成功继续往下同步的,则新加入的节点会继续同步下去,在 MySQL 8.0.21 版本中,可以通过设置参数:
group_replication_advertise_recovery_endpoints
来进行指定点进行同步。
如果在 binlog 不可用或者差的数据实在太多的情况下,MySQL 在 8.0.17 后退出了克隆的方式进行恢复,即在集群中的所有 MySQL 节点上添加克隆插件,新加入的节点数据将会被全部删除,然后会被自动重新同步数据。
4.1节点分布式恢复
读节点重新加入环境。
模拟读节点重新加入,首先观察主节点的数据以及事务的情况:
此时将节点 3,清除所有数据,清除同步信息,重新初始化 MySQL,模拟成新节点。
此时3节点已经被集群踢出去了:
初始化
mysqld --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql --initialize-insecure --datadir=/data/3306/data --user=mysql &
启动
mysqld_safe --defaults-file=/etc/my.cnf --user=mysql &
登录
mysql -u root
这里注意,因为 2 节点的的 IP 已经添加到了所有节点的 group_replication_group_seeds 中,所以不再添加,如果是新的 IP 加入节点,必须在所有其他节点上 group_replication_group_seeds 中添加新节点的IP。
Reset master;
INSTALL PLUGIN group_replication SONAME 'group_replication.so';
CHANGE MASTER TO MASTER_USER='repl', MASTER_PASSWORD='repl' FOR CHANNEL 'group_replication_recovery';
START GROUP_REPLICATION;
4.2克隆恢复
MySQL 8.0.17 后可以使用克隆恢复。
这里我们依然采用节点 3 作为需要接收克隆的节点。
INSTALL PLUGIN clone SONAME 'mysql_clone.so';
INSTALL PLUGIN group_replication SONAME 'group_replication.so';
CREATE USER clone_user@'%' IDENTIFIED by '123456';
GRANT BACKUP_ADMIN ON *.* TO 'clone_user'@'%';
CREATE USER clone_user@'%' IDENTIFIED by '123456';
GRANT CLONE_ADMIN ON *.* TO 'clone_user'@'%';
SET GLOBAL clone_valid_donor_list = '192.168.168.101:3360';
CLONE INSTANCE FROM clone_user@'192.168.168.101':3360 IDENTIFIED BY '123456';
CHANGE MASTER TO MASTER_USER='repl', MASTER_PASSWORD='repl' FOR CHANNEL 'group_replication_recovery';
start GROUP_REPLICATION;
墨天轮原文链接:https://www.modb.pro/db/170916?sjhy(复制链接至浏览器或点击文末阅读原文查看)
关于作者
陈家睿,云和恩墨MySQL技术顾问,拥有MySQL OCP、PGCE、OBCA、SCDP证书,长期服务于电信行业。现负责公司MySQL数据库、分布式数据库运维方面的技术工作;热衷于运维故障处理、备份恢复、升级迁移、性能优化的学习与分享。
END
推荐阅读:331页!2021年度数据库技术年刊
推荐下载:2021数据技术嘉年华视频回放及PPT下载
2021数据技术嘉年华50余个PPT下载、视频回放已上传墨天轮平台,可在“数据和云”公众号回复关键词“2021DTC”获得!
你知道吗?我们的视频号里已经发布了很多精彩的内容,快去看看吧!↓↓↓
点击下图查看更多 ↓
云和恩墨大讲堂 | 一个分享交流的地方
长按,识别二维码,加入万人交流社群
请备注:云和恩墨大讲堂
点个“在看”
你的喜欢会被看到❤