The last packet successfully received from the server was 10,011 milliseconds ago. The last packet s

文章讨论了在生产环境中遇到的数据库问题,涉及MySQL报错和通信中断,原因在于一个未加索引的千万级数据表导致的慢SQL。通过添加索引并清理不必要的数据,解决了超时问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

生产报错
The last packet successfully received from the server was 10,011 milliseconds ago. The last packet sent successfully to the server was 10,011 milliseconds ago.; nested exception is com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure

SELECT * FROM t_gps_pos_trace WHERE last_update_time >= ‘2023-12-25T18:30:25’ AND last_update_time <= ‘2024-01-02T09:15’ LIMIT 0,1000;

last_update_time没有加索引

是由于慢sql引起的超时,经排查发现是有个千万数据的表没有加索引,最后加上索引即可(顺便把一下不必要的数据清除)

### 解决 MySQL Server 连接超时问题 当遇到连接超时时,可以通过调整 `connectTimeout` 参数来延长初始连接的时间。此参数定义了在尝试建立与数据库服务器的初次连接期间等待的最大毫秒数[^1]。 对于 Node.js 中使用 MySQL 客户端库的情况,在配置连接选项时可以指定 `connectTimeout` 的值: ```javascript var mysql = require('mysql'); var connection = mysql.createConnection({ host : 'localhost', user : 'me', password : 'secret', connectTimeout : 10011 // 设置为所需的毫秒数 }); ``` 需要注意的是,默认情况下调用 `connection.query()` 方法会在内部自动创建一个新的连接实例并执行查询操作[^2]。因此即使未显式调用 `.connect()` 方法也可能会触发新的 TCP 握手过程,并受到上述超时设置的影响。 另外一种情况是在长时间运行的应用程序中可能出现由于网络波动等原因造成的临时断开现象,这可能导致错误信息类似于 "Lost connection to MySQL server during query"[^3]。针对这类情形除了适当增加 `connectTimeout` 外还可以考虑优化应用程序逻辑以更好地处理重试机制以及异常恢复流程。 最后值得注意的一点是,如果应用部署环境较为复杂(例如通过 JDBC 访问),则可能涉及到更多层次上的配置项影响最终表现,比如 Java 应用中的 `com.mysql.jdbc.ConnectionImpl.getInstance` 可能关联到具体的驱动实现细节[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值