分类: LINUX
2010-05-21 09:05:05
问:怎样才能解决mysql 8小时空闲后连接超时的问题?
答:当应用程序和数据库建立连接时,如果超过了8个小时,应用程序句不会去访问数据库,数据库就会出现断掉连接的现象 。这时再次访问就会抛出异常
一般的解决方法大多是在数据库连接字符串中增加“autoReconnect=true ”选项。但是这只对mysql4以前的版本有效。在最新的mysql中是无效的。其实要解决这个问题也有一个简单的方法,就是修改mysql的启动参数。缺省情况下mysql的timeout时间是28800秒,正好是8小时,增加一个0就可以了。
mysql>show variables like '%timeout';
打印结果如下:
+----------------------------+-------+
| Variable_name | Value |
+----------------------------+-------+
| connect_timeout | 5 |
| delayed_insert_timeout | 300 |
| interactive_timeout | 28800 |
| net_read_timeout | 30 |
| net_write_timeout | 60 |
| slave_net_timeout | 3600 |
| wait_timeout | 28800 |
+----------------------------+-------+
修改会话级变量
--修改会话级变量对当前会话来说立刻生效
mysql> set interactive_timeout=288000;
Query OK, 0 rows affected (0.00 sec)
mysql> set wait_timeout=288000;
Query OK, 0 rows affected (0.00 sec)
退出重新连接后,此参数恢复原值
修改全局变量
用set GLOBAL 命令设置全局变量
mysql> set GLOBAL interactive_timeout=288000;
Query OK, 0 rows affected (0.00 sec)
mysql> set GLOBAL wait_timeout=288000;
Query OK, 0 rows affected (0.00 sec)
当前此参数的值并不发生变化,先退出,然后重新连进去
mysql> show variables like '%timeout';
+----------------------------+--------+
| Variable_name | Value |
+----------------------------+--------+
| connect_timeout | 10 |
| delayed_insert_timeout | 300 |
| innodb_lock_wait_timeout | 50 |
| innodb_rollback_on_timeout | OFF |
| interactive_timeout | 288000 |
| net_read_timeout | 30 |
| net_write_timeout | 60 |
| slave_net_timeout | 3600 |
| table_lock_wait_timeout | 50 |
| wait_timeout | 288000 |
+----------------------------+--------+
10 rows in set (0.00 sec)
新的参数值生效
或者加到my.cnf中
wait_timeout:
服务器在关闭它之前在一个连接上等待行动的秒数。
interactive_timeout:
服务器在关闭它前在一个交互连接上等待行动的秒数。