环境信息
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
rowChage.getRowDatasList() sizes为0可能是由于以下原因导致:
canal支持的binlog格式包括ROW和STATEMENT,不支持MIXED格式。如果使用的是MIXED格式,可能会出现无法解析数据的情况。建议将binlog格式修改为ROW格式。
canal可以通过配置过滤规则来过滤不需要的数据,如果过滤规则设置不当,可能会导致无法获取数据。可以通过在canal.properties文件中配置canal.instance.filter.regex属性来设置过滤规则。
canal需要具有最高权限才能获取到所有的数据变更信息,如果没有正确配置数据库权限,可能会导致无法获取数据。需要确保canal连接的用户具有SELECT、REPLICATION SLAVE和REPLICATION CLIENT权限。
如果使用的是较老的canal版本,可能存在一些bug,可以尝试升级到较新的版本。
不是因为binlog模式是mixed导致无法获取数据,Canal对于mixed模式也是支持的。rowChage.getRowDatasList() sizes是0的原因可能有以下几种:
Canal没有订阅到对应的表或者库,导致没有解析到任何数据。
Canal解析到了数据,但是发生了一些异常,导致数据没有被正确封装到RowData中。这种情况下,可以查看Canal日志,查看是否有异常信息。
Canal的配置文件中没有正确配置过滤规则,导致数据被过滤掉了。
需要进一步排查原因,可以先检查一下Canal的订阅规则、过滤规则和日志,看看是否能够找到问题所在。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。