MySQL数据库连接超时(Wait_timeout)问题总结_mysql数据库连接池

2020-02-28 其他工作总结 下载本文

MySQL数据库连接超时(Wait_timeout)问题总结由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“mysql数据库连接池”。

当应用程序和数据库建立连接时,如果超过了8个小时,应用程序不去访问数据库,数据库就会出现断掉连接的现象。这时再次访问就会抛出异常.一般的解决方法大多是在数据库连接字符串中增加“autoReconnect=true ”选项。但是这只对mysql4以前的版本有效。在最新的mysql中是无效的。其实要解决这个问题也有一个简单的方法,就是修改mysql的启动参数。缺省情况下mysql的timeout时间是28800秒,正好是8小时,增加一个0就可以了。决定从根源入手,设置mysql的wait_timeout为31536000(一年),再来试试。set-variable=wait_timeout=31536000 set-variable=interactive_timeout=31536000 问题得到了解决 想了深入解一下mysql的工作原理

百度了一下Google发现很多人都出现过这种问题,大多是配置hibernate时候出的问题,可惜我的项目中没有使用到hibernate只是简单的自己配了一个连接池,所以综合了问题的关键所在改了一下数据库配置,在这里暂且记录一下,以后备用。

Mysql服务器默认的“wait_timeout”是8小时,也就是说一个connection空闲超过8个小时,Mysql将自动断开该 connection。这就是问题的所在。

最近碰到了这个问题,检查后发现数据库连接池中保存的连接超时后失效了,下面是官方的解释 mysql gone-away

从Mysql 5.x的某个版本之后,MySQL的自动关闭空闲连接的特性被修改了,假如一个连接空闲到超时时间(默认28000秒8小时),再次发起的Reconnect重新连接请求不会被接受,需要重新建立新连接,这就导致了SER的重连机制不能正常工作:SER只会在需要操作数据库时去使用同一个连接接口,断开了则发起重新连接请求,而且这个问题短期内SER也不能够解决。

下文中将具体讲述处理的方法:

1.使用Mysql 4.0或4.1版本,如果没有用到Mysql 5的一些新特性比如存储过程触发器之类。

2.定时重启Mysql服务器或Ser(由于本问题可能同样会影响到其它一些需要Mysql支持的服务器程序,所以重启Mysql服务器为好,但需要检测Mysql服务器不被使用的一个时间重启比较难确定)

3.设置my.cnf,有mysqld字段内增加参数:

[mysqld]port = 3306socket = /tmp/mysql.sockwait_timeout= 500000interactive_timeout = 500000(500000秒约五六天的超时时间,可根据实际需要选择一个数据库可能空闲的最长时间稍大的时间值。)重启Mysqld应用即可,也可以在执行mysqld时加-o wait_timeout=500000参数同样效果。

在MySQL客户端show variable时应该可以看到最后一条从默认的wait_time=28000变成500000了。

(假如重启Mysqld不生效,可以重启机子)

《MySQL数据库连接超时(Wait_timeout)问题总结.docx》
将本文的Word文档下载,方便收藏和打印
推荐度:
MySQL数据库连接超时(Wait_timeout)问题总结
点击下载文档
相关专题 mysql数据库连接池 数据库连接 MYSQL Wait_timeout mysql数据库连接池 数据库连接 MYSQL Wait_timeout
[其他工作总结]相关推荐
    [其他工作总结]热门文章
      下载全文