Ich benutze die npm mysql-Bibliothek. (Ziemlich neu zu mysql) Ich habe ein Skript, das ich laufe, das Daten in eine mysql Tabelle einfügt. Aus irgendeinem Grund treten einige Verbindungen jedoch nach einigen Einfügungen aus. Ich bekomme diese Fehlermeldung:mysql Verbindungstimeout beim Einfügen in die Datenbank (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', Code: 'ETIMEDOUT', syscall: 'connect', fatal: true}
Wenn ich meine MySQL-Datenbank suchen, es sieht so aus:
.... some data
+------------+----------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+---------------------------+
12131 rows in set (0.09 sec)
So sieht es aus wie eine Reihe von Zeilen erfolgreich hinzugefügt werden, aber immer noch viele werden nicht hinzugefügt. Hier ist der Code zum Erstellen der Verbindung - ich verwende eine gepoolte Verbindung (nicht sicher, ob das richtig ist), da ich dachte, dass ich viele Abfragen ausführen musste, also würde ich sie einfach zusammenlegen. Die Erklärung des Pools:
var pool = mysql.createPool({
host: 'localhost',
user: 'root',
password: 'secret',
database: 'stock_news'
});
Und die Abfrage:
pool.query({sql: 'INSERT INTO major_news SET ?', timeout:40000, values: post}, function(err, result) {
if (err)
console.log(err);
});
Vielleicht verstehe ich nicht mysql gut genug, aber ich bin mir nicht sicher, warum die Verbindung nach einer gewissen Zeit einer Zeitüberschreitung ist. Ich habe das Timeout bereits auf 40000ms erhöht, also denke ich, dass es etwas anderes sein könnte, das ich nicht sehe.
Machst du den pool.query Teil in einer Schleife? –
@HolgerWill Ja, ich bin. – needhelpwithR
das könnte das Problem sein, Sie bitten um viele Verbindungen aus dem Pool virtuell zur gleichen Zeit. Sie könnten Masseneinfügungen verwenden ... siehe http://StackOverflow.com/Questions/8899802/How-Do-I-Do-Abulk-Insert-in-Mysql-using-Node-Js –