使用mysql的pool模式超过十分钟会连接不上数据库
var pool = mysql.createPool({'host':'127.0.0.1','user':'testdbu','password':'test','database':'test'});
pool.getConnection(function(err,client) {
if (err) console.log("DB pool => " + err);
var sql = "SELECT id,title,name FROM people WHERE t_hash="+mysql.escape(uri[2])+" LIMIT 1";
client.query(sql,function(error,results){
if(error) {
console.log('hh - ',error.code);
}
if(results.length > 0) {
res.write(results[0]['name']);
}else{
res.writeHead(404,{'Content-Type':'text/html'});
res.write('The page not found!');
}
client.release();
res.end();
});
});
控制台 报错 为 : hh - ECONNRESET 这是什么原因? 我到 mysql 上去 show processlist 发现那个链接还在 ,是sleep 状态,mysql 的 wait_timeout 是 28800
5 回复
黑科技:每隔一分钟,来一个“心跳查询”吧。。。
@coderhaoxin 额,这样可以?貌似没在 npm 的 mysql 的页面 看到哩
不好意思,手机操作不便,把回复误删了。可以直接pool.query()。源码中有这个方法。不过你还是需要心跳查询以保持连接。
我的做法是自己做连接池,通过取余均衡负载,一小时换掉一批mysql连接。
额,看来怎么都是得 心跳查询了, 是不是不够优雅?