dm同步之上游创建索引下游报错问题

为提高效率,请提供以下信息,问题描述清晰能够更快得到解决:

【TiDB 版本】dm2.0 tidb4.07

【问题描述】dm同步mysql到tidb时候,上游使用pt工具创建索引导致下游报错问题。
在我的上一个帖子说了这个问题,鉴于不是一个主题,新建个帖子来说明这个问题,我感觉这个是dm的一个bug,感谢pingcap同学帮忙解决下。


若提问为性能优化、故障排查类问题,请下载脚本运行。终端输出的打印结果,请务必全选并复制粘贴上传。

问题出现情况复现:1 上游mysql使用pt工具为dim_warehouse1执行 ADD INDEX idx_fab_status2(is_fba, order_status) USING BTREE
2 dm配置任务配置了 过滤创建索引的操作 ,因为我tidb不需要去同步mysql创建索引操作
3 这个时候报错 online ddl metadata for pt temporary table test._dim_warehouse1_new not found

我这边怀疑出现的原因是,因为我配置了过滤创建索引的操作,所以不会在元数据dm_meta库task_onlineddl下面新增onlineddl语句
然后当结束时候 出现上面错误,我把任务dm配置放在下面 ,你们可以复现下。

pt_test.yaml (2.4 KB)
配置task见配置文件

按照您的描述先测试下,请问上游开启gtid了吗?上游是 mysql 什么版本?

你好 5.7的 这个帖子https://asktug.com/t/topic/69649/29 也说了具体出现的问题 麻烦看下

上游 有的mysql实例开启了gtid ,有的没有开启

1.在一个帖子跟吧。上一个帖子 dm同步 过滤表问题 请问有的开,有的没开怎么理解? 看起来也没有分库合表的配置吧,是还有其他 task 吗?
2. 针对这个 task,edgenode1_source 的配置是什么,开启了吗?

这个测试案例没有开启的gtid,

source-id: “edgenode1_source”

enable-gtid: false

from:
host: “192.168.109.192”
user: “root”
password: “***8”
port: 3306

这个问题感觉和你说的差不多,pt 增加索引,又把索引都配置了过滤,这个感觉是配置的问题吧?

如果我不用pt工具去执行 就不会有问题。
所以我觉得在执行如下图片的时候 应该报错就跳过,或者去判断下过滤条件。

你再理解下, 不能因为用了pt, 就导致过滤会有报错,这个是有逻辑冲突的。
而且会有公司 ,拿tidb做olap 是不需要同步上游索引的

感觉把 do-tables 中加上 pt 增加过程中的 old 和 new 表应该就可以了。这样是否可行?

应该不行, 你可以帮忙联系下开发 看下要不要解决这个问题 。麻烦了

你测试了上面给的这个例子吗? 应该都是不可以吧

这个应该是同步逻辑上的 bug, pt ddl 和 binlog event filter 处理存在不兼容的逻辑,感谢反馈,我们会尽快修复这个 bug

好的 麻烦改完通知下

感谢反馈,您可以在 https://github.com/pingcap/dm/issues/1656 这里看到修复进度

master 分支已修复该问题 https://github.com/pingcap/dm/pull/1659

预计版本 2.0.3 会解决该问题

你好 请问修复是指不会出现此问题,还是只是增加一个handle-error skip的错误提示

如果是上个版本未完成的 online ddl,暂时没法处理,会给出 handle-error skip 的提示。新版本起新进行的 online ddl,预期是 SQL parser 能解析的就不报错了,否则还是提示 handle-error skip。