准备:两台机器一主一从
192.168.1.150 主
192.168.1.151 从
数据库主从配置完毕,并且主从正常工作中。
开始模拟线上的错误
首先用root用户进入到从数据库,人为的插入一条数据(当然了从数据库已经配置了read_only),这里只是为了模拟错误。
在从数据库执行sql语句
insert into user_logs (account_id,category,type,value1,value2,value3,ctime) values(8888,1,1,'test','test','test',12345678);
我们在主的上面也执行上面的语句,主数据库执行sql语句后。
然后我们再看从数据库的状态 show slave status \G
很明显会报错的,报错原因就不说了,一看就看出来了。
当然了声明一下,线上的报错内容不是这个,那种错误比较难模拟,所以就借用了这种错误,但是解决方发都一样的。
分析出报错原因后,就开始解决。首先我们开始把这个报错的sql语句跳过去,我们后期可以再重新导入或者修改。
我们在从库上执行以下步骤
1 stop slave;
2 set global sql_slave_skip_counter=1;
3 start slave;
会发现错误已经跳过去了。主从恢复正常。
总结:线上的错误可能多种多样,我们选择跳过错误时要分析,是否影响我们后续的业务,如果不影响,可以直接跳过,如果有影响,最好是从新导入数据。