ER_CON_COUNT_ERROR:node-mysql中的连接错误太多

我是一个节点初学者。 以下是我试图使用节点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); } }); } 

我应该如何重新devise上述代码才能成功执行它?

首先,您不需要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); } }); }; 

MySQL默认只接受最多100个同时连接。 在你的情况下,你正在创造〜1500所以你得到的错误是正常的。 你可以增加这个值,但是这个问题在你的代码中。

你应该使用一个池。 这将使节点创build一个连接池(我认为默认值是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(); }); }); } 

您也可以考虑使用单个连接并一次插入所有内容。 你可以在这个答案中看到如何实现这一点。