【发布时间】:2014-03-31 17:45:17
【问题描述】:
我有一个在 EC2 实例(运行 Ubuntu)上运行的 node.js 应用程序,试图连接到 RDS 上的 MySQL。 RDS 实例的安全组包含 EC2 实例的安全组作为授权条目。两个实例都在同一个区域 us-east-1c。
当我尝试使用mysql -u xxxxx -h xxxxx.xxxxxx.us-east-1.rds.amazonaws.com -p 使用 MySQL CLI 连接到 RDS 时,我连接没有任何问题。
但是,当我尝试使用我编写的 RDS 连接测试实用程序进行连接时,我得到一个 Error: connect ECONNREFUSED。测试实用程序代码是:
var mysql = require('mysql');
mysqlConfiguration = 'production';
var mysqlConfigs = {
'production':{
host:'xxxxx.xxxxx.us-east-1.rds.amazonaws.com',
password:'xxxxx',
user:'xxxxx',
database:'xxxxx'
},
}
var connectionPool = mysql.createPool({
host: mysqlConfigs[mysqlConfiguration]['host'],
user: mysqlConfigs[mysqlConfiguration]['user'],
password: mysqlConfigs[mysqlConfiguration]['password'],
database: mysqlConfigs[mysqlConfiguration]['database'],
multipleStatements: true,
connectionLimit: 50,
});
connectionPool.getConnection(function(err,db){
console.log(err);
console.log(db);
if(db) db.release();
});
我收到的错误表明连接被拒绝。当我在我的开发机器(与 RDS 实例一起列入白名单)上运行此代码时,它正常连接到 RDS。
{ [Error: connect ECONNREFUSED]
code: 'ECONNREFUSED',
errno: 'ECONNREFUSED',
syscall: 'connect',
fatal: true }
我可以从命令行使用 mysql 进行连接,但我不能从 node.js 应用程序连接,这很奇怪。
我查看了 EC2 文档中的 EC2 iptables 出站默认值,它说所有出站流量都是允许的。
任何想法为什么会发生这种情况?
【问题讨论】:
标签: node.js ubuntu amazon-ec2 amazon-rds