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 如何分析查询性能
May 12 MySQL
MySQL 使用自定义变量进行查询优化
May 14 MySQL
python中的mysql数据库LIKE操作符详解
Jul 01 MySQL
SQL实现LeetCode(175.联合两表)
Aug 04 MySQL
MySQL into_Mysql中replace与replace into用法案例详解
Sep 14 MySQL
MySQL空间数据存储及函数
Sep 25 MySQL
MySQL的存储函数与存储过程的区别解析
Apr 08 MySQL
pt-archiver 主键自增
Apr 26 MySQL
MySQL的prepare使用以及遇到的bug
May 11 MySQL
MySQL数据库安装方法与图形化管理工具介绍
May 30 MySQL
MySQL数据库实验实现简单数据库应用系统设计
Jun 21 MySQL
MySQL中的 inner join 和 left join的区别解析(小结果集驱动大结果集)
May 08 MySQL
MySQL infobright的安装步骤
Apr 07 #MySQL
MySQL表的增删改查基础教程
mysql批量新增和存储的方法实例
Apr 07 #MySQL
Mysql 性能监控及调优
数据库连接池
mysql优化
Apr 06 #MySQL
Windows10下安装MySQL8
You might like
php preg_match_all结合str_replace替换内容中所有img
2008/10/11 PHP
解析php 版获取重定向后的地址(代码)
2013/06/26 PHP
php+js实现图片的上传、裁剪、预览、提交示例
2013/08/27 PHP
Dwz与thinkphp整合下的数据导出到Excel实例
2014/12/04 PHP
PHP实现的统计数据功能详解
2016/12/06 PHP
一个不错的应用,用于提交获取文章内容,不推荐用
2007/03/03 Javascript
实现超用户体验 table排序javascript实现代码
2009/06/22 Javascript
利用javascript/jquery对上传文件格式过滤的方法
2009/07/25 Javascript
Javascript的匿名函数小结
2009/12/31 Javascript
js的回调函数详解
2015/01/05 Javascript
jQuery插件jcrop+Fileapi完美实现图片上传+裁剪+预览的代码分享
2015/04/22 Javascript
JavaScript实现的简单拖拽效果
2015/06/01 Javascript
nodejs创建web服务器之hello world程序
2015/08/20 NodeJs
JS基于VML技术实现的五角星礼花效果代码
2015/10/26 Javascript
JavaScript学习小结(7)之JS RegExp
2015/11/29 Javascript
AngularJs动态加载模块和依赖注入详解
2016/01/11 Javascript
jquery.validate 自定义验证方法及validate相关参数
2016/01/18 Javascript
jQuery的extend方法【三种】
2016/12/14 Javascript
JS排序之选择排序详解
2017/04/08 Javascript
angular4 JavaScript内存溢出问题
2018/03/06 Javascript
一步步教你利用Docker设置Node.js
2018/11/20 Javascript
vue全局自定义指令-元素拖拽的实现代码
2019/04/14 Javascript
js键盘事件实现人物的行走
2020/01/17 Javascript
[01:00:14]DOTA2官方TI8总决赛纪录片 真视界True Sight
2019/01/16 DOTA
[02:12]打造更好的电竞完美世界:完美盛典回顾篇
2018/12/19 DOTA
python使用Pycharm创建一个Django项目
2018/03/05 Python
Python中最大递归深度值的探讨
2019/03/05 Python
Python利用sqlacodegen自动生成ORM实体类示例
2019/06/04 Python
python实现图片素描效果
2020/09/26 Python
L*SPACE官网:比基尼、泳装和度假服装
2019/03/18 全球购物
小学毕业感言50字
2014/02/16 职场文书
有兼职工作经历的简历自我评价
2014/03/07 职场文书
揭牌仪式策划方案
2014/05/28 职场文书
大学生团日活动总结
2015/05/06 职场文书
初中英语教学反思范文
2016/02/15 职场文书
oracle DGMGRL ORA-16603报错的解决方法(DG Broker)
2021/04/06 Oracle