神坑:
并發(fā)訪問(wèn)時(shí),通過(guò) conn.release()釋放連接不成功 ,導(dǎo)致一定訪問(wèn)達(dá)到連接數(shù)上限后,
pool.getConnection 直接卡死沒(méi)有任何的回調(diào)!
改成 pool.releaseConnection(conn) 才okay!
PS: 可以通過(guò)以下命令查看當(dāng)前的mysql連接數(shù):
mysqladmin -uroot -proot processlist
explain
開(kāi)發(fā)的項(xiàng)目中的確 出現(xiàn)了這個(gè)問(wèn)題,感謝原博主的分享。特此記錄一下
改造后的代碼
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)
// 事件驅(qū)動(dòng)回調(diào)
callback(qerr, vals, fields);
});
}
});
};