怎么解决MySQL连接闲置超时的问题?
沉沙 2018-05-17 来源 : 阅读 2028 评论 0

摘要:MySQL闲置超时,解决办法就是直接将这个时间设置得更长些;在MySQL中最多可以设置到365天(即31536000,默认单位是s),有两种设置的方法。

这里涉及到MySQL关于交互式连接和非交互式连接的概念。

交互式连接

通俗的说,在cmd里直接和MySQL进行各种sql操作的连接方式就是交互式连接,这里走的是TCP协议。

非交互式连接

而直接在项目中对MySQL进行sql操作的方式则是非交互式连接,我们的应用服务器通过Hibernate或者JDBC来实现和数据库的通信。


这两种连接方式都有各自对应的一个超时时间属性,交互式连接是interactive_timeout;非交互式连接是wait_timeout。

既然是闲置超时,那么解决的办法也很简单,就是直接将这个时间设置得更长些;在MySQL中最多可以设置到365天(即31536000,默认单位是s),有两种设置的方法。


第一种设置方式:修改配置文件my.ini文件

该配置文件在MySQL的安装目录下,如果没有此文件,可以复制my-default.ini文件,将生成的复件重命名成my.ini;然后在文件中添加如下语句:

wait_timeout=31536000  

interactive_timeout=31536000

如果没有这两个语句则表示默认值是8小时(60*60*8=28800);需要注意的是,wait_timeout的最大值分别是24天/365天(Windows/Linux)。

第二种设置方式:使用mysql命令进行修改

set global interactive_timeout=设置值

set global wait_timeout=设置值

不过闲置时间设置得过大并不好,MySQL里大量的SLEEP连接无法及时释放,拖累系统性能;设置得过小又容易产生如上所述的错误;由于我们的web项目中经常会使用到连接池技术,所以我们有更好的解决方法,那就是在项目中设置连接池的属性。

本文是使用的c3p0,所以这里只介绍c3p0的设置方法,如下:

方法一:减少连接池内连接的生存周期

既然MySQL连接的默认闲置时间是8小时,那么只要将连接池内连接的生产周期设置得比8小时短就行了。

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
    <!-- 连接的最大空闲时间,若超过该时间还没被使用过则会自动断开,单位为s,默认为0(即永远不会断开) -->      
    <property name="maxIdleTime" value="1800"/>       
</bean>

方法二:定期使用连接池内的连接

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">  
    <!--
        定义所有连接测试都执行的测试语句。在使用连接测试的情况下这个可以显著提高测试速度。
        注意:测试的表必须在初始数据源的时候就存在。Default:null
    -->  
    <property name="preferredTestQuery" value="SELECT 1"/>
 
    <!-- 每1800秒检查所有连接池中的空闲连接 -->
    <property name="idleConnectionTestPeriod" value="1800"/>
 
    <!--
        如果设置为true,则每次从池中取一个连接就做一下测试,使用automaticTestTable或者preferredTestQuery来做一条查询语句。
        看看连接好不好用,如果不好用就关闭它,接着重新从池中拿一个。
    -->
    <property name="testConnectionOnCheckout" value="true"/>    
</bean>


本文由职坐标整理发布,欢迎关注职坐标MySQL频道,学习更多数据库知识!

本文由 @沉沙 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved