环境信息
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用户
根据您的描述,您在使用 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 服务。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。