生产环境,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
statement的SQL,没有对应的shema,之前正则过滤设计是schema + tableName的设计,所以无法进行匹配。可以开启filterQueryDml=true来直接过滤
原回答者GitHub用户agapple
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。