插入数据库(node.js)时Mysql连接超时
mysql connection timeout when inserting into database (node.js)
我正在使用npm mysql库。(很新的mysql)我有一个脚本,我正在运行插入数据到mysql表。但是,由于某些原因,某些连接在插入后会超时。我得到这个错误:
{ 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",系统调用:"连接",Fatal: true}
当我查看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
之前是否获得了池连接?
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
});
您可能需要为另一个函数传递连接对象,并在所有查询完成时执行回调(以释放连接),因为不将连接释放到池将最终关闭与服务器的连接。
相关文章:
- Node.js REST与MySQL句柄重新连接
- Express - 将 mysql 连接传递给脚本
- 如何将相同的MySQL连接用于我的整个Node.js应用程序
- 节点&MySQL:Can't端连接->异步混淆
- 如何在node.js中设置mysql连接,以在带无符号整数的算术上抛出超出范围的错误
- 通过Ajax调用PHP文件中的MySQL连接singleton对象
- Nodejs 实现数据库连接 (mysql) 的最佳方式
- 英特尔 XDK 将 mySQL 数据库连接到应用程序
- 节点 MYSQL 如何在自己的对象中获取连接的表
- 节点.js mysql 查询和网络连接
- Node 和 MySQL - 解决“连接过多”问题
- 在我的快速js应用程序中使用mysql连接
- 第二个请求的节点mysql连接错误
- 将混合android应用程序与mysql连接
- 插入数据库(node.js)时Mysql连接超时
- 如何保持mysql连接活在node.js
- 为什么MySQL连接字符串工作在bash而不是javascript
- Node.js MySQL连接问题
- ajax、php和mysql连接问题
- 在Express 4中打开mysql连接的最佳方法