爱程序网

mysql 8小时空闲后连接失效的解决

来源: 阅读:

 

查了一下发现应用程序和mysql数据库建立连接,如果超过8小时应用程序不去访问数据库,数据库就断掉连接 。这时再次访问就会抛出异常。

关于mysql自动断开的问题研究结果如下,

1、c3p0、HikariCP等连接池配置。

 

2、在自己的程序中插入定时访问数据库的方法,比如使用Timer,Quartz或者spring中简易Quartz。

3、在mysql中有相关参数设定,当数据库连接空闲一定时间后,服务器就会断开等待超时的连接:
相关参数

mysql> show variables like '%timeout%';+-----------------------------+----------+| Variable_name               | Value    |+-----------------------------+----------+| connect_timeout             | 10       || delayed_insert_timeout      | 300      || innodb_flush_log_at_timeout | 1        || innodb_lock_wait_timeout    | 50       || innodb_rollback_on_timeout  | OFF      || interactive_timeout         | 28800    || lock_wait_timeout           | 31536000 || net_read_timeout            | 30       || net_write_timeout           | 60       || rpl_stop_slave_timeout      | 31536000 || slave_net_timeout           | 3600     || wait_timeout                | 28800    |+-----------------------------+----------+12 rows in set

 

同一时间,interactive_timeout,wait_timeout 这两个参数只有一个起作用。

到底是哪个参数起作用,和用户连接时指定的连接参数相关,缺省情况下是使用wait_timeout。

我在配置文件中将wait_timeout修改后在mysql中查寻到还是不起作用,于是将这两个参数都修改了,再次查询wait_timeout的值后才显示修改后的。

4、修改参数
这两个参数的默认值是8小时(60*60*8=28800)。测试过将这两个参数改为0,系统自动将这个值设置为1。也就是说,不能将该值设置为永久。
将这2个参数设置为24小时(60*60*24=86400)。
set interactive_timeout=86400;
set wait_timeout=86400;

也可以修改my.cnf,修改后重起mysql
打开/etc/my.cnf,在属性组mysqld下面添加参数如下:
[mysqld]
interactive_timeout=28800000
wait_timeout=28800000

如果一段时间内没有数据库访问则mysql自身将切断连接,之后访问java访问连接池时对数据库的数据通道早就关闭了

关于爱程序网 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 人才招聘 - 帮助