Mysql的8小时问题

当MySQL连接空闲超过8小时,会自动断开,导致Springboot应用出现异常。解决方案包括修改`wait_timeout`和`interactive_timeout`配置,或者在数据库连接URL后添加`autoReconnect=true`。此外,可通过调整连接池参数如`testWhileIdle`来确保获取健康连接。
摘要由CSDN通过智能技术生成

    2018.3.22,今天一早来到公司,就被告知有个问题需要处理,大概有1千多个错误邮件。然后自己开始在百度、谷歌上一通搜,原来是Mysql的8小时问题导致的,其实项目中已经解决了这个问题,只是用的是Spingboot项目,配置参数没有生效而已,Springboot默认使用的是内置tomcat的数据库连接池,所以将原有的参数配置spring.datasource.xxx=xxx改成spring.datasource.tomcat.xxx=xxx,参数生效,问题圆满解决了。但是这里有必要总结一下经典的Mysql的8小时问题。

程序报错

Could not open JPA EntityManager for transaction; nested exception is javax.persistence.PersistenceException: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
The last packet successfully received from the server was 1,767 milliseconds ago.  The last packet sent successfully to the server was 1,767 milliseconds ago.

问题复现:

    修改wait_timeout和interactive_timeout的值为20即可复现,定期查询数据库数据,即可复现。

问题描述:

    MySQL的默认情况下,当一个连接的空闲时间超过8小时后,MySql会断开该连接,而tomcat内置/c3p0/dbcp连接池则以为该连接依然有效,这种情况下,如何客户端代码向连接池获取连接,连接池就会把失效的连接返回给客户端代码,客户端代码在使用该失效的连接后就会抛出上面的异常。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值