【问题标题】:ER_CON_COUNT_ERROR: Too many connections error in node-mysqlER_CON_COUNT_ERROR:node-mysql 中的连接错误太多
【发布时间】:2015-03-01 01:00:19
【问题描述】:

我是节点初学者。以下是我尝试使用 node mysql 执行的代码,但它一直给我这个错误:

error connecting: Error: ER_CON_COUNT_ERROR: Too many connections

::代码::

var size = item.length;// size is ~1500
for (var i=0; i<size;i++) {
    var connection = mysql.createConnection({
        host     : 'xxx.xxx.xxx.xxx',
        database : 'mydb',
        user     : 'test',
        password : 'test'
    });

    connection.connect(function(err, callback) {
        if (err) {
            console.error('error connecting: ' + err.stack);
            return;
        }
    });

    var entry = {
        id: item[i],
        time_created: Math.floor(Date.now() / 1000),
        time_created: Math.floor(Date.now() / 1000),
        price_range: 0
    };


    var query = connection.query('INSERT INTO mytable SET ?', entry, function(err, result, callback) {
        if(err) {
            console.log(err.message);
        }
    });

    connection.end(function(err) {
        if(err) {
            console.log(err.message);
        }
    });
}

我应该如何重新设计上面的代码才能成功执行?

【问题讨论】:

    标签: javascript mysql node.js


    【解决方案1】:

    首先,插入 1500 个项目不需要 1500 个连接。从 for 循环中删除该代码。

    类似这样的:

    var size = item.length;// size is ~1500
    var connection = mysql.createConnection({
        host     : 'xxx.xxx.xxx.xxx',
        database : 'mydb',
        user     : 'test',
        password : 'test'
    });
    
    connection.connect(function(err, callback) {
        if (err) {
            console.error('error connecting: ' + err.stack);
            return;
        }
    });
    
    connection.end(function(err) {
        if(err) {
            console.log(err.message);
        }
    });
    
    for (var i=0; i<size;i++) {
        var entry = {
            id: item[i],
            time_created: Math.floor(Date.now() / 1000),
            time_created: Math.floor(Date.now() / 1000),
            price_range: 0
        };
    
    
        var query = connection.query('INSERT INTO mytable SET ?', entry, function(err, result, callback) {
           if(err) {
              console.log(err.message);
           }
        });
    };
    

    【讨论】:

      【解决方案2】:

      MySQL 默认只接受最多 100 个同时连接。在您的情况下,您正在创建 ~1500,因此您得到的错误是正常的。您可以增加此值,但问题出在您的代码中。

      您应该改用游泳池。这将使节点创建一个连接池(我认为默认值为 10)并让您的查询共享它们:

          var mysql = require('mysql');
          var pool  = mysql.createPool({
              host     : 'xxx.xxx.xxx.xxx',
              database : 'mydb',
              user     : 'test',
              password : 'test'
          });
          for (var i=0; i<size;i++) {
              pool.getConnection(function(err, connection) {
                connection.query( 'INSERT INTO ...', function(err, rows) {
                  connection.release();
                });
              });
          }
      

      您还可以考虑使用单个连接并一次性插入所有内容。您可以在this 中查看如何实现。

      【讨论】:

        猜你喜欢
        • 2010-11-15
        • 2017-10-29
        • 2015-03-24
        • 2013-05-07
        • 2017-10-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-11
        相关资源
        最近更新 更多