8小时空闲后连接失效的解决,mysql超时机制

日期:2019-10-17编辑作者:数据大全

由于mysql默认8小时连接无访问,就会断开.为此查了一下资料,有同种比较简单的解决方案:

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

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

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

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

2、在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的值后才显示修改后的。

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

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

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

8小时空闲后连接失效的解决,mysql8小时 查了一下发现应用程序和mysql数据库建立连接,如果超过8小时应用程序不去访问数据库,数据...

mysql每次建立一个socket连接(connect)时,这个socket都会占用一定内存。即使你关闭(close)连接时,并不是真正的关闭,而是处于睡眠(sleep)状态。

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

当你下次再进行连接时,就可以快速启动当前处于睡眠状态的socket。但是过多的socket会占用大量的内存,为解决这个问题,mysql有个超时机制。

修改 /etc/mysql/my.cnf文件,在 [mysqld] 节中设置: 
# Set a connection to wait 8hours in idle status.  wait_timeout =86400 

你可以使用这条语句查看当前设置的超时时间长度:

将这2个参数设置为24小时(60*60*24=604800)即可。  set interactive_timeout=604800;  set wait_timeout=604800; 

show global variables like 'wait_timeout';

但仍然并不完美,一旦超过这个时间没有连接,仍然会报错.为此我设计了第二种方案,防止超时,以期终极解决

得到的结果如下:

2.定时访问数据库,在超时之内访问mysql,就可以避免mysql断开连接

+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| wait_timeout  | 28800   |
+---------------+-------+
1 row in set (0.00 sec)

 

默认是28800秒,也就是8小时

var cnt=0;
var conn=function(){
    connection.query('USE '+ db);     //查询MySQL中数据库
    cnt++;
    console.log("Mysql重连接成功! 次数:"+cnt);
}


//conn;
    setInterval(conn, 60*1000);//循环执行

 

澳门金莎娱乐手机版, 

wait_timeout参数的作用:当一个闲置的连接超过8小时后,该连接就会断开。

但是有时候需要长时间开启mysql连接,就需要改变这个参数的值。根据机器的硬件选择合适的参数值。

有两种方法可以改变这个参数的值:

1.通过语句改变这个参数的值。这中方法不需要重启mysql,但会先断开所有当前连接,然后重新连接。

语句:set global wait_timeout = 100;执行结果:

ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id:    3
Current database: *** NONE ***

Query OK, 0 rows affected (1.13 sec)

最后一行表示已经更改成功。

注:这个方法是局部性质的。当你下次重新启动mysql服务器时,执行show global variables like 'wait_timeout';时,仍然是修改前的值。

2.通过修改配置文件

在mysql的安装目录下,有个mysql.ini文件

添加如下的设置:

[mysqlld]

wait_timeout = 100

interactive_timeout = 100

然后重启mysql服务,更改就会生效。

注:这个参数的含义:

wait_timeout:mysql服务器关闭非交互式连接之前等待活动的秒数

interactive_timeout:mysql服务器关闭交互式连接之前等待活动的秒数

本文由澳门金莎娱乐网站发布于数据大全,转载请注明出处:8小时空闲后连接失效的解决,mysql超时机制

关键词:

索引碎片的查询,索引阐述系列六

一 . dm_db_index_physical_stats 重要字段说明 1.1 内部碎片:是avg_page_space_used_in_percent字段。是指页的填充度,为了使磁盘...

详细>>

Apache与Tomcat区别联系,WEB开发基本知识

    小编利用asp.net的webform框架举办web应用程序的付出已经大致八年了,在全部开拓生涯中,也选用过一年asp.net的...

详细>>

关键字在值为null的应用举例,mysql查询字段为空

转自:http://www.maomao365.com/?p=6873 在mysql中null包括了not null与ifnull或等等,下面我来给大家介绍在mysql中null的注意事项与...

详细>>

比较两个表不同行,表的记录操作

#mysql中 对于查询结果只显示n条连续行的问题# 在领扣上碰到的一个题目:求满足条件的连续3行结果的显示 X city built...

详细>>