我正在使用npm mysql庫。 (很新的MySQL)我有一個腳本,我正在運行,將數據插入到MySQL表中。但是,由於某些原因,某些連接在某些插入後超時。我得到這個錯誤:插入數據庫時mysql連接超時(node.js)
{ Error: connect ETIMEDOUT
at PoolConnection.Connection._handleConnectTimeout (/Users/max/projects/stock-news-angular/node_modules/mysql/lib/Connection.js:425:13)
at Socket.g (events.js:286:16)
at emitNone (events.js:86:13)
at Socket.emit (events.js:185:7)
at Socket._onTimeout (net.js:334:8)
at tryOnTimeout (timers.js:232:11)
at Timer.listOnTimeout (timers.js:202:5)
--------------------
at Protocol._enqueue (/Users/max/projects/stock-news-angular/node_modules/mysql/lib/protocol/Protocol.js:141:48)
at Protocol.handshake (/Users/max/projects/stock-news-angular/node_modules/mysql/lib/protocol/Protocol.js:52:41)
at PoolConnection.connect (/Users/max/projects/stock-news-angular/node_modules/mysql/lib/Connection.js:136:18)
at Pool.getConnection (/Users/max/projects/stock-news-angular/node_modules/mysql/lib/Pool.js:48:16)
at Pool.query (/Users/max/projects/stock-news-angular/node_modules/mysql/lib/Pool.js:200:8)
at Object.<anonymous> (/Users/max/projects/stock-news-angular/app/scraper.js:90:34)
at initialize.exports.each (/Users/max/projects/stock-news-angular/node_modules/cheerio/lib/api/traversing.js:300:24)
at /Users/max/projects/stock-news-angular/app/scraper.js:82:29
at Array.forEach (native)
at /Users/max/projects/stock-news-angular/app/scraper.js:75:21
errorno: 'ETIMEDOUT', 代碼: 'ETIMEDOUT', 系統調用: '連接', 致命的:真正}
當我看着我的MySQL數據庫,它看起來是這樣的:
.... some data
+------------+----------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+---------------------------+
12131 rows in set (0.09 sec)
所以它看起來像一堆行被成功添加,但仍有許多不添加。這裏是創建連接的代碼 - 我使用的是連接池(不知道這是否正確),因爲我認爲我必須做很多查詢,所以我只是將它們集中在一起。池的聲明:
var pool = mysql.createPool({
host: 'localhost',
user: 'root',
password: 'secret',
database: 'stock_news'
});
和查詢:
pool.query({sql: 'INSERT INTO major_news SET ?', timeout:40000, values: post}, function(err, result) {
if (err)
console.log(err);
});
也許我不明白MySQL的不夠好,但我不知道爲什麼連接一段時間後超時。我已經把超時時間增加到了40000ms,所以我想這可能是其他的東西,我沒有看到。
你在做循環中的pool.query部分嗎? –
@HolgerWill是的。 – needhelpwithR
這可能是問題,您正在同時請求池中的多個連接。 您可以使用批量插入...請參閱http://stackoverflow.com/questions/8899802/how-do-i-do-a-bulk-insert-in-mysql-using-node-js –