`

Mysql空闲连接超时问题

阅读更多

Struts Problem Report

Struts has detected an unhandled exception:
Messages:  

    Software caused connection abort: socket write error
    The last packet successfully received from the server was58974 milliseconds ago.The last packet sent successfully to the server was 58974 milliseconds ago, which is longer than the server configured value of 'wait_timeout'. You should consider either expiring and/or testing connection validity before use in your application, increasing the server configured values for client timeouts, or using the Connector/J connection property 'autoReconnect=true' to avoid this problem.
    could not execute query
    could not execute query; nested exception is org.hibernate.exception.JDBCConnectionException: could not execute query

File:  org/hibernate/exception/SQLStateConverter.java

查了一下,原来是mysql超时设置的问题
如果连接闲置8小时 (8小时内没有进行数据库操作), mysql就会自动断开连接, 要重启tomcat.

 

 

解决办法:

 

 

    一种. 如果不用hibernate的话, 则在 connection url中加参数: autoReconnect=true

jdbc.url=jdbc:mysql://ipaddress:3306/database?autoReconnect=true&autoReconnectForPools=true

 


    二种。用hibernate的话, 加如下属性:
        <property name="connection.autoReconnect">true</property>
        <property name="connection.autoReconnectForPools">true</property>
        <property name="connection.is-connection-validation-required">true</property>

 


    三。要是还用c3p0连接池:
        <property name="hibernate.c3p0.acquire_increment">1</property>
        <property name="hibernate.c3p0.idle_test_period">0</property>
        <property name="hibernate.c3p0.timeout">0</property>
        <property name="hibernate.c3p0.validate">true</property>

 

 

 四。最不好的解决方案

 

使用Connector/J连接MySQL数据库,程序运行较长时间后就会报以下错误:

Communications link failure,The last packet successfully received from the server was *** millisecond ago.The last packet successfully sent to the server was ***  millisecond ago。

其中错误还会提示你修改wait_timeout或是使用Connector/J的autoReconnect属性避免该错误。

后来查了一些资料,才发现遇到这个问题的人还真不少,大部分都是使用连接池方式时才会出现这个问题,短连接应该很难出现这个问题。这个问题的原因:

MySQL服务器默认的“wait_timeout”是28800秒即8小时,意味着如果一个连接的空闲时间超过8个小时,MySQL将自动断开该连接,而连接池却认为该连接还是有效的(因为并未校验连接的有效性),当应用申请使用该连接时,就会导致上面的报错。

1. 按照错误的提示,可以在JDBC URL中使用autoReconnect属性,实际测试时使用了autoReconnect=true& failOverReadOnly=false,不过并未起作用,使用的是5.1版本,可能真像网上所说的只对4之前的版本有效。

2.没办法,只能修改MySQL的参数了,wait_timeout最大为31536000即1年,在my.cnf中加入:

[mysqld]

wait_timeout=31536000

interactive_timeout=31536000

重启生效,需要同时修改这两个参数。

分享到:
评论

相关推荐

    mysql 8小时空闲后连接超时的问题

    当mysql 8小时空闲后会出现连接超时问题,本文介绍要解决这个问题也有一个简单的方法,就是修改mysql的启动参数。缺省情况下mysql的timeout时间是28800秒,正好是8小时,增加一个0就可以了。

    tomcat中MySQL连接池配置 - feng - BlogJava.mht

    此文档主要是tomcat中MySQL连接池配置 - feng - BlogJava

    mysql连接过多和死掉以及拒绝服务的解决方法

    mysql连接过多导致总是死掉,后来网上搜索发现此文自Mysql 5.x的某个版本之后,Mysql的自动关闭空闲连接的特性修改了,如果一个连接空闲到超时时间(默认28000秒8小时),再次发起的Reconnect重新连接请求不会被...

    mysql连接基础库easymysql.zip

    可控制的连接池支持,SQL总是尽可能早地被 可用的 空闲连接抢到并执行; 支持master-slave模式,基于SHOW VARIABLES LIKE 'READ_ONLY'方式自动判断主库和从库,运行期间自动感知主从切换; 即将支持事务。 安装 ...

    基于MySQL的数据库中间件Meituan-DBProxy.zip

    当发向某个MySQL后台的的并发查询超过某个阈值时,会进行超时等待,直到有可用的连接,其中阈值与超时等待的时间都已经参数化,可以动态配置 set backend offline不再显示节点状态 支持set ...

    数据库连接池(database connection pool)是在 Java 中用于管理数据库连接的一种技术

    3. 连接管理和监控:连接池可以提供连接的管理和监控功能,包括连接的分配和回收、连接的空闲超时处理、连接的健康检查等。这样可以确保连接的有效性和可靠性,避免无效或失效的连接被分配给应用程序使用。 下面是...

    Go MySQL Driver:用于 Go 的 (golang) 数据库/sql 包的 MySQL 驱动程序-开源

    轻量级和快速的本地 Go 实现。 没有 C 绑定,只是纯粹的 Go。 通过 TCP/IPv4、TCP/IPv6、Unix 域... 由于一些中间件会在 5 分钟后关闭空闲连接,我们建议超时时间短于 5 分钟。 此设置也有助于负载平衡和更改系统变量。

    bonecp连接池

    #连接的空闲存活时间,当连接空闲时间大于该阀值时,清除该连接 bonecp.idleMaxAge = 240 #语句缓存个数,默认是0 bonecp.statementsCacheSize = 5 在Hibernate中使用BoneCP除了需要上面提到的jar包之外,还...

    java高并发秒杀系统.rar

    # 连接超时时间,默认30000(30秒) connection-timeout: 30000 # 测试连接是否可用的查询语句 connection-test-query: SELECT 1 #Mybatis-plus配置 mybatis-plus: #配置Mapper.xml映射文件 mapper-locations...

    百度地图开发java源码-EchartDemo:echart的案例,使用javaweb后端技术,通过ajax异步刷新更新数据

    百度地图开发java源码 ...最大空闲连接 --&gt; maxIdle=20 #&lt;!-- 最小空闲连接 --&gt; minIdle=5 #&lt;!-- 超时等待时间以毫秒为单位 6000毫秒/1000等于60秒 --&gt; maxWait=60000 #JDBC驱动建立连接时附带的连

    服务器配置.docx

    ,选择SQL文件点击执行 设置数据库空闲超时时间 查看数据库空闲超时时间:输入[show global variables like 'wait_timeout';]点击回车后效果如下: 设置数据库空闲超时时间:输入[set global wait_timeout=2592000;]...

    【分布式事务----LCN】LCN原理及使用方式.docx

    # 指明连接是否被空闲连接回收器(如果有)进行检验. 如果检测失败, 则连接将被从池中去除. spring.datasource.testWhileIdle=true # 指明是否在从池中取出连接前进行检验, 如果检验失败, 则从池中去除连接并尝试...

    Spring3中配置DBCP,C3P0,Proxool,Bonecp数据源

    #连接的空闲存活时间,当连接空闲时间大于该阀值时,清除该连接 bonecp.idleMaxAge = 240 #语句缓存个数,默认是0 bonecp.statementsCacheSize = 5 Spring中的配置信息 &lt;?xml version="1.0" encoding="UTF-8...

    Go的HTTP会话管理-Golang开发

    选择服务器端会话存储,包括PostgreSQL,MySQL,Redis,...支持每个请求多个会话,“闪存”消息,会话令牌再生以及空闲和绝对会话超时。 易于扩展和定制。 在HTTP标头或请求/响应主体中与客户端通信会话令牌。 功效

    P2P视频技术源码(VC)

    3) 长期idle的连接的超时处理. 由于超时处理需要遍历整个列表, 为了节约系统资源, IDLE时间比较长, 此外, 一般还需要定期报告系统统计数字, 因此需要及时性. 为此, 一般periodLog或者periodCheck都判断是执行这两者...

    P2P视频播放器 详细制作实例

    3) 长期idle的连接的超时处理. 由于超时处理需要遍历整个列表, 为了节约系统资源, IDLE时间比较长, 此外, 一般还需要定期报告系统统计数字, 因此需要及时性. 为此, 一般periodLog或者periodCheck都判断是执行这两者...

    基于HPSOCKET的C/S软件开发框架,功能全面,例程完善···-易语言

    目前仅支持MYSql数据库,支持设定初始和最大连接数、支持请求超时、支持心跳、支持最大和最小空闲数、支持最大空闲时间检测等等各项功能。至于连接池是用来干什么的,简单的说就是用空间换时间,提前搞N个连接,当有...

    Linux FTP服务搭建

    超时选项: idle_session_timeout data_connection_timeout accept_timeout connect_timeout 负载控制: max_clients=numerical value max_per_ip=numerical value anon_max_rate=value local_max_rate=value vsFTPd...

    scs:Go的HTTP会话管理

    支持每个请求多个会话,“刷新”消息,会话令牌再生,空闲和绝对会话超时以及“记住我”功能。 易于扩展和定制。 在HTTP标头或请求/响应主体中与客户端通信会话令牌。 高效的设计。 与相比,更小,更快,并且使用的...

Global site tag (gtag.js) - Google Analytics