canal Mixed 模式下无法过滤数据库

qv7cva1a  于 2022-04-21  发布在  Java
关注(0)|答案(3)|浏览(340)
  • 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我能理解,但是数据库名可以拿到为什么也过滤不了呢。

t5zmwmid

t5zmwmid1#

后续
canal中的过滤应该是用AviaterRegexFilter这个类来进行过滤的,我研究了下这个类
在regex=db_one..*的情况下,用aviaterRegexFilter.filter("db_one") 的结果是false
在regex=db_one..*的情况下,用aviaterRegexFilter.filter("db_one.aaaa") 的结果是true

怀疑在mixed的模式下,因为拿不到table表名,调用filter方法的时候没有拼接表明,以至于过滤失败。
我把发送消息队列的地方改了改,再调用一次aviaterRegexFilter过滤,数据库名+写死的一个表名,后可以过滤数据库名了。

vawmfj5a

vawmfj5a2#

Mixed 模式下现在可以正常使用了么? @songlongkuan

ymdaylpp

ymdaylpp3#

Mixed 模式下现在可以正常使用了么? @songlongkuan

没有尝试现在最新版的canal,我是手动改源码实现的

相关问题