sql-skip not working

数据库命名问题暂且抛开不谈,稍后会开另一个issue。现在只同步符合命名规范的数据库及对应表。

目前遇到的问题是比如部分 table 编码问题,想通过 sql-skip 跳过,但是并不生效。

参见以上的日志。总不能每次遇到这种一次性的问题,就需要写类似 event 来解决吧,那指定 pos 的功能还有什么意义。

而且 TiDB 的文档跟当前版本的实践有较大出入。
1、query-error 并不显示对应的错误,只能通过 query-status 来查找
2、query-status 输出的日志 binlog pos 部分是用 逗号 分隔(逗号后面还有个空格),但文档中写的用 冒号 来分隔。

对于 utf32 ,tidb 目前是不支持该编码的,所以只能通过修改表结构来解决,可以在下游先修改完表结构在进行数据同步,

关于 sql-skip 的问题,文档中已明确说明,仅可跳过 tidb 不支持的 ddl,当前 ddl 只是 parser 不能解析,在报错中也提到,如果不需要这个 ddl,可以使用 binlog event filter 进行过滤。

query-error 的文档我们看下是否需要优化一下,目前建议以 query-status 为准。(可以上传下 query-error 的返回文本信息)

query-error testx

query-error testx
{
    "result": true,
    "msg": "",
    "workers": [
        {
            "result": true,
            "worker": "127.0.0.1:8262",
            "msg": "",
            "subTaskError": [
                {
                    "name": "testx",
                    "stage": "Paused",
                    "unit": "Sync",
                    "sync": {
                        "errors": [
                        ]
                    }
                }
            ],
            "RelayError": {
                "msg": ""
            }
        }
    ]
}

感谢反馈,上面的问题是否已经回答清楚,query-error 我们会找研发同学确认,并优化下文档。

整个流程断断续续的跑通了。

对于 event filter 部分,还有一点疑问。

parser 部分遇到错误,需要手动更新task文件,添加维护对应的filter,然后走流程 update-task,resume-task对吧?
(比如 utf32 这种字符集问题,如果 filter skip 掉,是不是同步就不对等了)

还是说需要把单独的表拿出来,先在上游修复。然后建立新的task去处理?

update-task update a task’s config for routes, filters, or black-white-list

可以在 » help 看到此描述。stop-stask start-task 也可以达到此目的。

如果这个 table 在下游创建一下,因为使用 binlog event filter 会过滤掉匹配到的所有 ddl,不知道这边是怎么写的