开发者社区> 问答> 正文

otter配置为双向同步模式,ddl同步会出现死循环同步

otter为解决循环同步使用的算法:https://github.com/alibaba/otter/wiki/Otter%E5%8F%8C%E5%90%91%E5%9B%9E%E7%8E%AF%E6%8E%A7%E5%88%B6

而ddl同步在mysql binlog中是独立的事务,没有BEGIN/COMMIT事件包围,所以无法进行避免回环控制,只能暂时性在双向同步时别使用ddl同步,单向同步无影响.

原提问者GitHub用户 agapple

展开
收起
大圣东游 2023-06-21 17:28:43 180 0
3 条回答
写回答
取消 提交回答
  • 在双向同步过程中,由于DDL同步没有BEGIN/COMMIT事件包围,导致无法进行避免回环控制,可能会出现死循环同步的问题。

    为了避免这种情况,您可以暂时性在双向同步时禁止使用DDL同步。如果需要进行DDL同步则可以考虑单向同步。通过在双向同步过程中控制表的同步方向,可以实现可靠和安全的数据同步。

    另外,建议您在使用Otter进行数据同步时,仔细阅读官方文档,了解Otter的最佳实践和使用技巧,以确保数据同步工作顺利进行。

    2023-06-23 14:31:57
    赞同 展开评论 打赏
  • 解决办法: 双向同步中,只允许开启单向的ddl同步。 比如A和B是双向同步,只开启A->B的ddl同步,关闭B->A的ddl同步,后续ddl操作都只能在A上操作,操作后otter会自动同步到B中,因为B关闭了ddl同步,所以B就不会回流到A,就不会形成死循环.

    原回答者GitHub用户agapple

    2023-06-21 18:28:05
    赞同 展开评论 打赏
  • 北京阿里云ACE会长

    由于DDL语句在MySQL的binlog中是独立的事务,没有BEGIN/COMMIT事件包围,因此无法进行避免回环控制,可能会出现死循环同步的情况。

    为了避免这种情况,可以考虑采用以下几种解决方案:

    在双向同步模式下,暂时性不使用DDL同步。

    由于DDL语句无法进行回环控制,因此在双向同步模式下,建议暂时性不使用DDL同步,以避免死循环同步的情况。如果需要使用DDL同步,可以考虑采用单向同步模式。

    在双向同步模式下,对DDL语句进行特殊处理。

    可以对DDL语句进行特殊处理,使其可以进行回环控制。具体做法是,在DDL语句前面添加一个BEGIN语句,在DDL语句后面添加一个COMMIT语句。这样就可以将DDL语句包围在一个事务中,从而进行回环控制。

    例如,在MySQL中,可以使用以下方式对DDL语句进行处理:

    sql Copy BEGIN; ALTER TABLE ...; COMMIT;

    
    需要注意的是,对DDL语句进行特殊处理可能会带来一定的风险和不稳定性,需要进行充分测试和验证,确保其正确性和稳定性。
    
    在双向同步模式下,采用其他方式进行回环控制。
    
    可以采用其他方式进行回环控制,例如通过判断同步消息的时间戳或者版本号等信息来避免死循环同步的情况。需要根据实际情况选择合适的回环控制方式,并进行适当的调整和优化。
    2023-06-21 17:40:12
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

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