ER_CON_COUNT_ERROR:node-mysql 中的连接错误太多
Posted
技术标签:
【中文标题】ER_CON_COUNT_ERROR:node-mysql 中的连接错误太多【英文标题】:ER_CON_COUNT_ERROR: Too many connections error in 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);
);
我应该如何重新设计上面的代码才能成功执行?
【问题讨论】:
【参考方案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 中查看如何实现。
【讨论】:
以上是关于ER_CON_COUNT_ERROR:node-mysql 中的连接错误太多的主要内容,如果未能解决你的问题,请参考以下文章
k8s calico-node错误日志 listen tcp: lookup localhost on 8.8.4.4:53: no such host