使用node在mySQL中插入大量数据时出错.js(错误代码:"ECONNRESET")



使用node.js在mysql中插入大容量数据时遇到错误这是的数据

instData = [ [ '73caf3d0-f6a4-11e8-8160-eb5f91ce3830',
'20181017'],
[ '73caf3d1-f6a4-11e8-8160-eb5f91ce3830',
'20181019'],
... 49316 more items ]

这是连接代码的一部分:

let pool = mysql.createPool(db);
module.exports = {
connPool (sql, val, cb) {  //function name
pool.getConnection((err, conn) => {
if(err){
console.log('Connection Error:' + err);
}else{
console.log('allConnections:' + pool._allConnections.length);
let q = conn.query(sql, val, (err, rows,fields) => {
if (err) {
console.log('Query:' + sql + ' error:' + err);
}
cb(err, rows, fields);
conn.release();
});
} // end if
}); // end pool.getConnection
}, 
......

当我运行插入代码时,我得到了错误。

sql_inst ='insert into demo (id,upload_time) values ?';
func.connPool(sql_inst, [instData], (err,rows,fields) => {
if(err==null){
res.json({code: 200, msg: 'success', data: req.body });
} else {
res.json({code: 400, msg: 'failed:'+err});
}
});

错误信息:

{ Error: read ECONNRESET
at TCP.onStreamRead (internal/stream_base_commons.js:111:27)
--------------------
at Protocol._enqueue (D:Projectstestnode_modulesmysqllibprotocolProtocol.js:144:48)
at PoolConnection.query (D:Projectstestnode_modulesmysqllibConnection.js:200:25)
at pool.getConnection (D:Projectstestsqlfunc.js:29:26)
at Ping.onOperationComplete (D:Projectstestnode_modulesmysqllibPool.js:110:5)
at Ping.<anonymous> (D:Projectstestnode_modulesmysqllibConnection.js:502:10)
at Ping._callback (D:Projectstestnode_modulesmysqllibConnection.js:468:16)
at Ping.Sequence.end (D:Projectstestnode_modulesmysqllibprotocolsequencesSequence.js:83:24)
at Ping.Sequence.OkPacket (D:Projectstestnode_modulesmysqllibprotocolsequencesSequence.js:92:8)
at Protocol._parsePacket (D:Projectsvutestnode_modulesmysqllibprotocolProtocol.js:278:23)
at Parser.write (D:Projectstestnode_modulesmysqllibprotocolParser.js:76:12)
errno: 'ECONNRESET',
code: 'ECONNRESET',
syscall: 'read',
fatal: true }

连接似乎已经关闭,但问题是我使用连接池,它不应该每次都连接。

当我减少数据的大小时,例如数据包含100条记录,代码就成功运行了。

正在运行env:节点:v10.11.0mysql:v5.7

我对这个问题有多冷淡?太棒了!

我已经解决了这个问题。它是由默认定义max_allowed_packet引起的。在my.ini(C:\ProgramData\MySQL\MySQL Server 5.7(中查找max_allowed_packet。更新为"max_allowed_packet=64M"。重新启动mysql。完成。

最新更新