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

阅读: 评论:0

2024年1月25日发(作者:)

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

当应用程序和数据库建立连接时,如果超过了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.设置,有mysqld字段内增加参数:

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

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

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

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

本文发布于:2024-01-25 22:28:58,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/1706192938388.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

下一篇:mysql基本概念
标签:连接   数据库   问题   需要   重启   时间   空闲   使用
留言与评论(共有 0 条评论)
   
验证码:
排行榜

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23