开发者社区> 问答> 正文

为什么insert会被解析成ddl?

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

展开
收起
绿子直子 2023-05-09 08:07:28 77 0
2 条回答
写回答
取消 提交回答
  • 1、检查binlog是否为row模式

    2、row模式下的RowsQueryLogEvent事件

    https://github.com/alibaba/canal/wiki/FAQ

    原回答者GitHub用户agapple

    2023-05-09 19:37:36
    赞同 展开评论 打赏
  • 根据您提供的 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。

    2023-05-09 09:01:35
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
神龙云服务器产品及技术深度解析 立即下载
弹性创造价值:基于ECS的最佳性价比实践解析 立即下载
又快又稳:阿里云下一代虚拟交换机解析 立即下载

相关镜像