开发者社区> 问答> 正文

canal1.1.5监控mysql8.0.27 问题

canal1.1.5监控mysql8.0.27
mysql8.0.27的binlog类型是row
canal也配置了canal.instance.filter.query.dml=true
rowChage.getEventType()获取的类型全部是是QUERY
image.png

展开
收起
lfujq3k64rqsq 2023-11-21 14:31:57 62 0
2 条回答
写回答
取消 提交回答
  • 根据您提供的信息,您的Canal版本为1.1.5,监控的MySQL版本为8.0.27。您已经配置了canal.instance.filter.query.dml=true,这意味着Canal只会监听DML(数据操作语言)类型的事件。

    然而,您提到使用rowChage.getEventType()获取的类型全部是QUERY类型。这可能是由于以下原因之一:

    1. 您的MySQL数据库中的数据表使用了MyISAM存储引擎,而不是InnoDB存储引擎。MyISAM不支持行级变更事件(row-based change events),因此Canal无法捕获到这些事件。要解决这个问题,您可以将数据表的存储引擎更改为InnoDB。

    2. 您的MySQL数据库中的某个数据表没有启用二进制日志(binary log)。二进制日志记录了所有对数据表进行的修改操作,包括插入、更新和删除等。如果您的数据表没有启用二进制日志,那么Canal就无法捕获到这些事件。要解决这个问题,您可以在创建数据表时启用二进制日志,或者在已有的数据表上启用二进制日志。

    3. 您的MySQL数据库中的某个数据表没有启用行级变更事件(row-based change events)。行级变更事件是一种更高效的变更事件类型,它只记录了实际发生变更的行,而不是整个数据表。要启用行级变更事件,您需要在创建数据表时指定ROW_FORMAT=ROW,并在启动MySQL服务器时设置binlog_format=ROW

    2023-11-29 14:51:33
    赞同 展开评论 打赏
  • 面对过去,不要迷离;面对未来,不必彷徨;活在今天,你只要把自己完全展示给别人看。

    在 Canal 1.1.5 中,对于 MySQL 8.0.27 版本的 binlog 类型 row,getEventType() 方法返回的是 QUERY 类型。这是因为 canal 实现并未区分不同类型的 DML 操作,而是将它们视为一个整体。如果您需要获取详细的事件类型,请使用 RowChange 类的 isDML 方法进行检查。
    此外,请检查您的 binlog 格式是否设置正确,并确保按照 Canal 文档进行配置。

    2023-11-21 23:02:18
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
搭建电商项目架构连接MySQL 立即下载
搭建4层电商项目架构,实战连接MySQL 立即下载
PolarDB MySQL引擎重磅功能及产品能力盛大发布 立即下载

相关镜像