开发者社区> 问答> 正文

mixed filter问题

是不是如果mysql 的binlog为mixed模式 canal.instance.filter.regex 就无效

原提问者GitHub用户keepljg

展开
收起
古拉古拉 2023-05-08 14:22:32 46 0
3 条回答
写回答
取消 提交回答
  • 过滤条件只针对row模式的数据有效(ps. mixed/statement因为不解析sql,所以无法准确提取tableName进行过滤)

    原回答者GitHub用户agapple

    2023-05-09 17:57:10
    赞同 展开评论 打赏
  • 不是的,canal.instance.filter.regex 参数不会受到 MySQL binlog 模式的影响。无论 binlog 模式是 ROW、STATEMENT 还是 MIXED,都可以使用该参数来进行过滤。但是需要注意的是,如果 binlog 模式为 ROW,那么对于更新操作,canal.instance.filter.regex 参数中所指定的字段值变化信息可能会比较详细,因为 ROW 模式会将每一行数据的变化都记录下来。而对于 binlog 模式为 STATEMENT,canal.instance.filter.regex 参数则可能只能过滤掉整条 SQL 语句,而不能精确到每个字段的变化。

    2023-05-08 15:35:41
    赞同 展开评论 打赏
  • 随心分享,欢迎友善交流讨论:)

    不是的,Canal支持解析mixed模式的binlog,并且正常情况下,canal.instance.filter.regex也是生效的。可以尝试在Canal的配置文件中添加以下配置:

    canal.instance.filter.regex=... canal.instance.filter.black.regex=test..,abc..

    这里的正则表达式表示订阅所有库、所有表,但是过滤掉test和abc库中的所有表。你可以根据实际情况修改正则表达式来过滤需要订阅的表和库。需要注意的是,正则表达式中需要对"."进行转义,因为"."在正则表达式中表示任意字符。因此,需要使用"."来表示一个真实的"."字符。

    2023-05-08 15:24:02
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载