有关nodejs中遇见mysql暗中同意8小时一连断开机制

2019-11-15 21:12 来源:未知

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

【mysql】连接的空闲时间超过8小时后 MySQL自动断开该连接解决方案,mysql8小时

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

**修改 /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; 

 

**2. 减少连接池内连接的生存周期,使之小于上一项中所设置的 wait_timeout 的值。 **

在 Spring 的配置文件中: 

<bean id="dataSource" 
class="com.mchange.v2.c3p0.ComboPooledDataSource"> 
<property name="maxIdleTime"value="${cpool.maxIdleTime}"/> 
<!--other properties --> 
</bean>    3、

连接数据库的时候加上autoReconnect=true这个参数:

jdbc:mysql://localhost:3306/accounant?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true

MySQL自动断开该连接解决方案,mysql8小时 1. 增加 MySQL 的 wait_timeout 属性的值。 修改 /etc/mysql/my.cnf文件...

解决这个问题的办法有三种:

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

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

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

**修改 /etc/mysql/my.cnf文件,在 [mysqld] 节中设置:

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

# Set a connection to wait 8hours in idle status.
wait_timeout =86400
相关参数,红色部分
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。我建议是将这两个参数都修改,以免引起不必要的麻烦。

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

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

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

2. 减少连接池内连接的生存周期,使之小于上一项中所设置的 wait_timeout 的值。
修改 c3p0 的配置文件,设置:

 

# How long to keep unused connections around(in seconds)
# Note: MySQL times out idle connections after 8hours(28,800seconds)
# so ensure this value is below MySQL idle timeout
cpool.maxIdleTime=25200
在 Spring 的配置文件中:

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


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

复制代码 代码如下:

 

<bean id="dataSource"
class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="maxIdleTime"value="${cpool.maxIdleTime}"/>
<!--other properties -->
</bean>

3. 定期使用连接池内的连接,使得它们不会因为闲置超时而被 MySQL 断开。 修改 c3p0 的配置文件,设置:

# Prevent MySQL raise exception after a long idle timecpool.preferredTestQuery='SELECT 1'cpool.idleConnectionTestPeriod=18000cpool.testConnectionOnCheckout=true
修改 Spring 的配置文件:

复制代码 代码如下:

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="preferredTestQuery" value="${cpool.preferredTestQuery}"/>
<property name="idleConnectionTestPeriod" value="${cpool.idleConnectionTestPeriod}"/>
<property name="testConnectionOnCheckout" value="${cpool.testConnectionOnCheckout}"/>
<!--other properties --></bean>

您可能感兴趣的文章:

  • Mysql经典的“8小时问题”
版权声明:本文由19463331韦德国际发布于计算机网络,转载请注明出处:有关nodejs中遇见mysql暗中同意8小时一连断开机制