【问题标题】:Node.js MySQL connection not being released properlyNode.js MySQL 连接未正确释放
【发布时间】:2017-11-26 05:34:40
【问题描述】:

我认为我的连接没有被正确释放。有时我会收到一条错误消息,指出我的池已达到其限制。此外,有时随机访问数据库需要 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;

【问题讨论】:

    标签: javascript mysql node.js node-mysql


    【解决方案1】:

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

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

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

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

    后来我用它来停止发布连接的头痛

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-03
      • 2015-07-29
      • 2011-05-07
      • 1970-01-01
      • 1970-01-01
      • 2014-08-06
      • 1970-01-01
      • 2020-02-24
      相关资源
      最近更新 更多