服务器上的web项目隔一段时间就报错,刷新一下又好了(MySQL“8小时问题“)

部署在阿里云的Web项目每天首次访问时因MySQL连接失效导致报错,刷新后恢复正常。原因是MySQL非交互式连接闲置8小时后自动断开,连接池未及时发现。解决方案是调整连接池配置,如c3p0的maxIdleTime,使其小于MySQL的wait_timeout,确保连接池内的连接生命周期短于数据库的断开时间。
摘要由CSDN通过智能技术生成

问题描述

部署在阿里云上面的WEB项目,每天第一次访问的时候都连接不上,刷新一下又可以正常访问了,第二天依然出现同样的问题。

原因

项目中使用了数据库连接池。MySQL默认的非交互式连接的闲置时间是8小时,当连接池里的连接闲置超过8小时后就会被MySQL数据库自动断开而失效。但是连接池并不知道连接已经失效了,依然保持着这些失效的连接。所以web项目在一段时间后访问页面时报错,而在刷新页面后连接池重新获取了有效的连接,所以项目又可以正常访问了。

解决方案

思路

报错的主要原因就在于数据库和连接池之间信息不对称(数据库已经断开了连接,而连接池并不知道连接已断开)。
所以,我们只要在数据库断开连接的时候,让连接池也断开连接就好了。(即减少连接池内连接的生存周期,使之小于MySQL的“wait_timeout”的值,MySQL默认的“wait_timeout”值就是8小时)

解决步骤

减少连接池内连接的生存周期,使之小于MySQL的“wait_timeout”的值。
以c3p0连接池为例,修改连接池配置的maxIdleTime;

<bean id
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值