开发者社区> 问答> 正文

statement格式的update语句当作DDL解析未进行库表过滤

生产环境,DBA在做主从切换且会进行主从一致性校验,pt-table-checksum工具,其原理

https://blog.51cto.com/dwchaoyue/1836299 ,会将binlog改成statement,replace into 语句解析会失败,直接被过滤掉,但UPDATE语句会被解析,但不会应用库表过滤,导致库表过滤失效。

com.alibaba.otter.canal.parse.inbound.mysql.dbsync.LogEventConvert#processFilter

if (result.getType() == EventType.INSERT || result.getType() == EventType.UPDATE || result.getType() == EventType.DELETE) { // 对外返回,保证兼容,还是返回QUERY类型,这里暂不解析tableName,所以无法支持过滤 if (filterQueryDml) { return true; } }

这里的保证兼容是什么意思呢?tableName在前面已经解析了,为什么这里不过滤?

原提问者GitHub用户soocold

展开
收起
山海行 2023-04-27 16:02:07 83 0
1 条回答
写回答
取消 提交回答
  • statement的SQL,没有对应的shema,之前正则过滤设计是schema + tableName的设计,所以无法进行匹配。可以开启filterQueryDml=true来直接过滤

    原回答者GitHub用户agapple

    2023-04-27 22:01:02
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
神龙云服务器产品及技术深度解析 立即下载
弹性创造价值:基于ECS的最佳性价比实践解析 立即下载
又快又稳:阿里云下一代虚拟交换机解析 立即下载

相关镜像