jdbc 执行 SQL 抛出 statement cancelled due to client request

【背景】
Java服务以mysql.8.0.13.jar 做为驱动进行业务 SQL 执行

【现象】
变更大表添加索引 Java 程序会不固定时间长短(30-60 分钟)抛出 statement cancelled due to client request。
image
但是查询发现 SQL 其实还在运行,并且最终执行索引添加成功.


【其余信息】
连接URL参数除了用户密码等必要参数外没有设置额外的操作,且通过执行命令 SHOW VARIABLES LIKE ‘max_execution_time’; 查看结果是0。
【TiDB 版本】

配置信息

【预期】

  • 为什么会超时?
  • 如何通过jdbc 限定任意一条语句的超时时间(DML/DDL/DQL)

tidb6.5还没支持mysql8吧,用5.7的驱动合适点

换成mysql/j 5.1 试下

https://docs.pingcap.com/zh/tidb/stable/dev-guide-choose-driver-or-orm

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.49</version>
</dependency>

除了上面提到的驱动版本问题,也要查查是不是nginx/haproxy这类负载均衡设置过连接超时时间。

多半是驱动的问题

驱动不兼容

驱动问题吧

驱动问题?

驱动不兼容吧 换版本试下

版本不兼容应该是

客户端驱动版本问题

tidb推荐的jdbc驱动选哪个呢 驱动建议8.0.30往后

https://docs.pingcap.com/zh/tidb/stable/dev-guide-third-party-tools-compatibility#connector-无法兼容-575-版本以下的服务端

可能是驱动不兼容或者Java框架 修改jdbc 参数 。可以先试一下降级,不行的话,考虑先对比 mysql 使用驱动是否正常。

选建议的驱动

用MySQL 5.7的驱动