MySQL主从复制断开的常用修复方法


Posted in MySQL onApril 07, 2021

01 问题描述

      在生产环境中,我们经常会遇见MySQL主从复制断开的情况,在遇到主从复制断开是,通常情况,解决问题的步骤如下:

1、从库上show slave status查看复制断开的直观原因,并记录当前的复制位点

2、查看error log,分析更详细的复制断开原因

3、修复主从复制关系

4、如果复制关系无法修复,则需要重新搭建从库

02 解决问题的方法

      主从复制关系断裂,有各种各样的原因。有些时候,我们没有时间去客观分析原因,因为应用程序处于无法使用状态,需要立即恢复,这种情况下,我们对复制断裂问题和服务可用性之间必须做一个权衡,然后再进行相应的处理。

常见的解决主从复制断裂的方法有以下几种:

1、找到其他从库,快速替换

   这种方法,需要你的应用具有至少一主两从的架构,其中一个从库发生问题,可以将另外一个从库快速上线,从而恢复应用访问,后续再来排查出现故障的从库的具体问题原因。

2、跳过复制失败的错误

    有些情况下,我们可以判断主从复制断裂的原因,例如主库上比从库上多一个数据库db_1,那么当我们在主库上执行drop database db_1的时候,从库的复制一定会断开。这种情况下,我们可以通过跳过一个事务来解决。

方法一:(直接跳过当前事务)

    在GTID模式下,可以通过下面的命令来解决:

mysql> STOP SLAVE;
mysql> SET GTID_NEXT='xxxxxx:yyy'; ----- 设置需要跳过的gtid event
mysql> BEGIN;COMMIT;
mysql> SET GTID_NEXT='AUTOMATIC';
mysql> START SLAVE;

   在非GTID模式下,可以通过下面的命令来解决:

stop slave;
set sql_slave_skip_counter=1;
start slave;

方法二:(指定新位置)

    如果我们通过binlog分析,知道了下一个事务的具体点位,也可以指定下一个事务具体位置的方法来解决:

GTID模式下:

mysql>  STOP SLAVE;
mysql>  RESET MASTER;
mysql>  SET @@GLOBAL.GTID_PURGED ='xxxxxxx:yyyyyy'  ----- 表示这些gtid event已经执行过了
mysql>  START SLAVE;

注意,GTID_PURGED 必须是 GLOBAL,上面的命令也可以写成set global gtid_purged='xxx:yyy'

非GTID模式下:

stop slave;
change master to master_log_file='mysql-bin.001360',master_log_pos=676383371;
start slave;

方法三:pt-slave-restart工具

    如果我们跳过一个事务之后,还出现断开的场景(例如我们在从库上删除了100条数据,但是主库要更新这100条数据),可以使用pt-slave-restart这个工具,它可以连续跳过断开的位置。

    它的使用方法如下:

pt-slave-restart -h 10.xxx.xxx.xxx -P port -u user -p password

   当我们使用并行复制的时候,pt-slave-restart可能会出现报错,这个时候我们可以通过将并行复制修改为单线程复制,然后再使用pt-slave-restart工具,可以参考这篇文章:

pt-slave-restart工具

方法四:设置参数slave_exec_mode

     这个参数可以修改主从复制过程中的从库执行模式,如果是strict严格模式,则所有的复制一旦报错就会停止,如果设置成idempotent幂等模式,则特定错误号的错误将会被跳过。命令如下:

set global slave_exec_mode = idempotent

具体可以参考之前的文章:

MySQL复制问题的三个参数介绍

这篇文章中还有其他两种跳过复制错误的参数,分别是slave_skip_errors、sql_slave_skip_counter

3、利用备份重建从库

   这种方法的使用场景不多,通常情况下,只有从库已经不可用或者无法从主库同步的时候,才会考虑这种方法,例如主库上执行了reset master操作,导致所有的binlog被清理了,这样从库就无法获取读取正确的binlog,复制就会断开,这种情况下,重建从库可能是唯一的办法了。

以上就是MySQL主从复制断开的常用修复方法的详细内容,更多关于MySQL主从复制断开修复的资料请关注三水点靠木其它相关文章!

MySQL 相关文章推荐
多属性、多分类MySQL模式设计
Apr 05 MySQL
MySQL COUNT函数的使用与优化
May 10 MySQL
MySQL 逻辑备份与恢复测试的相关总结
May 14 MySQL
Mysql数据库命令大全
May 26 MySQL
一文读懂navicat for mysql基础知识
May 31 MySQL
如何使用分区处理MySQL的亿级数据优化
Jun 18 MySQL
解决mysql的int型主键自增问题
Jul 15 MySQL
Mysql binlog日志文件过大的解决
Oct 05 MySQL
一篇文章看懂MySQL主从复制与读写分离
Nov 07 MySQL
mysql中varchar类型的日期进行比较、排序等操作的实现
Nov 17 MySQL
mysql数据插入覆盖和时间戳的问题及解决
Mar 25 MySQL
了解MySQL查询语句执行过程(5大组件)
Aug 14 MySQL
MySQL infobright的安装步骤
Apr 07 #MySQL
MySQL表的增删改查基础教程
mysql批量新增和存储的方法实例
Apr 07 #MySQL
Mysql 性能监控及调优
数据库连接池
mysql优化
Apr 06 #MySQL
Windows10下安装MySQL8
You might like
php 三元运算符实例详细介绍
2016/12/15 PHP
php中Redis的应用--消息传递
2017/03/28 PHP
PHP中error_reporting函数用法详细介绍
2017/06/11 PHP
jQuery 阴影插件代码分享
2012/01/09 Javascript
快速查找数组中的某个元素并返回下标示例
2013/09/03 Javascript
avalonjs制作响应式瀑布流特效
2015/05/06 Javascript
基于jQuery实现在线选座之高铁版
2015/08/24 Javascript
详解nodejs与javascript中的aes加密
2016/05/22 NodeJs
JavaScript 数组- Array的方法总结(推荐)
2016/07/21 Javascript
jQuery实现鼠标经过像翻页和描点链接效果
2016/08/08 Javascript
jquery遍历标签中自定义的属性方法
2016/09/17 Javascript
BootStrap Validator对于隐藏域验证和程序赋值即时验证的问题浅析
2016/12/01 Javascript
vue-router:嵌套路由的使用方法
2017/02/21 Javascript
微信小程序实现跟随菜单效果和循环嵌套加载数据
2017/11/21 Javascript
微信小程序自定义prompt组件步骤详解
2018/06/12 Javascript
Nodejs实现爬虫抓取数据实例解析
2018/07/05 NodeJs
详解基于iview-ui的导航栏路径(面包屑)配置
2019/02/22 Javascript
js 数据类型判断的方法
2020/12/03 Javascript
[02:59]2014DOTA2西雅图国际邀请赛 圆满落幕中国夺冠
2014/07/23 DOTA
详解Python中expandtabs()方法的使用
2015/05/18 Python
Python3实现带附件的定时发送邮件功能
2020/12/22 Python
python中redis查看剩余过期时间及用正则通配符批量删除key的方法
2018/07/30 Python
基于Django框架利用Ajax实现点赞功能实例代码
2018/08/19 Python
python中map的基本用法示例
2018/09/10 Python
详解Python self 参数
2019/08/30 Python
Django自定义YamlField实现过程解析
2020/11/11 Python
如何使用css3实现一个类在线直播的队列动画的示例代码
2020/06/17 HTML / CSS
Emporio Armani腕表天猫官方旗舰店:乔治·阿玛尼为年轻人设计的副线品牌
2017/07/02 全球购物
Raleigh兰令自行车美国官网:英国凤头牌自行车
2018/01/08 全球购物
写clone()方法时,通常都有一行代码,是什么?
2012/10/31 面试题
护士自荐信范文
2013/12/15 职场文书
家长对孩子评语
2014/01/30 职场文书
2016年教师学习廉政准则心得体会
2016/01/20 职场文书
婚前协议书怎么写,才具有法律效力呢 ?
2019/06/28 职场文书
MySQL如何构建数据表索引
2021/05/13 MySQL
压缩Redis里的字符串大对象操作
2021/06/23 Redis