环境说明: A和B之间为双A同步,A为主站点,开启数据一致性 同步一致性: 基于当前日志变更 同步模式:列记录模式 数据一致性算法:单向回环补救 一致性反查数据库延迟阀值(s):10
过程:
在B端对某行进行了多次变更(即产生了多个版本),则数据会同步到A,这部分binlog会再同步回到B B端在update后,马上进行查询,但是在查询时(同步会由A再回到B),查询到了一个中间状态的版本,此时报错 由于单向回环补救会使B同步到A的binlog,再在B端进行重放,重放过程若有查询,则会导致查询到中间版本。
只有B端(非主站点)在进行操作,A端在这个过程没有操作。 相当于是B端产生的binlog,单向回环重放的过程中,B端进行了读取,读取到的是binlog的中间状态
请问下,该种情况怎么可以避免呢?
原提问者GitHub用户woson-wang
这种情况通常是由于双A同步的数据一致性算法为单向回环补救,而且查询的时候刚好查询到了中间状态的版本。为了避免这种情况,可以尝试以下几种方法:
延长一致性反查数据库延迟阀值(s)的时间,使得B端同步到A端的binlog能够更完整,减少中间状态的版本出现的概率。
考虑使用双向回环补救的一致性算法,这种算法可以避免单向回环补救的缺陷,但是需要注意的是,这种算法会增加额外的网络负载和延迟。
在B端进行查询操作时,可以增加查询条件,使得查询结果更加准确,避免查询到中间状态的版本。例如,可以增加时间戳等条件限制,只查询最近的版本。
如果以上方法都无法解决问题,可以考虑在B端进行操作时,暂停同步,等操作完成后再重新启动同步,这样可以避免同步过程中出现中间状态的版本。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。