解决线上主从复制1032报错
出错的原因是,主库服务异常重启,导致slave库复制报1032错
也有这样的情况,slave没有限制只读权限,开发或者运维人员在slave库上误删数据,导致生成主库update数据时,由于slave库上记录被提前误删,导致主从复制报错1032,主从不同步了。
解决方法:
很多新手选择了my.cnf可配置slave-skip-errors=1032 从而跳过日志中1032 ERROR报错,或者set global sql_slave_skip_counter=1;stop slave; start slave;
然而上面的方式都是不可取的,因为slave库上没这条,master库再更新时,slave还会报错的。所以这个1032的报错必须解决。如何解决呢,咱们下面来细说下
show master status \G;
复制报错如下:
** 解决办法:**根据报错结束的binglog位置点,通过解析主库的binlog日志文件来提取出当前正在update更新主库上的记录时的这条SQL记录。
下面在master上是获取到update更新记录的SQL方法:
把获取到update更新记录的SQL转换成insert into SQL语句,然后在slave库对应的表插入,最后stop slave;start slave;show slave status\G
一直重复上面的方法在master的binlog文件中提取到SQL,然后转化成insert into SQL,然后在插入slave库对应的表,stop slave;start slave; 直到不再报错为止。
再举一个MySQL主从复制1032故障错误案例:
** -A 39 参数说明**:设置出错的表的字段+2 ,例如出错表的字段37, 加2 -A 39
** s/(@37.*) 参数说明: ** @37为此表的字段总数
把获取到update更新记录的SQL转换成insert into SQL语句,然后在slave库对应的表插入,最后stop slave;start slave;show slave status\G