- canal version 1.1.4
- mysql version mysql5
使用的消息队列模式
如题,mysql binlog在mixed格式下无法过滤数据库 我的配置如下:
canal.instance.filter.regex=db_one.*
也尝试过这个写法
canal.instance.filter.regex=db_one\\..*
但是还是收到了其他数据库的增删改。
我看faq写的是:(ps. mixed/statement因为不解析sql,所以无法准确提取tableName进行过滤)
无法准确提取tableName我能理解,但是数据库名可以拿到为什么也过滤不了呢。
3条答案
按热度按时间t5zmwmid1#
后续
canal中的过滤应该是用AviaterRegexFilter这个类来进行过滤的,我研究了下这个类
在regex=db_one..*的情况下,用aviaterRegexFilter.filter("db_one") 的结果是false
在regex=db_one..*的情况下,用aviaterRegexFilter.filter("db_one.aaaa") 的结果是true
怀疑在mixed的模式下,因为拿不到table表名,调用filter方法的时候没有拼接表明,以至于过滤失败。
我把发送消息队列的地方改了改,再调用一次aviaterRegexFilter过滤,数据库名+写死的一个表名,后可以过滤数据库名了。
vawmfj5a2#
Mixed 模式下现在可以正常使用了么? @songlongkuan
ymdaylpp3#
Mixed 模式下现在可以正常使用了么? @songlongkuan
没有尝试现在最新版的canal,我是手动改源码实现的