【 TiDB 使用环境】生产环境
【 TiDB 版本】
【遇到的问题:问题现象及影响】
上游是MySQL 5.7,同步报错如下:
配置文件中配置了过滤,试了多种书写方式都不行,重启任务仍然会报错
dm支持修改配置吗?得重建任务吧
配置了不生效
可以暂时用 binlog skip 命令跳过这个 SQL。最好是提供一下 DM 的版本,如果sql-pattern: ["DROP FUNCTION"]
这种写法不生效,怀疑是 DM 解析器出问题了,我过滤 XA 事务时候,就是这么写的,可以正常过滤 XA 事务。
另外你改完配置后,有通过 stop-task, start-task 重建任务让配置生效么?
sql-pattern: ["^-- ----.*DROP FUNCTION IF EXISTS"]
这种写法。sql-pattern是根据正则表达式来过滤的
1、DM版本是5.4.0,写在上面了
2、改完配置有stop重启的
3、这么一说好像是这个前缀匹配的问题,刚刚手动跳过了10几个,下次出现再试试
看文档,好像不需要完整匹配
上次又出现了,尝试修改了正则表达式仍然不能跳过。
从报错信息看dm是已经识别到 drop 语句了,第14个字符刚好就是 “FUNCTION” 关键字的结尾
我猜测这里是dm的bug,由于tidb不知道 “FUNCTION”,导致这里报了语句不兼容的问题,所以也无法跳过。
你要不试试升级 DM 呢。本身 DM 版本和 tidb 版本也不是强绑定的。
重建一个配置,对比测试一下是否生效
确实可能是,DM 是直接复用 tidb-server 的语法解析模块,不过记得应该 6.X 某个版本貌似修复了,语法解析失败不会在 DM 处直接出错,而是交到执行阶段由 tidb-server 判断是否能执行成功。 可以在测试环境使用最新的 dm 版本试下,看还会报错么。
好像不是这么写的吧。function要用sql-patterm吧。我有一次也是在 mysql创建了一个函数,结果报错。我只能迁移DM换一台服务器添加过滤参数然后重新从停止点开始同步。
events: [“drop database”,“truncate table”, “drop table”,“delete”,“create index”,“drop index”]
sql-pattern: [“^CREATE\s+DEFINER”,“^DROP\s+EVENT”,“ALTER\s+TABLE[\s\S]*ADD\s+PARTITION”, “ALTER\s+TABLE[\s\S]*DROP\s+PARTITION”,“^DROP\s+PROCEDURE”, “^CREATE\s+PROCEDURE”,“ALTER\s+TABLE[\s\S]*ADD\s+INDEX”]
你的DM是什么版本的?
5.3的