连接mysql超时问题解决

近期在用MySQL开发的时候,遇到了一个很有意思的问题。就是MySQL特有的wait_time(超时自动断开连接)机制。Mysql服务器默认的”wait_timeout”是8小时(也就是默认的值默认是28800秒),也就是说一个connection空闲超过8个小时,Mysql将自动断开该connection。这对我们程序员来说,是一个很麻烦的地方,不过它也是mysql的一大优点。长期的连接会占用大量的资源。而且许多无用、未断开的连接产生的大量sleep进程更是拖累了cpu。所以MySQL是很乐意断开这些连接回收资源的。

当然这种问题的解决方法是有很多途径的。比如说延长wait_time的时间(博主是不推荐这种方式的当然需求不同,可能有时用得上),然后目前最优的方法就是连接监测了。下面对这两种方法进行详细的解释:

一、        延长wait_time时间:

Wait_timeout的值可以设定,但最多只能是2147483,不能再大了。也就是约24.85天 。不过考虑到sleep进程的问题,这种方法其实是很粗暴的。甚至博主建议如有性能需求,应该适当缩短MySQL的wait_time的时间。修改wait_time值的方式有两种:

1)编辑mysql目录里的:my.cnf(windows下为my.ini),设置时间为最大时间,设置方法如图:

首先,打开命令行,打开vi编辑画面vi /etc/my.cnf,设置wait_time值。

好了,现在重启MySQL服务(命令行执行命令:/etc/init.d/mysql restart),进入mysql(命令行执行命令:mysql -u root –p)执行命令:show global variables like ‘wait_time’;便可以看见更改后的wait_time的值了。

2)在MySQL命令行里通过SET来设置:

mysql> set global wait_timeout=10;
mysql> show global variables like 'wait_timeout';

操作如图:


此方法是不需要重启服务的,直接进mysql查看wait_time时间是否修改成功即可。

二、        连接监测(使用连接前先发送sql语句,检测连接是否有效):

是否看到标题就觉得这个方法很麻烦呢,其实不会的。前辈们已经帮我们实现了这些麻烦的步骤,我们只需要借力就行了。当下比较流行的连接框架有很多。比如说proxool、dbcp、C3P0。其中h 推荐使用proxool、C3P0,spring推荐使用dbcp,本文以spring-dbcp为例。实现非常简单,好了,老规矩,看图:


配好数据源,其他一切如旧。搞定!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值