开发者社区> 问答> 正文

双A环境,中间版本丢失

环境说明: 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

展开
收起
古拉古拉 2023-06-14 21:46:47 48 0
2 条回答
写回答
取消 提交回答
  • 这种情况通常是由于双A同步的数据一致性算法为单向回环补救,而且查询的时候刚好查询到了中间状态的版本。为了避免这种情况,可以尝试以下几种方法:

    1. 延长一致性反查数据库延迟阀值(s)的时间,使得B端同步到A端的binlog能够更完整,减少中间状态的版本出现的概率。

    2. 考虑使用双向回环补救的一致性算法,这种算法可以避免单向回环补救的缺陷,但是需要注意的是,这种算法会增加额外的网络负载和延迟。

    3. 在B端进行查询操作时,可以增加查询条件,使得查询结果更加准确,避免查询到中间状态的版本。例如,可以增加时间戳等条件限制,只查询最近的版本。

    4. 如果以上方法都无法解决问题,可以考虑在B端进行操作时,暂停同步,等操作完成后再重新启动同步,这样可以避免同步过程中出现中间状态的版本。

    2023-06-15 10:12:40
    赞同 展开评论 打赏
  • 可以看一下wiki对于数据一致性同步的介绍,可以有反查机制来规避中间版本

    原回答者GitHub用户agapple

    2023-06-14 22:25:09
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载