2014-02-27 3 views
0

RDS에서 MySQL에 연결을 시도하는 EC2 인스턴스 (우분투 실행)에서 node.js 응용 프로그램을 실행하고 있습니다. RDS 인스턴스의 보안 그룹에는 EC2 인스턴스의 보안 그룹이 포함됩니다. 두 인스턴스는 모두 같은 영역 인 us-east-1c에 있습니다.EC2의 node.js가 RDS에 연결하지 못했습니다

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 아웃 바운드 기본값을 살펴본 결과 모든 아웃 바운드 트래픽이 허용된다고 말합니다.

왜 이런 생각입니까?

답변

0

내 나쁜 생각 한 다양한 호스트를 상상하는 것을 시도하고,이 노드 버전에 문제가 있었다. 어떤 이유로 apt-get은 0.6 노드를 설치하지만 0.10이 필요했습니다. git에서 설치되면 매력처럼 작동합니다.

0

mysql에서 사용자의 권한 부여는 '사용자'문자열과 '호스트 이름'문자열에 의해 결정됩니다. 따라서 인증/사용자 문자열은 다음과 같이 보일 수 있습니다. 'xxxxx'@'xxxxx.xxxxx.us-east-1.rds.amazonaws.com'

노드 응용 프로그램이 '다른'사용자 문자열을 사용하여 연결하고있을 가능성이 있습니다.

당신은 MySQL의 명령 줄에서 다음을 시도 할 수 있습니다 :

mysql> CREATE USER 'xxxxxx'@'%' IDENTIFIED BY 'your_password'; 
mysql> GRANT ALL PRIVILEGES ON *.* TO 'xxxxxx'@'%' 
    ->  WITH GRANT OPTION; 

이 방법 당신은 당신이 상관없이 사용자의 호스트 부분이 무엇인지의 데이터베이스 서버에 액세스 할 수있는 계정을 가지고 있습니다.

사용자가 데이터베이스에 액세스 할 수 없다는 것이 더 간단한 문제 일 수도 있습니다. 시도해보십시오.

mysql> GRANT ALL PRIVILEGES ON *.* TO 'xxxxxx'@'xxxxx.xxxxx.us-east-1.rds.amazonaws.com' 
    ->  WITH GRANT OPTION; 

또는 더 간단 할 수도 있습니다. 데이터베이스가 있습니까?

mysql> SHOW DATABASES; 

당신이 시도 할 수 있습니다 제시 아니에요 경우 :

mysql> CREATE DATABASE <your-database-name>; 
0

내가 아무 문제없이 연결 mysql -u xxxxx -h xxxxx.xxxxxx.us-east-1.rds.amazonaws.com -p를 사용하여 MySQL의 CLI를 사용하여 RDS에 연결을 시도합니다.

그것은 당신의이 HOST_A을 가정 해 봅시다에서 mysql cli를 사용하여 RDS 벌금에 연결할 수 있다는 것을 의미합니다.

이 코드를 내 컴퓨터 (RDS 인스턴스와 함께 허용됨)에서 실행하면 정상적으로 RDS에 연결됩니다.

그것은 당신의이 Host_DEV을 가정 해 봅시다에서 를 사용하여 RDS 벌금에 연결할 수 있다는 것을 의미합니다.

그러나 필자가 작성한 RDS 연결 테스트 유틸리티를 사용하여 연결을 시도하면 Error: connect ECONNREFUSED이 표시됩니다.

그것은 당신의이 HOST_B을 가정 해 봅시다에 를 사용하여 RDS에 연결할 수 없습니다 의미한다.

RDS 보안 그룹의 설정과 비슷합니다. 또한 문제가 명시된대로 HOST_AHOST_DEV은 RDS 보안 그룹에 허용되어 있지만 HOST_B은 코드를 실행하려고 시도하지 않습니다.

  • RDS 보안 그룹 설정을 확인하고 거기에 필요한 액세스 권한이 있는지 확인하십시오.
  • 또한 코드가 HOST_DEV에서 제대로 작동하므로 코드에 문제가 있다고 생각하지 않습니다. HOST_B에서 mysql cli을 사용하여 RDS에 연결을 시도 했습니까? 그렇지 않다면 먼저 시도하십시오.

난 당신이 게시물에 언급이는 RDS 보안 그룹 구성 문제

관련 문제