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

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主从复制断开修复的资料请关注我们其它相关文章!

(0)

相关推荐

  • mysql主从复制配置过程

    主库配置 1. 配置mysql vim /etc/my.cn # 在文件中增加以下内容 server-id=1 # 保证server id唯一 log-bin = /var/lib/mysql/mysql-bin.log binlog-do-db = db1 binlog-do-db = db2 其中db1和db2是计划进行主从复制的库,如果有多个,写多行即可.配置完毕后,重启数据库: service mysqld restart 2. 添加复制用户 通过phpmyadmin,添加新用户,并授予

  • MySQL主从复制原理以及需要注意的地方

    写在前面 最近在写Mycat专题,由于不少小伙伴最近要出去面试,问我能不能简单写下MySQL的主从复制原理和注意事项,因为在之前的面试中被问到了这些问题.我:可以啊,安排上了!! 主从复制原理 (1) Master 将数据改变记录到二进制日志(binary log)中,也就是配置文件 log-bin 指定的文件, 这些记录叫做二进制日志事件(binary log events): (2) Slave 通过 I/O 线程读取 Master 中的 binary log events 并写入到它的中继

  • MYSQL数据库GTID实现主从复制实现(超级方便)

    一.添加Maria源 vi /etc/yum.repos.d/MariaDB.repo 粘贴阿里云的最新mariadb镜像: [mariadb] name = MariaDB baseurl = https://mirrors.aliyun.com/mariadb/yum/10.5/centos7-amd64/ gpgkey=https://mirrors.aliyun.com/mariadb/yum/RPM-GPG-KEY-MariaDB gpgcheck=1 安装新版本的MariaDB yu

  • Mysql主从复制与读写分离图文详解

    文章思维导图 为什么使用主从复制.读写分离 主从复制.读写分离一般是一起使用的.目的很简单,就是为了提高数据库的并发性能. 你想,假设是单机,读写都在一台MySQL上面完成,性能肯定不高. 如果有三台MySQL,一台mater只负责写操作,两台salve只负责读操作,性能不就能大大提高了吗? 所以主从复制.读写分离就是为了数据库能支持更大的并发. 随着业务量的扩展.如果是单机部署的MySQL,会导致I/O频率过高. 采用主从复制.读写分离可以提高数据库的可用性. 主从复制的原理 ①当Master

  • MySQL中主从复制重复键问题修复方法

    -------------------quote begin------------------------ 3. If you decide that you can skip the next statement from the master, issue the following statements: mysql> SET GLOBAL SQL_SLAVE_SKIP_COUNTER = n; mysql> START SLAVE; The value of n should be

  • MySql主从复制实现原理及配置

    数据库读写分离对于大型系统或者访问量很高的互联网应用来说,是必不可少的一个重要功能.对于MySQL来说,标准的读写分离是主从模式,一个写节点Master后面跟着多个读节点,读节点的数量取决于系统的压力,通常是1-3个读节点的配置.而一般的读写分离中间件,例如Mycat的读写分离和自动切换机制,需要mysql的主从复制机制配合. 主从配置需要注意的地方 1.主DB server和从DB server数据库的版本一致 2.主DB server和从DB server数据库数据名称一致 3.主DB se

  • 全面解读MySQL主从复制,从原理到安装配置

    为什么需要主从复制? 1.在业务复杂的系统中,有这么一个情景,有一句sql语句需要锁表,导致暂时不能使用读的服务,那么就很影响运行中的业务,使用主从复制,让主库负责写,从库负责读,这样,即使主库出现了锁表的情景,通过读从库也可以保证业务的正常运作. 2.做数据的热备 3.架构的扩展.业务量越来越大,I/O访问频率过高,单机无法满足,此时做多库的存储,降低磁盘I/O访问的频率,提高单个机器的I/O性能. 什么是mysql的主从复制? MySQL 主从复制是指数据可以从一个MySQL数据库服务器主节

  • 关于MySQL主从复制的几种复制方式总结

    异步复制 MySQL的复制默认是异步的,主从复制至少需要两个MYSQL服务,这些MySQL服务可以分布在不同的服务器上,也可以在同一台服务器上. MySQL主从异步复制是最常见的复制场景.数据的完整性依赖于主库BINLOG的不丢失,只要主库的BINLOG不丢失,那么就算主库宕机了,我们还可以通过BINLOG把丢失的部分数据通过手工同步到从库上去. 注意:主库宕机的情况下,DBA可以通过mysqlbinlog工具手工访问主库binlog,抽取缺失的日志并同步到从库上去:也可以通过配置高可用MHA架

  • MySql主从复制机制全面解析

    作为一个关系型数据库,MySQL内建地提供数据复制机制,这使得在使用时,可以基于其复制机制实现高可用架构等高级特性,从而使得MySQL无需借助额外的插件或其他工具就具备适用于生产环境.这是MySQL得到大面积实际应用的条件之一. 基于MySQL的复制机制,不仅可以实现数据库的高可用,还能实现如:性能扩展.异地灾备以及冷热分离等高级特性. 高可用:通过配置一定的复制机制,MySQL实现了跨主机的数据复制,从而获得一定的高可用能力,如果需要获得更高的可用性,只需要配置多个副本,或者进行级联复制就可以

  • mysql 主从复制如何跳过报错

    一.传统binlog主从复制,跳过报错方法 mysql> stop slave; mysql> set global sql_slave_skip_counter = 1; mysql> start slave; mysql> show slave status \G 二.GTID主从复制,跳过报错方法 mysql> stop slave: #先关闭slave复制: mysql> change master to ...省略... #配置主从复制: mysql>

随机推荐