开发者社区> 问答> 正文

rename ddl引起no such dataMedia

用户使用一些online ddl操作,大致步骤:

第一步:mytable 复制成 _mytable_new

第二部:mytable 改名 _mytable_old

第三部:_mytable_new 改名 mytable

第四部:删除 _mytable_old

同步映射关系配置中,目前只定义了mytable,因为canal进行表匹配,是将rename的源和目标表,只要其中一个满足映射规则条件,就会返回. 所以在第一步时,otter就会收到rename mytable to _mytable_new的sql,而为了保证表结构的正确性,otter会根据rename的目标库清空对应的表结构cache. 因为映射规则没配置_mytable_new,所以就出现了该问题

原提问者GitHub用户 agapple

展开
收起
大圣东游 2023-06-21 17:25:53 81 0
2 条回答
写回答
取消 提交回答
  • 解决办法:otter在清空表结构时,检查下对应tablename是否存在映射关系中,如果不存在则忽略之.

    针对以上online ddl的同步,几点建议:

    新增列时,新加目标库,同时建议不加带默认值的列. 否则otter需要同步 _mytable_new的数据,才能保证数据不错 因为在第一步到第二步过程中,持续时间比较长,这时在mytable上的数据变更,也会通过trigger写到_mytable_new中,所以可以忽略_mytable_new同步,只关注mytable即可. 在整个ddl做完那瞬间,_mytable_new和_mytable_old表数据应该是一致的。

    原回答者GitHub用户agapple

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

    进行重命名DDL操作时遇到了数据同步问题。在进行DDL操作的过程中,您将一个表重命名为一个新表,并将另一个表重命名为原表的名称。这可能会导致数据同步程序无法正确处理表的重命名,从而导致同步错误。

    为了解决这个问题,建议您尝试以下步骤:

    停止数据同步程序,并清除同步任务的数据。

    在进行DDL操作之前,考虑先将数据同步任务暂停或删除,以避免同步错误。

    在进行DDL操作之后,重新创建数据同步任务,并使用数据同步程序的全量同步功能来重新同步所有数据。

    如果数据同步程序支持重命名DDL操作,您也可以尝试使用该功能来处理表的重命名。在进行重命名DDL操作时,确保在同步程序中更新数据源和目标源的表名称,以便同步程序能够正确处理表的重命名。

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

相关电子书

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