使用mysql的pool模式超过十分钟会连接不上数据库
发布于 10 年前 作者 madwolfcrazy 4653 次浏览 最后一次编辑是 8 年前
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连接。

额,看来怎么都是得 心跳查询了, 是不是不够优雅?

回到顶部