在开启binlog_rows_query_log_events开关后,客户端抓到的dml语句为EventType.QUERY 类型,并且rowChange.getIsDdl()为false。
由于项目中需要针对ddl语句做不同的处理,因此想确认下,ddl语句的判断条件是什么?wiki中的
判断条件在这种状况下显然有问题。
原提问者GitHub用户JackEggie
在开启binlog_rows_query_log_events开关后,所有的DML语句都会被解析成QUERY事件,这是因为开启了该开关后,MySQL会将DML语句记录在binlog的QUERY事件中,而不是使用ROW或STATEMENT事件来记录。
因此,在使用Canal解析binlog时,所有的DML语句都会被解析成QUERY事件,但在rowChange对象中仍然可以获取到DML语句的相关信息,例如表名、主键值、字段值等。
对于DDL语句,rowChange.getIsDdl()方法可以用来判断该语句是否为DDL语句。如果该方法返回值为true,则表示该语句为DDL语句,否则为DML语句。
需要注意的是,该方法只能判断语句是否为DDL语句,但无法判断DDL语句的具体类型,例如CREATE TABLE、ALTER TABLE等。如果需要进一步判断DDL语句的类型,可以通过解析DDL语句的SQL语句来实现。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。