我有一个运行在试图连接到RDS上的MySQL的EC2实例(运行Ubuntu)上的node.js应用程序。 RDS实例的安全组包含EC2实例的安全组作为授权条目。两个实例都在同一个区域,us-east-1c。EC2上的node.js无法连接到RDS
当我尝试使用MySQL CLI使用mysql -u xxxxx -h xxxxx.xxxxxx.us-east-1.rds.amazonaws.com -p
连接到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出站默认值,并且表示允许所有出站通信。
任何想法为什么会发生这种情况?