开发者社区> 问答> 正文

用了 1.0.26 p3版本,为什么 EventType.QUERY 打印的sql是 insert

DEBUG com.pamirs.data.AbstractCanalClient - Event Type Is Query, sql --> UPDATE T_PDC_HANDOVER_INDEX_OR

代码如下

if (eventType == EventType.QUERY || rowChage.getIsDdl()) { if (rowChage.getIsDdl()) { StringBuilder exceptionMessage = new StringBuilder(); exceptionMessage.append("mysql has an ddl sql is [ ").append(rowChage.getSql()).append(" ]"); ExceptionHandle.handleException(new ExceptionMessageEntity(entityTask.getTableTask().getId(), ExceptionMessageEntityDesc.PAMIRS_DATA_MYSQL_PULL_DDL_MESSAGE, ExceptionMessageTypeEnum.pamirs_data, exceptionMessage.toString())); } else { logger.debug("Event Type Is Query, sql --> {}", rowChage.getSql()); } return; }

原提问者GitHub用户yriiolik

展开
收起
绿子直子 2023-05-09 08:10:42 75 0
2 条回答
写回答
取消 提交回答
  • RowsQueryLogEvent , 5.6之后的row模式的binlog会混杂statement和row,针对insert/update/delete也会记录对应的原始SQL,拿到的这个sql就是这货

    原回答者GitHub用户agapple

    2023-05-09 19:38:54
    赞同 展开评论 打赏
  • 根据您提供的信息,我们可以看出您使用的是 Canal 1.0.26 p3版本,且在处理事件时发现 EventTypeQUERYrowChageisDdltrue 时,打印的 SQL 为 UPDATE,而不是 INSERT。这可能是由于在 Canal Server 的配置文件中,没有正确设置 canal.instance.filter.regex 选项,以匹配您需要的表和操作类型。

    请确保在 Canal Server 的配置文件中正确设置了 canal.instance.filter.regex,例如:

    canal.instance.filter.regex=.*\\..*
    

    上面的配置将匹配所有数据库中的所有表。您还可以使用正则表达式来过滤特定的表,例如:

    canal.instance.filter.regex=mydb\\..*
    

    上面的配置将仅匹配名为 mydb 的数据库中的所有表。

    请检查您的配置文件是否正确设置了 canal.instance.filter.regex

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

相关电子书

更多
SQL Server 2017 立即下载
GeoMesa on Spark SQL 立即下载
原生SQL on Hadoop引擎- Apache HAWQ 2.x最新技术解密malili 立即下载