Dm和syncer同步rds因隐式主键导致的报错问题

相同的问题 ref 请教下,syncer 有 columns length 不一致 error 是什么原因导致的?

除了在rds关闭隐式主键,还有别的办法么?

原因: 阿里云 rds 对于没有主键的表会自动创建一个隐藏的 ID。目前 syncer 和 DM 不能忽略隐藏的 ID,如果使用 syncer 同步此类表,会有 $n vs ${n+1} mismatch 的错误。 解决办法,DM 同理: 可以在上游 rds 需要同步的表上添加主键临时解决, 但是由于 tidb 不支持增加主键的操作,所以syncer 依然会报错,退出。此时可以先暂停那 syncer,在 tidb 中创建一个跟之前的表(假设表名为 t)结构一样的临时表,如 create table t_temp like t; 然后把 t 表的数据迁移到临时表中 insert into t_temp select * from t; 再把 t drop 掉, drop table t; 最后把 t_temp 重命名为 t, rename table t_temp to t;
最后修改 syncer.meta 跳过增加主键那条 ddl,即可继续同步。

嗯,谢谢,我现在是,在task里把添加主键的都ignore掉,就不会因为主键报错,导致task暂停了。

filters:
  mysql-tidb-replica-03.filters.1:
    schema-pattern: "*"
    events: ["truncate table", "drop table","drop database"]
    sql-pattern: ["^DROP\s+PROCEDURE", "^CREATE\s+PROCEDURE","ALTER\s+TABLE[\s\S]*ADD\s+PARTITION", "ALTER\s+TABLE[\s\S]*DROP\s+PARTITION","ALTER\s+TABLE[\s\S]*ADD\s+PRIMARY"]
    action: Ignore