首页 > 解决方案 > Nodejs - MySQL - 如何解决此脚本中的“连接太多”错误?

问题描述

我的应用程序有五个 node.js 脚本,它们使用 MySQL 数据库进行数据管理。每个脚本都读取和写入 MySQL 表。有必要提到我的系统流量很大。不幸的是,我多次收到“连接太多”错误。我与 MySQL 数据库通信的功能是:

let mysql = require('mysql2');

function doSqlCommand(inputArguments = {}, callbackFunction){
    var outputArguments = {};
    if (objType = Object.prototype.toString.call(inputArguments) != '[object Object]') {
        outputArguments['viResult'] = false;
        return false;
    }
    if ('mtConnectData' in inputArguments) { mtConnectData = inputArguments['mtConnectData']; }
    if ('mtSqlQuery' in inputArguments) { mtSqlQuery = inputArguments['mtSqlQuery']; }

    var pool = mysql.createPool(mtConnectData);

    function executeQuery(query, callback) {
        pool.getConnection(function (err, connection){
            if(err){
                return callback(err, null);
            }else if(connection){
                connection.query(query, function (err, rows, fields){
                    connection.release();
                    if (err){
                        return callback(err, null);
                    }
                    return callback(null, rows);
                })
            }else{
                return callback(true, "No Connection");
            }
        });
    }

    function getResult(query, callback) {
        executeQuery(query, function (err, rows) {
            if(!err){
                callback(null, rows);
            }else{
                callback(err, true);
            }
        });
    }
    getResult(mtSqlQuery, function (error, result, fields) {
        if(!error){
            outputArguments['viSql'] = mtSqlQuery;
            outputArguments['viFields'] = fields;
            outputArguments['viResult'] = result;
            outputArguments['viReturn'] = true;
            callbackFunction(outputArguments);
            pool.end();
        }else{
            outputArguments['viSql'] = mtSqlQuery;
            outputArguments['viError'] = error;
            outputArguments['viReturn'] = false;
            callbackFunction(outputArguments);
            pool.end();
        }
    });
}

在我的不同脚本中,我有:

let dbConCentral = {
    connectionLimit: 10,
    host: 'localhost',
    port: 3306,
    user: 'user',
    database: 'database',
    password: 'password',
    charset: 'utf8mb4',
    debug: false,
};

var mtTargetSymbol = 'AABBCC';
var mtSqlQuerySelect = `SELECT * FROM table_rules WHERE symbol='${mtTargetSymbol}'`;

sendingSelectArguments = {
    mtConnectData: dbConCentral,
    mtSqlQuery: mtSqlQuerySelect,
}

parsDbsMysql.doSqlCommand(sendingSelectArguments, function (callbackSelectFunction){
    console.log(callbackSelectFunction);
});

似乎创建的池无法正常工作。谁能告诉我如何解决“连接太多”错误?

标签: mysqlnode.jsconnection

解决方案


推荐阅读