Slave_SQL_Running: No Mysql同步故障解决方法(包含GTID 解决方案)

今天测试突然找到我,说主从同步出问题了,南哩,又出现了什么骚操作?

我马上连接数据库,执行下面语句,查看slave 从库的状态

SHOW SLAVE STATUS;

 

居然Slave_SQL_Running = NO

注:从库正常 Slave_IO_Running 以及  Slave_SQL_Running 值为YES,Slave_IO_State :Waiting for master to send event

Slave_IO_Running :连接到主库,并读取主库的日志到本地,生成本地日志文件

Slave_SQL_Running : 读取本地日志文件,并执行日志里的SQL命令。 

原因分析:

1.程序可能在slave上进行了写操作。

2.也可能是slave机器重起后,事务回滚造成的。

3.无法执行的语句等等。

造成原因多种多样,我们不一一去对应了,但是解决方式也就那么几种,我们来看看。

解决方案一:简单暴力,直接用工具同步主从库数据(注:注意此时,应该禁止DDL操作)

(1)同步主从数据

(2)主库执行show master status;

  (3) 从库执行

stop slave;
#对应master中数据
change master to master_bin_log='master-bin-log.000010',master_log_pos=817616746;
start slave;

这样是最简单的,不用去查找哪或者哪条执行语句造成了slave同步失败。 

 解决方案二:跳过几步语句执行(注:该方法只在未开启GTID 模式下 才能执行)

可以看到Last_sql_error : Error 'Query execution was interrupted' on query. Default database: 'campus_test_2020online'. Query: 'ALTER TABLE `settle_order_pool` ADD UNIQUE INDEX `idx_unique_order_sn` (`order_sn`)'

注:数据库加索引导致从库的同步失败。

使用   set global sql_slave_skip_counter=n(阿拉伯数字);
跳过几步。再restart slave就可以了。 

slave stop;
set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
slave start;

跳过一步就行了,但是我刚好开启了 GTID 模式,哈哈哈,我简直太机智了,佩服我自己,给自己挖坑。

 注:GTID 模式下是不允许使用该设置的,对于那些你想跳过的sql,生成一个空事务给该GTID 来达到目的。

解决方案三 :GTID 模式下怎么办? 上面以及说了,设置一个空事务给该GTID(global trasaction id)全局事务ID

root@(none) >show slave status\G
*************************** 1. row ***************************
                   Last_Error: Worker 7 failed executing transaction '488b7889-d0a5-11ea-b8bb-0242ac110007:139353-146332' at master log mysql-bin.000012, end_log_pos 156045; Could not execute Delete_rows_v1 event on table test.test2; Can't find record in 'test2', Error_code: 1032; handler error HA_ERR_KEY_NOT_FOUND; the event's master log FIRST, end_log_pos 156045

 

stop slave ; # 先停止主从同步
show slave status; #找到执行错的的GTID 编号
SET @@SESSION.GTID_NEXT= '488b7889-d0a5-11ea-b8bb-0242ac110007:139353-146332'; # 如果就是当前ID ,可以不用设置,直接开启空事务跳过
# begin  commit 制造一个空事务
begin;
commit;
SET GTID_NEXT="AUTOMATIC"; #把gtid_next设置回来
start slave; # 启动主从同步

搞定,🤔:那如果想一次性跳过很多错误语句怎么办?

 

©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页