nodejs 连接 mysql, 运行一段时间后 报 Cannot enqueue Query after fatal error的处理

小白一枚,记录下在使用nodejs连接mysql的过程中出现的问题。

第一步,连接数据库,按照网上的操作,一切正常

const mysql = require('mysql');
 
// 创建连接池
const pool = mysql.createPool({
  connectionLimit: 10,
  // 其他配置...
});
 
// 执行查询
pool.query('SELECT 1 + 1 AS solution', (error, results, fields) => {
  if (error) throw error;
  console.log('The solution is: ', results[0].solution);
});
 
// 当你需要结束数据库连接时
pool.end((err) => {
  if (err) {
    // 处理连接结束时的错误
    return;
  }
  console.log('All connections in the pool have ended.');
});
 
// 如果需要继续查询数据库,可以重新建立连接
pool.on('end', () => {
  // 连接池结束时的回调,可以在这里重新连接
  console.log('Connection pool has ended.');
  // pool.connect(); // 可以在这里重新连接
});

测试没有问题,各种增删改都ok,哈皮又充实的一天。但是,第二天过来发现报错,Cannot enqueue Query after fatal error 。各种查资料,使用连接池,捣鼓一天,没有发现问题,似乎重启一下就全好了,结果第二天上班又报相同的错。这。。。忍不了啊,又是各种找资料的一天。终于,在不经意间发现了问题,mysql在无连接的情况下,默认会在8小时自动断开连接,敲重点,问题终于找到,难怪我一睡觉就给我搞事,原来是‘饿死了’。

问题找到,再处理就简单了。无非就两种,
一:修改mysql自动断开连接的时间,但是对于我这种几天可能都没有人访问的,不是好的解决方式。
二:修改代码,让mysql一直有连接在,一个简单的轮询解决。话不多说,上代码。

var pingInterval;

// 每个小时ping一次数据库,保持数据库连接状态
clearInterval(pingInterval);
pingInterval = setInterval(() => {
    console.log('ping...');
    db.ping((err) => {
        if (err) {
            console.log('ping error: ' + JSON.stringify(err));
        }
         });
}, 3600000);

哎,老鸟一眼看穿本质,菜鸟折腾了几天。又笨又菜,怕又忘了,记录下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值