我有一個運行在試圖連接到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出站默認值,並且表示允許所有出站通信。
任何想法爲什麼會發生這種情況?