Home 技术文章 MySQL连接一段时间不操作后出现异常的解决方案

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

关于mysql自动断开的问题研究结果如下,在mysql中有相关参数设定,当数据库连接空闲一定时间后,服务器就会断开等待超时的连接:

1、相关参数

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。我建议是将这两个参数都修改,以免引起不必要的麻烦。

2、修改参数

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

将这2个参数设置为一年( 31536000 )即可。

set interactive_timeout= 31536000 ;
set wait_timeout=31536000;


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

[mysqld]

interactive_timeout= 31536000

wait_timeout=31536000

如果一段时间内没有数据库访问则mysql自身将切断连接,之后访问java访问连接池时对数据库的数据通道早就关闭了, 因为dbcp连接池无法时时维护与数据库的连接关系,mysql5以后即使在dbcp配置中加入autoReconnect=true也没有效果。

0 comment

You may also like

Leave a Comment