node mysql 自动释放_[nodejs]解决了mysql和连接池(池)自动断开的问题

在Node.js项目中使用MySQL时,遇到上线后因连接池自动断开导致503错误。文章详细介绍了问题背景,解释了`wait_timeout`变量导致的非活动连接关闭,并对比了正常模式和连接池的使用。通过示例代码展示如何正确使用连接池,确保每次请求都能创建并释放连接,避免资源浪费和连接断开的问题。
摘要由CSDN通过智能技术生成

38b544c7667601270e5f38f3fc07ed08.png

我最近正在做一个个人项目. 我试图对使用mongodb,sqlite和mysql. 分享有关mysql连接池的用法. 该项目部署在appfog中. 在项目中,我使用连接池连接到. 本地测试正常. 上线后,几次请求两个数据接口后node自动断开,总是报告503. 我不清楚,但经过今天的调查,终于解决了.

1.mysql链接正常模式

mysql的一般用法如下:

var mysql = require('mysql'),

27fb830c1db89893a3915c84efbc1738.png

env = {

host: 'localhost'node自动断开,

user: 'root',

密码: “ 2212”,

c096cc629c6209f104f2708fa10f3f39.png

: “ image_marker”

};

db =mysql.createConnection(env);

db.connect();

exports.do =function (sql, callback) {

db.query(sql, callback);

}

MySQL中有一个名为wait_timeout的变量,它表示操作超时时间. 当连接在一段时间内处于非活动状态时,该连接将自动关闭. 默认情况下,此值为28800(即8小时). 关于丢失后重新链接的常用链接,请参阅此处的门户

e3eb005106a784c146bda7ab4470ec6c.png

2. 使用连接池

在输入我的错误代码之前,官方网站只提供了连接池的用法,但没有提供与请求结合的示例. 由于缺乏经验,我认为对多个请求使用连接可以节省资源. 后来发现,连接会在一段时间后自动断开连接,从而导致了问题.

pool.getConnection(function (err, connection){

exports.do =function (sql, callback){

connection.query(sql, function (){

callback.apply(connection, arguments);

connection.release();

});

}

})

我在google / baidu之后找到了使用pool的实例

4087de6f02344a25e8e33be375a00ce8.gif

39095d1e51c92c041fa147635f5d4463.png

我发现他的代码使用池为每个请求创建一个连接. 改进代码最终解决了一段时间后自动断开连接的问题.

正确的代码是

pool =mysql.createPool(env);

exports.do =function (sql, callback){this.getConnection(function (err, connection){

connection.query(sql, function (){

callback.apply(connection, arguments);

connection.release();

});

})

}.bind(pool)

为每个请求创建一个连接并调用connection.release();使用后直接释放资源.

参考资料

1. 在Node.js中使用mysql模块时遇到的陷阱

2.connection-pools-in-node-mysql-for-node-js

本文来自电脑杂谈,转载请注明本文网址:

http://www.pc-fly.com/a/ruanjian/article-288390-1.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值