mysql主从复制跳过复制错误【转】

跳过复制错误mysql

mysql由于binlog机制问题,有些时候会出现从库重放sql执行失败的状况,特别是旧的STATEMENT模式最容易出现这种状况(由于函数和存储过程等缘由),这也是为何强调使用mixed和row模式的缘由。另外就是一些外部XA事务,由于XA事务日志不在mysql中,有时候会出现回滚失败的状况,致使主从报错。sql

出现这些情况那该怎么办好呢?若是是重作,虽然是能够,可是若是库很是大,那耗时就不是一两小时那么容易,若是是作了生产读写分离的,就很差交代了。这个时候咱们能够选择手动修改数据,而后跳过这个复制错误,而后这个主从复制就会从新运行了。vim

继续讲述两种模式,先说的是GTID模式,他能够有两种方式跳过。第一种是用得比较多的,注入空事务跳过:bash

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#找到冲突的GTID号.
mysql>show slave status\G
    
    
    
Executed_Gtid_Set: 09cb91bf-2669-11e7-8b70-00163e0835ff:1-83648451
    
    
    
#中止复制
mysql>stop slave;
#而后执行设置一个事务GTID来跳过,就是要跳过这个事务的意思
mysql>SET gtid_next =  '09cb91bf-2669-11e7-8b70-00163e0835ff:1-83648451' ;
#注入空事务
mysql>BEGIN;COMMIT;
#把GTID设置回自动模式
mysql>SET gtid_next =  'AUTOMATIC' ;
#从新开启复制
mysql>START SLAVE;
#这就能够跳过一个事务了,原理在于经过执行一个空事务代替master传递过来的冲突事务.
#固然跳过了,并不表明这个数据就不修改了,仍是要你手动去修改一下,这样就一切回归正常了
mysql>update tables  set  。。。。。。。

第二种,直接跳过这个GTID,改作后面的函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#找到冲突的GTID号.
mysql>show slave status\G
    
    
    
Executed_Gtid_Set: 09cb91bf-2669-11e7-8b70-00163e0835ff:1-83648451
    
    
    
#中止复制
mysql>stop slave;
#直接设置上面的GTID值+1
mysql>SET @@GLOBAL.GTID_PURGED= '09cb91bf-2669-11e7-8b70-00163e0835ff:1-83648452' ;
#从新开启复制
mysql>START SLAVE;
#固然跳过了,并不表明这个数据就不修改了,仍是要你手动去修改一下,这样就一切回归正常了
mysql>update tables  set  。。。。。。。

而后就说传统模式了,相对来讲,更简单一些spa

1
2
3
4
5
6
7
8
#中止复制
mysql>slave stop;
#设定跳过一个事务
mysql>SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1
#从新开启复制
mysql>slave start
#这样就正常了,可是,固然仍是要把数据修改上去
mysql>update tables  set  。。。。。。。

其实还有一个禁忌设定方式,能够跳过一些复制报错,由于不建议,只是拿出来讲说能够这么干日志

1
2
3
4
5
6
7
#修改配置文件
vim  /etc/my .cnf
[mysqld]
#跳过指定error no类型的错误
#slave-skip-errors=1062,1053,1146
#跳过全部错误
#slave-skip-errors=all

转自code

mysql主从复制跳过复制错误-ping_note-51CTO博客orm

http://blog.51cto.com/arthur376/1969935blog

相关文章
相关标签/搜索