“ER_CON_COUNT_ERROR:连接太多”与来自node.js的mysql池连接出错

时间:2018-03-29 00:14:44

标签: mysql sql node.js connection-pooling

我有大约20个使用以下配置访问我的数据库的node.js文件:

var pool = mysql.createPool({
    host: databaseHost,
    user: databaseUser,
    password: databasePassword,
    database: databaseName,
    multipleStatements: true
});

这些功能都使用以下模式:

pool.getConnection(function (err, connection) {
    if (err) {
        callback(err);
    } else {
        // Use the connection

        var sql = "...sql statement...";
        var inserts = [...inserts...];

        connection.query(sql, inserts, function (error, results, fields) {

            // And done with the connection.
            connection.release();

            // Handle error after the release.
            if (error) {
                callback(error);
            } else {
                callback(null, results);
            }
        });
    }
});

我最近开始收到错误:

"ER_CON_COUNT_ERROR: Too many connections" 

调用我的任何函数。我不太了解池概念。如果每个函数都在创建一个池,那么每次调用该函数时都会创建一个单独的池吗?

我理解获得连接和释放连接。只是不要真正得到createPool。

我尝试记录以下内容:

console.log(pool.config.connectionLimit);     // passed in max size of the pool
console.log(pool._freeConnections.length);    // number of free connections awaiting use
console.log(pool._allConnections.length);     // number of connections currently created, including ones in use
console.log(pool._acquiringConnections.length); // number of connections in the process of being acquired

结果是:

10
0
0
0

我可以增加连接数,但希望能更好地理解问题存在的原因。

1 个答案:

答案 0 :(得分:1)

如果你的createPool在函数内部每次都需要查询,那么是的,它是严重的!相反,只有一个不同的文件用于mysql连接。编写一个在函数内部创建池的类,然后在构造函数中,您只需从池中返回连接即可。这样,如果您只需要在项目中的任何位置使用此文件,并创建该类的对象,则可以使用它来查询和释放!