Hay*_*ire 7 javascript mysql amazon-rds node.js node-mysql
由于连接超时,我的node.js应用程序给出了5xx.这是我连接和查询的方式:
var mysql = require('mysql');
var config = {
host: '172.10.1.1',
port: 3306,
user: 'user',
password: 'pwd',
database: 'mydb',
connectionLimit: 15,
queueLimit: 30
}
var poolCluster = mysql.createPool(config);
var queryDB = function(query, cb) {
poolCluster.getConnection(function(err, connection) {
if(err) {
cb(err, null);
}
else {
connection.query(query, function (err, rows) {
connection.release();
cb(err, rows);
});
}
});
};
Run Code Online (Sandbox Code Playgroud)
此外,在另一个备用版本中,禁用连接池,代码如下所示:
queryDB = function(query, cb) {
var connection = mysql.createConnection(config);
connection.query(query, function(err, rows) {
connection.end();
cb(err, rows);
});
};
Run Code Online (Sandbox Code Playgroud)
但这两个设置都给出了错误:在Connection._handleConnectTimeout连接ETIMEDOUT
可以在此处看到与我当前设置类似的项目:https://github.com/hay-wire/NodeBootstrap/blob/master/models/UsersUtils.js
如果你能指出连接可能出错的话会很棒.谢谢.
UPDATE
由于node.js服务在集群模式下运行,我认为可能是跨线程的竞争条件从共享连接池获取mysql连接资源是原因.所以我关闭了群集模式到单线程模式并且连接超时停止了.
我仍然不相信这是造成这个问题的竞争条件.有什么方法来验证这个吗?
这与超时无关。我注意到以下内容(如果您在 AWS Lambda 函数之类的东西中使用它,我认为这也适用于许多带有回调的情况)。
您connection.end();在它实际将 COM_QUIT 数据包发送到 MySQL 服务器以关闭连接之前调用。因此,下次您刚刚导入时var mysql = require('mysql');(至少在我的情况下)它会抛出超时错误,因为之前的连接似乎仍然对您的机器开放,但实际上已被 MySQL 关闭。
所以要解决这个问题,请使用.destroy()而不是.end().
connection.query(query, function(err, rows)
{
connection.destroy();
cb(err, rows);
});
Run Code Online (Sandbox Code Playgroud)
其他明智.end()地使用回调正确使用,如:
connection.query(query, function(err, rows)
{
connection.end(function(errCon) //Don't do anything with end Error
{
// The connection is terminated now
cb(err, rows);
});
});
Run Code Online (Sandbox Code Playgroud)
这种情况不时发生,默认的acquireTimeout 有点低(10000 毫秒),因此如果您有多个连接正在运行,您应该增加它。您可以在连接选项中设置它
acquireTimeout: 1000000
var config = {
host: '172.10.1.1',
port: 3306,
user: 'user',
password: 'pwd',
database: 'mydb',
connectionLimit: 15,
queueLimit: 30,
acquireTimeout: 1000000
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15686 次 |
| 最近记录: |