日期:2014-05-16  浏览次数:20853 次

mysql 八小时断开连接问题
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 |
+--------------------------+-------+  

修改操作:打开/etc/my.cnf,在属性组mysqld下面添加参数如下:
[mysqld]
interactive_timeout=28800000
wait_timeout=28800000

如上所示,网上一般都这么介绍,将这两个参数改变一下
有的说是设置成大值 ,有的说是设置成10

环境: 
Linux:
Last login: Thu Apr 22 12:47:20 2010 from 10.164.13.111
[root@localhost ~]# lsb_release -a
LSB Version: :core-3.1-ia32:core-3.1-noarch:graphics-3.1-ia32:graphics-3.1-noarch
Distributor ID: RedHatEnterpriseServer
Description: Red Hat Enterprise Linux Server release 5.4 (Tikanga)
Release: 5.4
Codename: Tikanga

MySql 数据库:
mysql> select version();
+------------+
| version() |
+------------+
| 5.1.39-log |
+------------+

Jboss 服务器:
jboss-5.0.0.CR2

struts1和Hibernate3.2 技术


那么我现在有一些问题了:
1:如果把interactive_timeout 和 wait_timeout设置成最大数那么数据库的压力会很大,一直都不释放资源
2:如果设置成10的话。 那么在Jboss启动的情况下,如果没有人访问此系统那么过10秒后再进行访问,Mysql会自动断开连接,则不能正常登录系统。
3:怎么能够在确保mysql的最忧化的情况下,又能在任意时间去访问此系统呢
  需要设置mysql还是设置jboss 或是在程序上做些手脚呢?



------解决方案--------------------
连接池里边没有设置心跳的ping sql语句吗?就是每隔多长时间去查询一次数据库。将上述两个值改成大于这个心跳间隔时间就可以了。
否则只能将上述值改大了。
------解决方案--------------------
在程序中放个定时模块,每60s 随便执行个语句,比如 select now();
------解决方案--------------------
当然不是。 你的连接池应该是保留这些连接,不应该被断掉。除非8小时根本没什么访问。
------解决方案--------------------
根据你的应用。
最大值时,你可以当成长链接,由数据库来控制时间。
最小值时,由你的程序来控制时间。