RowChange对象信息如下。
unknownFields = {UnknownFieldSet@1470} "" bitField0_ = 30 tableId_ = 0 eventType_ = {CanalEntry$EventType@1609} "INSERT" isDdl_ = true sql_ = "insert into test(school_student_id, school_group_id, like_user_id, school_event_id) values('114', '1', '66889278', '61')" rowDatas_ = {Collections$EmptyList@1473} size = 0 props_ = {Collections$EmptyList@1473} size = 0 ddlSchemaName_ = "test" memoizedIsInitialized = 1 memoizedSerializedSize = -1 memoizedSize = -1 memoizedHashCode = 0
原提问者GitHub用户ltylty
1、检查binlog是否为row模式
2、row模式下的RowsQueryLogEvent事件
https://github.com/alibaba/canal/wiki/FAQ
原回答者GitHub用户agapple
根据您提供的 RowChange 对象信息,eventType 为 INSERT,isDdl_ 为 true,sql_ 中包含的是插入语句。这种情况可能是因为在 Canal Server 的配置中启用了自动解析 DDL(Data Definition Language) 功能,当收到 INSERT、UPDATE、DELETE 语句时,Canal Server 会自动将其解析成相应的 DDL 操作。
在 Canal Server 的配置文件中,如果使用了 canal.instance.master.address 属性指定了数据库 master 地址,同时开启了 canal.instance.dbUsername 和 canal.instance.dbPassword 等属性,那么 Canal Server 会自动检测并开启自动解析 DDL 功能。此时,无论接收到的是哪一种 SQL 语句,Canal Server 都会尝试将其解析成相应的 DDL 操作。
如果您不需要自动解析 DDL,可以将 Canal Server 的配置文件中启用自动解析 DDL 的相关属性注释掉或关闭,并重新启动 Canal Server。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。