mysql连接的空闲时间超过8小时后 MySQL自动断开该连接解决方案 详细出处参考:http://www.jb51.net/article/32284.htm

MySQL 的默认设置下,当一个连接的空闲时间超过8小时后,MySQL 就会断开该连接,而 c3p0
连接池则以为该被断开的连接依然有效。在这种情况下,如果客户端代码向 c3p0
连接池请求连接的话,连接池就会把已经失效的连接返回给客户端,客户端在使用该失效连接的时候即抛出异常

解决这个问题的办法有三种:

1. 增加 MySQL 的 wait_timeout 属性的值。

修改 /etc/mysql/my.cnf文件,在 [mysqld] 节中设置:

# Set a connection to wait 8hours 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 8hours(28,800seconds)
# 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
timecpool.preferredTestQuery=‘SELECT
1‘cpool.idleConnectionTestPeriod=18000cpool.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>

详细出处参考:http://www.jb51.net/article/32284.htm

mysql连接的空闲时间超过8小时后 MySQL自动断开该连接解决方案
详细出处参考:http://www.jb51.net/article/32284.htm,码迷,mamicode.com

mysql连接的空闲时间超过8小时后 MySQL自动断开该连接解决方案
详细出处参考:http://www.jb51.net/article/32284.htm

时间: 2024-11-04 09:58:52

mysql连接的空闲时间超过8小时后 MySQL自动断开该连接解决方案 详细出处参考:http://www.jb51.net/article/32284.htm的相关文章

连接池(理论上应该是任意连接池) 、spring方法切入、 mybatis 、 redis等待请求 用了mysql连接的方法阻塞超过8小时导致mysql关闭连接 应用复活后用了已关闭连接而异常

服务进程中的服务方法blpop阻塞在redis队列下(等待请求),  使用方(客户代码)向该队列push请求以促使服务方法在阻塞的代码行继续运行下去. 服务方法使用了mybatis的SqlSessionTemplate, 在进入服务方法时spring为mybatis调用了连接池druid的getConnection, 假设很久没有请求来,一直阻塞在blpop处,直到mysql的wait_timeout默认8小时到达(导致mysql实际上已经关闭了该连接), 而此时处在方法内部, 一旦有请求来,代

MYSQL主从不同步延迟原理分析及解决方案(摘自http://www.jb51.net/article/41545.htm)

1. MySQL数据库主从同步延迟原理.要说延时原理,得从mysql的数据库主从复制原理说起,mysql的主从复制都是单线程的操作,主 库对所有DDL和DML产生binlog,binlog是顺序写,所以效率很高,slave的Slave_IO_Running线程到主库取日志,效率很 比较高,下一步,问题来了,slave的Slave_SQL_Running线程将主库的DDL和DML操作在slave实施.DML和DDL的IO操作 是随即的,不是顺序的,成本高很多,还可能可slave上的其他查询产生lo

mysql 5.1超过默认8小时空闲时间解决办法(错误:com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure)

报错: MySQL第二天早上第一次连接超时报错, com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure 原因: 上述问题是由mysql5数据库的配置引起的.mysql5将其连接的等待时间(wait_timeout .interactive_timeout)缺省为8小时.在其客户程序中可以这样来查看其值: mysql> show global variables like 'wait

&lt;转载&gt; MySQL 性能优化的最佳20多条经验分享 http://www.jb51.net/article/24392.htm

当我们去设计数据库表结构,对操作数据库时(尤其是查表时的SQL语句),我们都需要注意数据操作的性能.这里,我们不会讲过多的SQL语句的优化,而只是针对MySQL这一Web应用最多的数据库.希望下面的这些优化技巧对你有用. 1. 为查询缓存优化你的查询 大多数的MySQL服务器都开启了查询缓存.这是提高性最有效的方法之一,而且这是被MySQL的数据库引擎处理的.当有很多相同的查询被执行了多次的时候,这些查询结果会被放到一个缓存中,这样,后续的相同的查询就不用操作表而直接访问缓存结果了. 这里最主要

PLSQL 经常自动断开失去连接的解决过程

问题背景: 情况是这样的,很多开发同事的plsql上班时间开着8个小时,有时候他们出去抽烟后或者中午吃完饭,回来在plsql上面执行就报错无响应,然后卡住了半天动弹不了,非得重新登录plsql才生效,我猜猜是因为连接失效的缘故,经常碰到这种情况,还没有影响工作效率和工作心情的. 1,去查看以下CONNECT_TIME的连接时间 SQL> select * from dba_profiles t wheret.resource_name='CONNECT_TIME'; PROFILE       

Mybatis使用MySQL模糊查询时输入中文检索不到结果怎么办--转自http://www.jb51.net/article/88236.htm

这篇文章主要介绍了Mybatis使用MySQL模糊查询时输入中文检索不到结果的解决办法的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下 项目开发中,在做Mybatis动态查询时,遇到了一个问题:MySQL在进行LIKE模糊查询时,输入英文可以正常检索出结果,但是输入中文后检索得到的结果为空. 由于是使用GET方式请求,所以为了确保中文不乱码,在控制台接收到请求参数后,对中文进行了一次编码. ? 1 2 3 4 5 try { realName = new String(realNam

【第一个项目】MySQL第二天早上第一次连接超时报错,解决方法com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:

MySQL第二天早上第一次连接超时报错,解决方法com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure Last packet sent to the server was 0 ms ago 最近碰到一个mysql5

mysql中返回当前时间的函数或者常量

引用:http://blog.sina.com.cn/s/blog_6d39dc6f0100m7eo.html 1.1 获得当前日期+时间(date + time)函数:now() 除了 now() 函数能获得当前的日期时间外,MySQL 中还有下面的函数: current_timestamp()   current_timestamp localtime()   localtime localtimestamp()   localtimestamp     这些日期时间函数,都等同于 now(

mysql常处理用时间sql语句

Mysql日期函数,时间函数使用的总结,以及时间加减运算(转) select timediff('23:40:00', ' 18:30:00'); -- 两时间相减SELECT substring( timediff('23:40:00', ' 18:30:00'),1,5) ----“05:10”相减返回小时:分钟 select datediff('2008-08-08', '2008-08-01'); -- 7 -----两日期相减select TO_DAYS('2008-09-08')-T