开发者社区> 问答> 正文

单向同步DDL问题

我们存在这样一种情况:在不同库名、不同表名之间单向同步(但双方表结构是完全相同的),经测试数据可以正常同步,但是当遇到DDL语句时就报错,如下:

pid:1 nid:1 exception:setl:com.alibaba.otter.node.etl.transform.exception.TransformException: no support ddl for [test.t1] to [test_bak.t2] , sql :ALTER TABLE t1 ADD COLUMN time datetime NULL AFTER c_1;

请问otter目前支持这种情况的同步吗?

原提问者GitHub用户 xhkyyy

展开
收起
大圣东游 2023-06-21 17:21:59 46 0
2 条回答
写回答
取消 提交回答
  • 目前otter暂时不支持这类不同库名的DDL同步,后续可以考虑解析ddl sql来支持

    原回答者GitHub用户agapple

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

    解决方案:

    自定义DDL同步:拦截DDL语句,替换表名后手动在目标库执行相应的ALTER TABLE语句。

    借助第三方工具同步DDL:如MaxScale、Dragonflow等,它们支持跨不同表名的DDL同步。

    修改Otter代码:修改DDL处理逻辑,支持单向同步和不同表名下的DDL传播。这需要改造Otter整个DDL架构。

    考虑到你的场景,我推荐第一种自定义DDL同步的方法。具体做法是:

    实现Interceptor接口,拦截DDL语句 使用正则替换表名 执行替换后的ALTER TABLE语句到目标库执行 注册自定义的Interceptor到Otter

    2023-06-21 18:07:52
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

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