为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
- 【TiDB 版本】:
tidb版本:3.0.4
dm版本:1.0.2
- 【问题描述】:
上游mysql执行了tidb不支持的sql,dm同步中断,通过sql-skip跳过SQL不生效,
sql-skip跳过,resume-task office_ssp_test 之后,通过query-status office_ssp_test查看任务还是没有恢复,如下:
dm_worker的日志如下:
若提问为
性能优化、故障排查类问题,请下载
脚本运行。终端输出的打印结果,请
务必全选并复制粘贴上传。
小王同学
2
使用 binlog filter 跳过吧。在 task 配置文件中配置一下。
看了一下binlog filter的文档都是过滤表的,我这个是修改库的, filter该如何写呢:
https://pingcap.com/docs-cn/stable/reference/tools/data-migration/features/overview/#binlog-event-filter
[2019/12/13 12:29:57.090 +08:00] [ERROR] [subtask.go:252] [“unit process error”] [subtask=office_dip_test] [unit=Sync] [“error information”=“{“msg”:”[code=11007:class=functional:scope=internal:level=high] unknown type ddl \u0026{ddlNode:{stmtNode:{node:{text:ALTER SCHEMA db_casedb
DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_bin}}} Name:db_casedb AlterDefaultDatabase:false Options:[0xc00c778620 0xc00c778680]}
github.com/pingcap/dm/pkg/terror.(*Error).Generate
\t/home/jenkins/agent/workspace/build_dm_master/go/src/github.com/pingcap/dm/pkg/terror/terror.go:232
github.com/pingcap/dm/pkg/parser.SplitDDL
\t/home/jenkins/agent/workspace/build_dm_master/go/src/github.com/pingcap/dm/pkg/parser/common.go:290
github.com/pingcap/dm/syncer.(*Syncer).resolveDDLSQL
\t/home/jenkins/agent/workspace/build_dm_master/go/src/github.com/pingcap/dm/syncer/ddl.go:132
github.com/pingcap/dm/syncer.(*Syncer).handleQueryEvent
\t/home/jenkins/agent/workspace/build_dm_master/go/src/github.com/pingcap/dm/syncer/syncer.go:1591
github.com/pingcap/dm/syncer.(*Syncer).Run
\t/home/jenkins/agent/workspace/build_dm_master/go/src/github.com/pingcap/dm/syncer/syncer.go:1292
github.com/pingcap/dm/syncer.(*Syncer).Process
\t/home/jenkins/agent/workspace/build_dm_master/go/src/github.com/pingcap/dm/syncer/syncer.go:590
github.com/pingcap/dm/syncer.(*Syncer).Resume
\t/home/jenkins/agent/workspace/build_dm_master/go/src/github.com/pingcap/dm/syncer/syncer.go:2287
runtime.goexit
\t/usr/local/go/src/runtime/asm_amd64.s:1337",“error”:{“ErrCode”:11007,“ErrClass”:2,“ErrScope”:3,“ErrLevel”:3,“Message”:“unknown type ddl \u0026{ddlNode:{stmtNode:{node:{text:ALTER SCHEMA db_casedb
DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_bin}}} Name:db_casedb AlterDefaultDatabase:false Options:[0xc00c778620 0xc00c778680]}”}}"]
使用 binlog filter 跳过也不生效,是我配置的有问题嘛?
配置了,不生效,见我上面的截图,是我配置的有问题嘛
QBin
(Bin)
7
events 里面没有 alter
,有 alter table
。不过对于你这个 case 是要过滤 alter schema 所以只能通过 sql-pattern
处理。请参考上面提及的官方文档。
通过 sql-pattern
也不行,帮忙看看我配置的哪里有问题
小王同学
9
filter-alter-rule:
schema-pattern: "*"
sql-pattern: ["^alter\s+schema"]
action: Ignore
这样可以了,但是这样会把所有库的这个操作都忽略掉,容易误伤其他库,我先这样解决吧,谢谢了
对了,我这样跳过这个错误之后是不是应该把这个过滤去掉,并更新task文件重启下task
QBin
(Bin)
13
是的。跳过之后可以把这个 规则注释掉。不过如果下次出现同样的 SQL 又会出现该问题。
小王同学
15
最开始设置的 filter 过滤,如果 schema-pattern 设置了库名, 这个时候还没通过 parser 获取到库名、表名,所以用库表、表名,就匹配不上。或者可以在正则表达式上添加上库名的信息,就不会误伤其他库。
1 个赞
system
(system)
关闭
16
此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。