2016-11-05 27 views
0

私はnpm mysqlライブラリを使用しています。 (Pretty new to 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十分に理解していないが、私は、接続はしばらく後にタイムアウトされている理由はわかりません。私はすでにタイムアウトを40000ミリ秒に増やしました。それで、私はそれが私には見えない何かかもしれないと思っています。

+0

ループ内でpool.queryパーツを実行していますか? –

+0

@HolgerWillはい私です。 – needhelpwithR

+0

が問題である可能性があります。同時にプールからの多くの接続を同時に要求しています。 バルクインサートを使用できます... http://stackoverflow.com/questions/8899802/how-do-i-do-a-bulk-insert-in-mysql-using-node-js –

答えて

0

pool.queryを実行する前にプールに接続していますか?

var mysql = require('mysql'); 
var pool = mysql.createPool({ 
    host  : 'example.org', 
    user  : 'bob', 
    password : 'secret', 
    database : 'my_db' 
}); 

pool.getConnection(function(err, connection) { 
    // connected! (unless `err` is set) 
    // queries here, when all queries are finished you do connection.release() to return the connection back to the pool 
}); 

あなたは、最終的に接続を閉じますプールへの接続を解除しないことから、他の機能のために、接続オブジェクトを渡すと、すべてのクエリが実行されたとき(接続を解放するために)コールバックを行うために必要がある場合がありますサーバ。

+0

'pool.query()'を使っている場合は 'pool.getConnection()'を使う必要があります。 – robertklep

関連する問題