能连上数据库,本地测试一切正常
项目上线没问题,pm2管理也正常
运行一段时间后出现以下错误
PROTOCOL_CONNECTION_LOST
PROTOCOL_ENQUEUE_AFTER_FATAL_ERROR
两天天以来都是凌晨断掉,重启项目又好了
原因
因为mysql连接断开,没有做异常处理,导致错误的代码继续在运行,导致node没有结束进程,所以node进程这些都好着,就是连不上数据库,重启服务就又恢复正常。
最后处理方案为:连接池
const mysql = require('mysql');
const pool = mysql.createPool({
host: '16.22.80.98',
user: 'root',
password: 'xxxxx',
database: 'xxxx',
port: '3306'
})
exports.query = (sql, params = []) => {
return new Promise((resolve, reject) => {
pool.getConnection((err, connection) => {
if (err) {
return reject(err);
}
connection.query(sql, params, (err, result) => {
//释放连接
connection.release();
if (err) {
return reject(err);
}
resolve(result);
});
});
});
};
连接池卡死问题
const mysql = require('mysql');
const pool = mysql.createPool({
host: '',
user: 'root',
password: '',
database: '',
port: '3306'
})
exports.query = (sql, params = []) => {
return new Promise((resolve, reject) => {
pool.getConnection((err, connection) => {
if (err) {
return reject(err);
}
connection.query(sql, params, (err, result) => {
//释放连接
// pool.releaseConnection(connection)
if (err) {
return reject(err);
}
resolve(result);
});
//这么设置,能够解决卡死问题
connection.release();
});
});
};
网友评论