Node.js没有正确释放MySQL连接

时间:2017-11-26 05:34:41

标签: javascript mysql node.js node-mysql

我认为我的关系没有得到正确发布。有时我会收到一条错误,指出我的游泳池已达到极限。此外,有时随机访问数据库需要15秒以上。每当我使用pool._allConnections.length检查正在使用的连接数时,它永远不会返回60以上的任何内容。这是我的代码:

const mysql = require('mysql');
const config = require('./config.json');

const pool = mysql.createPool({
  connectionLimit : 999,
  host: config.host,
  user: config.user,
  password: config.password,
  database: config.database
});

const db = (() => {

  _query = (query, params, callback) => {
    pool.getConnection((err, connection) => {

      if (err) {
        callback(null, err);
      } else {
        connection.query(query, params, (err, rows) => {
          connection.release();
          if (!err) {
            callback(rows);
          } else {
            callback(null, err);
          }
        });
      }

    });
  };

  return {
    query: _query
  };
})();

module.exports = db;

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,https://github.com/mysqljs/mysql/issues/1518帮助了我。注意行

  

是的,那是问题所在。我在每个上面调用mysql.createPool   查询。

实际上,您正在从query.js导入数据库(比如说您的邮政编码)来触发查询。每次启动查询时都会创建一个新池。要解决此问题,您可以将 createPool 代码块放到app.js中,并可以全局共享或者可以通过任何其他代码样式在query.js中使用。 参考官方文档https://github.com/mysqljs/mysql#pooling-connections查找行

  

由于pool.query方法是pool.getConnection的简写方法    - > connection.query - > connection.release()流,在通过pool.query添加的所有查询完成之前调用pool.end(),

后来我用它来阻止释放连接的头痛