上一次成功的ack日志: [ batchId: 906915, position: PositionRange[ start=LogPosition[ identity=LogIdentity[ sourceAddress=192.168.10.180/192.168.10.180: 3306, slaveId=-1 ], postion=EntryPosition[ included=false, journalName=mysql-bin.000940, position=150869837, serverId=180, timestamp=1505671087000 ] ], ack=, end=LogPosition[ identity=LogIdentity[ sourceAddress=192.168.10.180/192.168.10.180: 3306, slaveId=-1 ], postion=EntryPosition[ included=false, journalName=mysql-bin.000940, position=151977852, serverId=180, timestamp=1505671093000 ] ] ] ]
rollback失败的ack日志: e[ start=LogPosition[ identity=LogIdentity[ sourceAddress=192.168.10.180/192.168.10.180: 3306, slaveId=-1 ], postion=EntryPosition[ included=false, journalName=mysql-bin.000940, position=151979096, serverId=180, timestamp=1505671093000 ] ], ack=LogPosition[ identity=LogIdentity[ sourceAddress=192.168.10.180/192.168.10.180: 3306, slaveId=-1 ], postion=EntryPosition[ included=false, journalName=mysql-bin.000940, position=138659218, serverId=180, timestamp=1505670995000 ] ], end=LogPosition[ identity=LogIdentity[ sourceAddress=192.168.10.180/192.168.10.180: 3306, slaveId=-1 ], postion=EntryPosition[ included=false, journalName=mysql-bin.000940, position=138740531, serverId=180, timestamp=1505670996000 ] ] ]
我们对比两次的日志,发现ack节点的内容发生了变化,正常情况下,ack的值是null。但是异常情况下,附带了信息,且position的位置比start 和 end节点的都要靠前,不知道为什么出现这种情况。线上环境已经遇到很多次了。因为position变更,数据就会重复,主键冲突无法insert操作,都是手动修改的。 目前我们的解决办法是:
1、比对zk的position是否是最新的,如果是的话就重启server,之后可以正常读取
2、如果zk的position也是之前的位点,只能手动修改zk的postion为最新的位点来解决。
到目前为止都没有找到具体的原因,也不知道什么什么引起的。 我们是多个instance的方式部署。jdk 1.7
原提问者GitHub用户ghost
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。