鉴于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

假如风(Ruan patrol卡塔尔华正茂段时间内未有数据库访谈则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_home88一必发,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服务器关闭人机联作式连接早先等待活动的秒数

相关文章