用户使用一些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
解决办法:otter在清空表结构时,检查下对应tablename是否存在映射关系中,如果不存在则忽略之.
针对以上online ddl的同步,几点建议:
新增列时,新加目标库,同时建议不加带默认值的列. 否则otter需要同步 _mytable_new的数据,才能保证数据不错 因为在第一步到第二步过程中,持续时间比较长,这时在mytable上的数据变更,也会通过trigger写到_mytable_new中,所以可以忽略_mytable_new同步,只关注mytable即可. 在整个ddl做完那瞬间,_mytable_new和_mytable_old表数据应该是一致的。
原回答者GitHub用户agapple
进行重命名DDL操作时遇到了数据同步问题。在进行DDL操作的过程中,您将一个表重命名为一个新表,并将另一个表重命名为原表的名称。这可能会导致数据同步程序无法正确处理表的重命名,从而导致同步错误。
为了解决这个问题,建议您尝试以下步骤:
停止数据同步程序,并清除同步任务的数据。
在进行DDL操作之前,考虑先将数据同步任务暂停或删除,以避免同步错误。
在进行DDL操作之后,重新创建数据同步任务,并使用数据同步程序的全量同步功能来重新同步所有数据。
如果数据同步程序支持重命名DDL操作,您也可以尝试使用该功能来处理表的重命名。在进行重命名DDL操作时,确保在同步程序中更新数据源和目标源的表名称,以便同步程序能够正确处理表的重命名。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。