相同的问题 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
此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。