环境信息
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!
原提问者GitHub用户
这个是mysql 5.7的rows query,针对每个DML既有row格式的binlog,也有statement格式的sql文本,可以通过canal.instance.filter.query.dml=true来关闭
原回答者GitHub用户agapple
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。