开发者社区> 问答> 正文

部分表改动没有返回ROWDATA类型的entry

环境信息

canal version 1.1.3 mysql version 5.6

问题描述

其他数据表Update的时候收到的message含有transactionBegin,rowData,transactionEnd三个entry,但有一张表 core_hot_keyword Update的时候只返回transactionBegin和transactionEnd,缺少了rowData。配置除数据库外均是默认,故可排除表名过滤的可能。

步骤重现

创建一张core_hot_keyword的表 create table core_hot_keyword ( hot_keyword_id int auto_increment primary key, keyword varchar(20) not null, city_id varchar(20) null, scene int default '0' not null );

期待结果

收到含rowData的message

原提问者GitHub用户

展开
收起
古拉古拉 2023-05-08 12:19:38 59 0
2 条回答
写回答
取消 提交回答
  • 应该是旧版本主键不在第一列引起的

    原回答者GitHub用户zero47

    2023-05-09 17:36:50
    赞同 展开评论 打赏
  • 根据您的描述,您在使用 Canal 将 MySQL 数据库的变更事件同步到其他系统时,发现其中一张表(core_hot_keyword)在修改操作时未返回 ROWDATA 类型的 entry,而是仅有 transactionBegin 和 transactionEnd 类型的 entry,导致无法获取到具体的修改内容。针对这种情况,可能是以下原因导致:

    表结构与 Canal 配置不一致 请检查 core_hot_keyword 表的结构是否与 Canal 的配置文件中定义的一致。如果两者不一致,在执行 update 操作时会导致 Canal 无法正确解析数据,从而无法生成 ROWDATA 类型的 entry。建议检查 Canal 配置文件中是否开启了 GUESS 功能,如果开启了,建议关闭该功能,手动指定表的字段映射关系。

    MySQL 版本不支持 ROWDATA 解析 如果您使用的是较早版本的 MySQL 数据库(如 5.6),则可能存在无法解析 ROWDATA 的问题。建议升级 MySQL 数据库到较新版本(如 5.7 或 8.0),或尝试使用其他解析工具(如 MaxWell、Debezium 等)来解析 MySQL binlog。

    未开启表级别的 binlog row image MySQL 数据库需要开启 binlog row image 才能生成 ROWDATA 类型的 binlog 事件,否则只会生成 statement-based 的 binlog 事件。建议检查 MySQL 数据库中是否已经开启了 binlog row image,如果未开启,需要修改 MySQL 配置文件并重启 MySQL 服务。

    2023-05-08 16:04:54
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

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