开发者社区> 问答> 正文

rowChage.getRowDatasList() sizes是0.

环境信息

canal version 1.1.2 mysql version 5.7

问题描述

rowChage.getRowDatasList() sizes是0.

步骤重现

可以解析到sql语句,insert,update和delete,rowChage.getRowDatasList() sizes是0. 是不是因为binlog模式是 mixed,mixed就无法使用canal了吗? 公司目前都是用的mixed

期待结果

希望可以获取数据

现执行情况

目前无法获取到数据

原提问者GitHub用户jerrysbest

展开
收起
古拉古拉 2023-05-08 14:50:57 100 0
3 条回答
写回答
取消 提交回答
  • mixed可以获取到binlog,但无法获取row模式里的DML数据

    原回答者GitHub用户agapple

    2023-05-09 18:00:31
    赞同 展开评论 打赏
  • rowChage.getRowDatasList() sizes为0可能是由于以下原因导致:

    1. binlog格式不支持

    canal支持的binlog格式包括ROW和STATEMENT,不支持MIXED格式。如果使用的是MIXED格式,可能会出现无法解析数据的情况。建议将binlog格式修改为ROW格式。

    1. canal过滤规则

    canal可以通过配置过滤规则来过滤不需要的数据,如果过滤规则设置不当,可能会导致无法获取数据。可以通过在canal.properties文件中配置canal.instance.filter.regex属性来设置过滤规则。

    1. 数据库权限

    canal需要具有最高权限才能获取到所有的数据变更信息,如果没有正确配置数据库权限,可能会导致无法获取数据。需要确保canal连接的用户具有SELECT、REPLICATION SLAVE和REPLICATION CLIENT权限。

    1. canal版本问题

    如果使用的是较老的canal版本,可能存在一些bug,可以尝试升级到较新的版本。

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

    不是因为binlog模式是mixed导致无法获取数据,Canal对于mixed模式也是支持的。rowChage.getRowDatasList() sizes是0的原因可能有以下几种:

    Canal没有订阅到对应的表或者库,导致没有解析到任何数据。

    Canal解析到了数据,但是发生了一些异常,导致数据没有被正确封装到RowData中。这种情况下,可以查看Canal日志,查看是否有异常信息。

    Canal的配置文件中没有正确配置过滤规则,导致数据被过滤掉了。

    需要进一步排查原因,可以先检查一下Canal的订阅规则、过滤规则和日志,看看是否能够找到问题所在。

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

相关电子书

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