NodeJS mysql连接池使用及遇到的神坑
2022-07-11 本文已影响0人
何家小富富
神坑:
并发访问时,通过 conn.release()释放连接不成功 ,导致一定访问达到连接数上限后,
pool.getConnection 直接卡死没有任何的回调!
改成 pool.releaseConnection(conn)
才okay!
PS: 可以通过以下命令查看当前的mysql连接数:
mysqladmin -uroot -proot processlist
explain
开发的项目中的确 出现了这个问题,感谢原博主的分享。特此记录一下
改造后的代码
const mysqlDb = require('mysql');
const mysqlPool = mysqlDb.createPool(config.mysqlConnect);
const query = function (sql, callback) {
console.log("test--10:",sql);
// var mysqlPool = mysqlDb.createPool(config.mysqlConnect);
mysqlPool.getConnection(function (err, conn) {
if (err) {
console.log("test--11:",err);
callback(err, null, null);
throw new Error(" 从mysql 连接池中 获取 连接失败[luo Mr.]!!");
} else {
console.log("test--12:",sql);
if( sql == null ){
// 兼容sql为 null
return callback( undefined, "", "",);
}
conn.query(sql, function (qerr, vals, fields) {
console.log("test--13:",qerr, vals);
// 释放连接
// conn.release();
mysqlPool.releaseConnection(conn)
// 事件驱动回调
callback(qerr, vals, fields);
});
}
});
};