开发者社区> 问答> 正文

在开启binlog_rows_query_log_events开关后解析binlog全部都是quer

在开启binlog_rows_query_log_events开关后,客户端抓到的dml语句为EventType.QUERY 类型,并且rowChange.getIsDdl()为false。

由于项目中需要针对ddl语句做不同的处理,因此想确认下,ddl语句的判断条件是什么?wiki中的

提问352.jpeg

判断条件在这种状况下显然有问题。

原提问者GitHub用户JackEggie

展开
收起
绿子直子 2023-05-09 10:53:56 132 0
2 条回答
写回答
取消 提交回答
  • DDL语句的判断是对create/drop/alter table等的相关操作

    原回答者GitHub用户agapple

    2023-05-10 10:19:08
    赞同 展开评论 打赏
  • 随心分享,欢迎友善交流讨论:)

    在开启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语句来实现。

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

相关电子书

更多
ECS块存储产品全面解析 立即下载
神龙云服务器产品及技术深度解析 立即下载
弹性创造价值:基于ECS的最佳性价比实践解析 立即下载

相关镜像