mysql主从不同步,不复制的解决办法

mysql的从库,检查一个表的最新的记录,发现主从不同步了 。主库的数据比从库的数据要多很多。
通过show slave STATUS;命令检查,发下如下的错误:

Error 'Cannot add or update a child row:
 a foreign key constraint fails (`mls`.`t_feedback`, CONSTRAINT `Reft_user121` FOREIGN KEY (`fk_user_id`)
 REFERENCES `t_user` (`pk_id`))' ON QUERY . 
DEFAULT DATABASE : 'mls'.
 QUERY : 'INSERT INTO mls.t_feedback SET fk_user_id= 93213,fk_parent_id=1,
f_context=' XXXXXX? ' ,
f_create_time=20180508,f_creater=' XXXXXX ',
f_title=' APP问题 ',
f_reply=0'

最终的解决方案可选:
1、查看Master最新的position,将其最为slave复制的起点。
这种思路体现的是过去的不一致既往不咎,现在保持同步即可。看起来,这个思路和恢复主从库数据的一致性的初衷有所违背,但这种方法,简单,高效,在测试环境,对历史数据要求不高的场景中可使用。
2、必须严格恢复主从数据一致的做法。
2.1备份主库数据,并在从库上恢复,在历史数据一致性的基础上开启同步,但这种方法比较麻烦,必须在主库上执行锁表操作,阻止客户端对于表数据的更新操作,而且在数据量大的情况下,备份也是个耗时的工程。其实,这种方法在实际生产环境中也很少用。
2.2 skip掉相关事务
把产生错误的那一步,直接跳过去。

如何操作:
1、停止slave服务
命令:stop slave;
2、设置跳过多少个事务
命令:SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1;
3、开启slave服务
命令:start slave;

Error 'CREATE TABLE ... SELECT is forbidden when @@GLOBAL.ENFORCE_GTID_CONSISTENCY = 1.' ON QUERY . DEFAULT DATABASE : 'mls'. QUERY : 'create table cmpt_main_20180518 as select pk_id as cmpt_id,f_name as cmpt_name,'' as cmpt_en_name,str_to_date(f_protocol_date,' % Y % m % d ') as cmpt_start_time,str_to_date(f_protocol_date,' % Y % m % d ') as cmpt_end_time,'' as cmpt_province,f_address as cmpt_city,'' as cmpt_address,1 as cmpt_from_platform,1 as is_publish,0 as is_delete,now() as update_time,now() as create_time from t_competition'

这个错误主从同步已经报错,但是没有预警,结果在主库上创建临时迁移数据库的表,然后又删除了,从库对比没有这个表,所以产生了错误。GLOBAL.ENFORCE_GTID_CONSISTENCY = 1:检查错误日志,直到没有错误出现,才能进行下一步

解决的办法:
如何操作:
1、停止slave服务
命令:stop slave;
2、设置跳过多少个事务
命令:SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1;
3、开启slave服务
命令:start slave;

你可能感兴趣的:(mysql)