开发者社区> 问答> 正文

rowChage.getEventType()获取的类型全部是是QUERY,但是rowChage.g

环境信息

canal version server : canal.adapter-1.1.5-SNAPSHOT.tar.gz client: com.alibaba.otter canal.client 1.1.4 mysql version 5.7.30-log

问题描述

rowChage.getEventType()获取的类型全部是是QUERY,但是rowChage.getSql()获取sql语句都是INSERT或者UPDATE或者DELETE

步骤重现

RowChange rowChange = RowChange.parseFrom(entry.getStoreValue()); EventType eventType = rowChange.getEventType(); System.out.println("sql :"+ rowChange.getSql()); System.out.println(String.format("================> binlog[%s:%s] , name[%s,%s] , eventType : %s", entry.getHeader().getLogfileName(), entry.getHeader().getLogfileOffset(), entry.getHeader().getSchemaName(), entry.getHeader().getTableName(), eventType)); for (RowData rowData : rowChange.getRowDatasList()) { if (eventType == EventType.DELETE) { printColumns(rowData.getBeforeColumnsList()); } else if (eventType == EventType.INSERT) { printColumns(rowData.getAfterColumnsList()); } else { System.out.println("-------> before"); printColumns(rowData.getBeforeColumnsList()); System.out.println("-------> after"); printColumns(rowData.getAfterColumnsList()); } }

实际执行情况

mysqld.cnf 配置如下: symbolic-links = 0 server-id = 1 log-bin = /var/lib/mysql/mysql-bin binlog_format = ROW binlog-rows-query-log-events = true

Just put your stack trace here! image

原提问者GitHub用户

展开
收起
山海行 2023-04-27 20:17:08 129 0
1 条回答
写回答
取消 提交回答
  • 这个是mysql 5.7的rows query,针对每个DML既有row格式的binlog,也有statement格式的sql文本,可以通过canal.instance.filter.query.dml=true来关闭

    原回答者GitHub用户agapple

    2023-04-28 14:46:36
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

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