MySQL Slave备份异常处理

昨天Mysql备份突然出现问题,从库一直没读到数据

1、执行 show slave status
发现一直处于Reading event from the relay log,Seconds_Behind_Master 为3000多,说明延迟了很久

2、查看本地同步文件,发现很多等待同步的文件。说明主库没有问题,还在同步,从库出现了问题

3、再次分析 show slave status信息

Relay_Log_File: mysql-relay.001295
Relay_Log_Pos: 43557398

Relay_Log_Pos 一直不动,说明卡在这里了

5、查询这个文件 43557398 行的sql信息

show relaylog events in mysql-relay.001295' FROM 43557398LIMIT 0 ,100

发现执行了大量的删除和更新操作。导致同步语句执行失败,卡住了

6、跳过这次操作,继续执行同步

stop slave;
set global sql_slave_skip_counter=1;
start slave;

7、重新查看 show slave status,发现 Relay_Log_Pos有了变化。

很快,本地的同步文件就执行完成并删除了,Seconds_Behind_Master = 0,同步完成。

注:切忌执行大量删除sql,反复删除创建同一个表等,这样很容易导致同步卡住。

附录:

sync_binlog 参数说明

sync_binlog”:这个参数是对于MySQL系统来说是至关重要的,他不仅影响到Binlog对MySQL所带来的性能损耗,而且还影响到MySQL中数据的完整性。对于“sync_binlog”参数的各种设置的说明如下:

sync_binlog=0,当事务提交之后,MySQL不做fsync之类的磁盘同步指令刷新binlog_cache中的信息到磁盘,而让Filesystem自行决定什么时候来做同步,或者cache满了之后才同步到磁盘。

sync_binlog=n,当每进行n次事务提交之后,MySQL将进行一次fsync之类的磁盘同步指令来将binlog_cache中的数据强制写入磁盘。

在MySQL中系统默认的设置是sync_binlog=0,也就是不做任何强制性的磁盘刷新指令,这时候的性能是最好的,但是风险也是最大的。因为一旦系统Crash,在binlog_cache中的所有binlog信息都会被丢失。而当设置为“1”的时候,是最安全但是性能损耗最大的设置。因为当设置为1的时候,即使系统Crash,也最多丢失binlog_cache中未完成的一个事务,对实际数据没有任何实质性影响。

从以往经验和相关测试来看,对于高并发事务的系统来说,“sync_binlog”设置为0和设置为1的系统写入性能差距可能高达5倍甚至更多。

innodb_flush_log_at_trx_commit 参数值说明

innodb_flush_log_at_trx_commit是配置MySql日志何时写入硬盘的参数:

0:log buffer将每秒一次地写入log file中,并且log file的flush(刷到磁盘)操作同时进行。该模式下在事务提交的时候,不会主动触发写入磁盘的操作。

1:每次事务提交时MySQL都会把log buffer的数据写入log file,并且flush(刷到磁盘)中去,该模式为系统默认。

2:每次事务提交时mysql都会把log buffer的数据写入log file,但是flush(刷到磁盘)操作并不会同时进行。该模式下,MySQL会每秒执行一次 flush(刷到磁盘)操作

修改命令(这样只是本次生效,重启mysql后恢复)

 -- 修改全局配置
      set global sync_binlog=100;
      set global innodb_flush_log_at_trx_commit=2;

  -- 查看配置
      SHOW VARIABLES LIKE 'innodb_flush_log_at_trx_commit'
      SHOW VARIABLES LIKE 'sync_binlog'

也可以在my.ini或my.cnf中设置,重启mysql生效(这样是永久生效)。

sync_binlog=20
innodb_flush_log_at_trx_commit=2
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL的主从复制是一种常用的数据库复制技术,用于将一个MySQL服务器(称为主服务器)的数据复制到其他MySQL服务器(称为从服务器)。在主从复制中,主服务器将二进制日志传送给从服务器,并通过重放这些日志来实现数据的同步。 主从复制有以下几个主要的应用场景和好处: 1. 数据冗余和负载均衡:通过将数据库复制到多个从服务器,可以实现数据的冗余存储和负载均衡,提高系统的可用性和性能。 2. 数据备份:从服务器可以作为主服务器数据的备份,当主服务器发生故障时,可以快速切换到从服务器来提供服务。 3. 读写分离:通过将读操作分发到从服务器,可以减轻主服务器的读压力,提高系统的并发处理能力。 4. 数据分析和报表生成:通过在从服务器上进行数据分析和报表生成,可以减少对主服务器的影响,提高主服务器的性能。 在MySQL主从复制中,主服务器负责产生二进制日志,并将其传送给从服务器。从服务器接收到二进制日志后,通过重放日志来实现数据的同步。从服务器可以配置为只读模式,以便用于读操作。 需要注意的是,在配置MySQL主从复制时,需要确保网络连接稳定、权限配置正确,并进行适当的监控和维护,以保证主从复制的正常运行。 如果你有关于MySQL主从复制的更具体问题,请继续提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值