canal1.1.5监控mysql8.0.27
mysql8.0.27的binlog类型是row
canal也配置了canal.instance.filter.query.dml=true
rowChage.getEventType()获取的类型全部是是QUERY
根据您提供的信息,您的Canal版本为1.1.5,监控的MySQL版本为8.0.27。您已经配置了canal.instance.filter.query.dml=true
,这意味着Canal只会监听DML(数据操作语言)类型的事件。
然而,您提到使用rowChage.getEventType()
获取的类型全部是QUERY类型。这可能是由于以下原因之一:
您的MySQL数据库中的数据表使用了MyISAM存储引擎,而不是InnoDB存储引擎。MyISAM不支持行级变更事件(row-based change events),因此Canal无法捕获到这些事件。要解决这个问题,您可以将数据表的存储引擎更改为InnoDB。
您的MySQL数据库中的某个数据表没有启用二进制日志(binary log)。二进制日志记录了所有对数据表进行的修改操作,包括插入、更新和删除等。如果您的数据表没有启用二进制日志,那么Canal就无法捕获到这些事件。要解决这个问题,您可以在创建数据表时启用二进制日志,或者在已有的数据表上启用二进制日志。
您的MySQL数据库中的某个数据表没有启用行级变更事件(row-based change events)。行级变更事件是一种更高效的变更事件类型,它只记录了实际发生变更的行,而不是整个数据表。要启用行级变更事件,您需要在创建数据表时指定ROW_FORMAT=ROW
,并在启动MySQL服务器时设置binlog_format=ROW
。
在 Canal 1.1.5 中,对于 MySQL 8.0.27 版本的 binlog 类型 row,getEventType() 方法返回的是 QUERY 类型。这是因为 canal 实现并未区分不同类型的 DML 操作,而是将它们视为一个整体。如果您需要获取详细的事件类型,请使用 RowChange 类的 isDML 方法进行检查。
此外,请检查您的 binlog 格式是否设置正确,并确保按照 Canal 文档进行配置。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。