`
sun_hejie
  • 浏览: 7463 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

连接的空闲时间超过8小时后,MySQL 就会断开该连接解决方案

阅读更多

MySQL 的默认设置下,当一个连接的空闲时间超过8小时后,MySQL 就会断开该连接,而 c3p0 连接池则以为该被断开的连接依然有效。在这种情况下,如果客户端代码向 c3p0 连接池请求连接的话,连接池就会把已经失效的连接返回给客户端,客户端在使用该失效连接的时候即抛出异常。
解决这个问题的办法有三种:
1. 增加 MySQL 的 wait_timeout 属性的值。
修改 /etc/mysql/my.cnf 文件,在 [mysqld] 节中设置:

# Set a connection to wait 8 hours in idle status.
wait_timeout
= 86400

相关参数,红色部分
mysql> show variables like '%timeout%';
+--------------------------+-------+
| Variable_name            | Value |
+--------------------------+-------+
| connect_timeout          | 5     |
| delayed_insert_timeout   | 300   |
| innodb_lock_wait_timeout | 50    |
| interactive_timeout      | 28800 |
| net_read_timeout         | 30    |
| net_write_timeout        | 60    |
| slave_net_timeout        | 3600 |
| wait_timeout             | 28800 |
+--------------------------+-------+        
同一时间,这两个参数只有一个起作用。到底是哪个参数起作用,和用户连接时指定的连接参数相关,缺省情况下是使用wait_timeout。我建议是将这两个参数都修改,以免引起不必要的麻烦。

这两个参数的默认值是8小时(60*60*8=28800)。我测试过将这两个参数改为0,结果出人意料,系统自动将这个值设置为。换句话说,不能将该值设置为永久。
将这2个参数设置为24小时(60*60*24=604800)即可。
set interactive_timeout=604800;
set wait_timeout=604800;

 

2. 减少连接池内连接的生存周期,使之小于上一项中所设置的 wait_timeout 的值。
修改 c3p0 的配置文件,设置:

# How long to keep unused connections around(in seconds)
# Note: MySQL times out idle connections after
8 hours(28,800 seconds)
# so ensure this value is below MySQL idle timeout
cpool.maxIdleTime
=25200

在 Spring 的配置文件中:

<bean id="dataSource"
     class
="com.mchange.v2.c3p0.ComboPooledDataSource">
    
<property name="maxIdleTime" value="${cpool.maxIdleTime}" />
    
<!-- other properties -->
</bean>

 

 

3. 定期使用连接池内的连接,使得它们不会因为闲置超时而被 MySQL 断开。
修改 c3p0 的配置文件,设置:

# Prevent MySQL raise exception after a long idle time
cpool.preferredTestQuery='SELECT 1'
cpool.idleConnectionTestPeriod=18000
cpool.testConnectionOnCheckout=true

修改 Spring 的配置文件:

<bean id="dataSource"
      class="com.mchange.v2.c3p0.ComboPooledDataSource">
    <property name="preferredTestQuery"
          value="${cpool.preferredTestQuery}" />
    <property name="idleConnectionTestPeriod"
          value="${cpool.idleConnectionTestPeriod}" />
    <property name="testConnectionOnCheckout"
          value="${cpool.testConnectionOnCheckout}" />
    <!-- other properties -->
</bean> 

 

 

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    mysql连接的空闲时间超过8小时后 MySQL自动断开该连接解决方案

    解决这个问题的办法有三种: 1. 增加 MySQL 的 wait_timeout 属性的值。 修改 /etc/mysql/my.cnf文件,在 [mysqld] 节中设置: # Set a connection to wait 8hours in idle status. wait_timeout =86400 相关参数,...

    MySQL+Hibernate下连接空闲8小时自动断开问题解决方案.pdf

    本文讨论了 MySQL+Hibernate 连接空闲8小时自动断开的问题,并提供了相关的解决方案。通过使用 C3P0 连接池机制,可以解决连接空闲8小时自动断开的问题。同时,需要进行测试和部署,以确保连接池机制正确地工作。

    MySQL+Hibernate下连接空闲8小时自动断开问题解决方案.docx

    MySQL+Hibernate 连接空闲8小时自动断开问题解决方案 知识点1: Hibernate 的连接池机制 在 Hibernate 中,默认情况下 使用的是 DriverManagerConnectionProvider,这是一个简单的连接池机制。它将打开的连接缓存在...

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

    在描述中提到的解决方案是通过调整MySQL的配置来解决8小时空闲后连接超时的问题。有两种方法: 1. 修改启动参数: 在启动MySQL服务时,可以添加`--interactive_timeout=288000`参数,将交互式连接的超时时间设置为...

    javaee mysql空闲关闭

    当JavaEE应用中的数据库连接在超过这个设定的时间没有执行任何操作,MySQL服务器会断开这个连接,这可能会导致应用出现异常或错误。因此,理解`wait_timeout`的工作原理以及如何在JavaEE环境中处理这种问题至关重要...

    MySQL数据库服务器下C3P0连接池的配置.pdf

    查阅相关文档后发现,造成报错的原因是:MySQL的默认设置为当一个连接的空闲时间超过8小时后,MySQL就会断开该连接,而C3P0连接池则以为被断开的连接依然有效。在这种情况下,如果客户端代码向C3P0连接池请求连接的...

    mysql连接池java源码

    阅读并理解这个纯Java实现的连接池源码,可以帮助我们深入理解数据库连接池的工作原理,为今后优化和定制自己的连接池解决方案打下坚实的基础。 总的来说,这个项目提供了一个学习和研究数据库连接池实现的绝佳...

    hibernate+proxool解决mysql8小时问题(附带jar包)

    MySQL数据库在长时间无操作的情况下,为了节省资源,会自动关闭闲置的连接,这通常被称为“8小时问题”。为了解决这个问题,开发者通常需要采取特定的策略,比如使用连接池。在本案例中,我们看到一种解决方案,即...

    mysql 异常com.mysql.jdbc.CommunicationsException

    在这个案例中,C3P0连接池中的某些连接由于长时间空闲而被MySQL服务器断开,但是C3P0连接池并不知道这些连接已经失效,当客户端再次请求这些连接时,就产生了`CommunicationsException`异常。 #### 解决方案 根据...

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

    当应用程序遇到这种问题时,一种常见的解决方案是在数据库连接字符串中添加"autoReconnect=true"选项,试图在断开连接后自动重新连接。然而,对于MySQL 4.0之前的版本,这种方法可能有效,但在较新的MySQL版本中,...

    mysql的连接数据问题

    2. 快速断开无用连接:避免长时间空闲连接占用资源,设置合理的`interactive_timeout`和`wait_timeout`。 3. 调整`max_connect_errors`:限制错误连接尝试次数,防止恶意攻击。 4. 监控连接状态:定期检查`SHOW ...

    DBCP连接池原理分析

    - **MySQL 8小时问题**:MySQL默认设置下,连接空闲8小时后会被自动断开,但DBCP连接池无法感知这一变化。 - **网络故障后的连接失效**:如遇到网络中断或数据库重启的情况,即使等待一段时间后,DBCP中的连接可能仍...

    基于PHP的SMProxy(MySQL数据库连接池).zip

    【标题】"基于PHP的SMProxy(MySQL数据库连接池)"是一个使用PHP编写的数据库连接池解决方案,它旨在优化和管理MySQL数据库的多个并发连接。在Web应用开发中,尤其是高并发场景下,数据库连接的创建和关闭频繁进行,这...

    Spring boot 数据库连接断线重连问题

    Spring Boot 数据库连接断线重连问题解决方案 Spring Boot 是一个基于 Java 语言的开源框架,它提供了许多功能来帮助开发者快速构建 Web 应用程序。然而,在使用 Spring Boot 连接数据库时,可能会遇到断线重连的...

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

    这个问题主要源于MySQL的一个特性改变,即从MySQL 5.x版本开始,空闲连接在超过默认的超时时间(28000秒,即8小时)后,会自动关闭。当应用程序尝试重新使用这些已关闭的连接时,它们无法成功重连,因为MySQL不再...

    行业-39 案例实战:如何解决经典的Too many connections故障?背后原理是什么.rar

    例如,MySQL的`wait_timeout`和`interactive_timeout`参数,分别控制非交互式和交互式连接的空闲时间,超过这个时间未使用的连接会被自动断开。 3. **调整数据库配置**:根据应用的并发需求,适当增加`max_...

    DBCP( Database Connection Pool )数据库连接池

    ### DBCP(Database Connection Pool)数据库连接池...DBCP是一个非常实用的数据库连接池解决方案,通过合理配置连接池参数,可以显著提升应用处理大量并发请求的能力。了解并掌握这些参数对于优化数据库访问至关重要。

    22.MySQL有哪些“饮鸩止渴”提高性能的方法?1

    若必须清理连接,可以优先杀死事务外空闲的线程(使用`kill connection + id`),然后考虑断开事务内空闲的连接。但需要注意,主动断开连接可能引发客户端错误,需确保应用端能正确处理并重新连接。 2. **优化连接...

Global site tag (gtag.js) - Google Analytics