【MYSQL数据库异常处理】执行SQL语句报超时异常

ops/2025/3/6 22:14:58/

MYSQL执行SQL语句异常:The last packet successfully received from the server was 100,107 milliseconds ago. The last packet sent successfully to the server was 100,101 milliseconds ago.

这个错误表明 MySQL 服务器与 JDBC 连接之间的通信超时了。通常由以下几种情况引起:

错误原因

长时间没有交互(MySQL 服务器关闭了空闲连接)

MySQL 服务器的 wait_timeout 或 interactive_timeout 设置较短,导致长时间未使用的连接被关闭。

SQL 查询执行时间过长

如果查询运行时间超过 JDBC 连接的 socketTimeout,MySQL 驱动程序会终止连接。

网络问题

服务器端或客户端的网络连接中断,导致 JDBC 连接失败。

MySQL 服务器崩溃或重启

服务器重启后,原来的连接失效,导致客户端报错。

解决方案

✅ 方法 1:增加 MySQL wait_timeout 和 interactive_timeout

执行以下 SQL 命令,查看 MySQL 服务器的超时时间:

sql">SHOW VARIABLES LIKE 'wait_timeout';
SHOW VARIABLES LIKE 'interactive_timeout';

如果值较小(例如 28800 秒以下),可以尝试增加:

sql">SET GLOBAL wait_timeout = 28800;
SET GLOBAL interactive_timeout = 28800;

⚠️ 注意:此修改对现有连接无效,仅对新连接生效。如果需要持久生效,请修改 my.cnf 或 my.ini 配置:

[sql>mysqld]
wait_timeout=28800
interactive_timeout=28800

然后重启 MySQL 服务器。

✅ 方法 2:在 JDBC 连接 URL 中添加 autoReconnect=true&socketTimeout

修改 JDBC 连接 URL,设置自动重连和超时:

String url = "jdbc:sql>mysql://localhost:3306/testdb?autoReconnect=true&socketTimeout=60000";
Connection conn = DriverManager.getConnection(url, user, password);

autoReconnect=true:当连接丢失时,自动重新连接(⚠️ MySQL 8+ 已不推荐使用)。
socketTimeout=60000:设置 socket 超时时间为 60 秒,防止过早断开。

✅ 方法 3:使用 keep-alive 保持连接

如果 MySQL 连接长时间空闲,MySQL 服务器可能会断开连接。可以使用 HikariCP 或 Druid 连接池,每隔一段时间发送 ping 保持连接。

HikariCP 连接池配置
HikariConfig config = new HikariConfig();
config.setJdbcUrl("jdbc:sql>mysql://localhost:3306/testdb");
config.setUsername("root");
config.setPassword("password");
config.setMaximumPoolSize(10);
config.setMinimumIdle(2);
config.setIdleTimeout(30000);  // 30 秒空闲超时
config.setKeepaliveTime(15000); // 每 15 秒发送 keep-alive
HikariDataSource dataSource = new HikariDataSource(config);

keepaliveTime=15000:每 15 秒发送一个 ping,防止连接超时。

Druid 连接池配置
DruidDataSource dataSource = new DruidDataSource();
dataSource.setUrl("jdbc:sql>mysql://localhost:3306/testdb");
dataSource.setUsername("root");
dataSource.setPassword("password");
dataSource.setMinIdle(5);
dataSource.setMaxActive(10);
dataSource.setValidationQuery("SELECT 1");
dataSource.setTestWhileIdle(true);
dataSource.setTimeBetweenEvictionRunsMillis(30000); // 30 秒检测一次

validationQuery=“SELECT 1”:连接池在连接空闲时,发送 SELECT 1 测试连接是否可用。

✅ 方法 4:检查 MySQL 服务器状态

如果服务器已经重启或崩溃,尝试重启 MySQL:

sudo systemctl restart sql>mysql  # Linux
net stop sql>mysql && net start sql>mysql  # Windows

总结

在这里插入图片描述
还可以结合 连接池 + socketTimeout + keepalive 方式,来确保 JDBC 连接的稳定性。


http://www.ppmy.cn/ops/163708.html

相关文章

文献分享: ConstBERT固定数目向量编码文档

😂图放这了,大道至简的 idea \text{idea} idea不愧是 ECIR \text{ECIR} ECIR 👉原论文 1. ConstBERT \textbf{1. ConstBERT} 1. ConstBERT的原理 1️⃣模型的改进点:相较于 ColBERT \text{ColBERT} ColBERT为每个 Token \text{Tok…

PHP:动态网站开发的强大工具

在当今的互联网行业中,PHP(Hypertext Preprocessor,超文本预处理器)作为一种开源的服务器端脚本语言,已经在网站开发领域占据了举足轻重的地位。无论是个人博客、企业官网还是大型电子商务平台,PHP都以其高…

Vue.js 监听属性

Vue.js 监听属性 引言 在Vue.js框架中,监听属性(Watchers)是一种强大的功能,它允许开发者对数据的变化进行响应,从而实现数据的自动更新和复杂逻辑的处理。本文将详细介绍Vue.js监听属性的概念、使用方法以及在实际开发中的应用。 监听属性的概念 监听属性是Vue.js框架…

JavaWeb XML

1、定义 EXtension markup language XML:可扩展自定义标记语言 2、XML的存在意义和用法 XML存在约束,可以自定义但也存在书写规则,一般不需要逐行书写。 我们使用XML,只需要基于第三方应用程序和已提供框架的配置文件进行修改…

C# OnnxRuntime部署DAMO-YOLO香烟检测

目录 说明 效果 模型信息 项目 代码 下载 参考 说明 效果 模型信息 Model Properties ------------------------- --------------------------------------------------------------- Inputs ------------------------- name:input tensor:Floa…

DeepSeek 全套资料pdf合集免费下载(持续更新)

有很多朋友都关注DeepSeek相关使用的教程资料,本站也一直持续分享DeepSeek 学习相关的pdf资料,由于比较零散,这篇文章主要就是做一个汇总,并且持续更新,让大家可以及时获取下载最新的相关DeepSeek的资料。 持续更新地…

以影像技术重构智能座舱体验,开启驾乘互动新纪元

在汽车智能化浪潮席卷全球的今天,座舱体验早已突破传统驾驶功能的边界,成为车企竞争的核心赛道。美摄科技凭借其在图像处理与AI算法领域的深厚积累,推出全链路智能汽车图像及视频处理方案,以创新技术重新定义车载影像系统&#xf…

C# is

类型检查模式匹配(Pattern Matching)模式匹配的类型模式与 as 的区别性能注意事项总结 在 C#中, is 关键字有多种用途,主要用于 类型检查和 模式匹配。以下是 is 关键字的主要用法: 类型检查 is 关键字可以用来检…