programing

원격 서버에서 Amazon EC2의 mysql에 연결

projobs 2022. 10. 21. 21:57
반응형

원격 서버에서 Amazon EC2의 mysql에 연결

로컬 머신에서 EC2의 db에 접속하고 싶습니다만, 할 수 없고, 모든 것을 시도했습니다.EC2에 접속하기 위해서, 다음의 커맨드를 사용하고 있습니다.

mysql -uUSERNAME -hEC2_IP -pPASSWORD

이 오류는 생성됩니다.

오류 2003(HY000):'IP'의 MySQL 서버에 연결할 수 없음(110)

my.cnf를 수정했습니다.

skip networking
bind-address            = 0.0.0.0

아직 데이터베이스에 접속할 수 없다

위의 응답에서 언급한 것처럼 AWS 보안 그룹 및 기타 관련 정보일 수 있습니다.그러나 사용자를 생성하여 리모트액세스 '%'를 부여했는데도 이 오류가 발생한 경우 mysql 설정 파일을 확인하고 debian에서 다음 행을 찾을 수 있습니다.

bind-address            = 127.0.0.1

다음으로 변경합니다.

bind-address            = 0.0.0.0

mysql을 재시작합니다.

debian/ubuntu의 경우:

/etc/init.d/mysql restart

이게 너한테 효과가 있길 바라.

다음 중 하나의 이유가 있을 수 있습니다.

  1. 시스템에서 Amazon EC2 인스턴스로 원격 액세스를 허용하려면 Amazon Security Group에 항목을 만들어야 합니다.:- 질문하신 내용에 따르면 0.0.0.0으로 엔트리를 작성하신 것 같기 때문에 모든 사람이 머신에 접속할 수 있습니다.
  2. MySQL에서 사용자가 원격 시스템에서 연결할 수 없음: 기본적으로 MySql은 관리자 액세스 권한이 있는 루트 사용자 ID를 생성합니다.그러나 루트 ID의 액세스는 localhost로만 제한됩니다.즉, 리모트 머신에서 MySql에 액세스하려고 하면 올바른 패스워드를 가진 루트 사용자 ID가 동작하지 않습니다.이 문제를 해결하려면 루트 사용자 또는 다른 DB 사용자가 원격 시스템에서 MySQL에 액세스할 수 있도록 허용해야 합니다.리모트 머신의 DB에 root 사용자 ID를 액세스 할 수 있도록 하는 것은 추천하지 않습니다.와일드카드 문자 %를 사용하여 원격 시스템을 지정할 수 있습니다.
  3. 시스템의 로컬 방화벽이 활성화되지 않았는지 확인합니다.유효하게 되어 있는 경우는, 포토 3306 이 열려 있는 것을 확인합니다.

다음 링크를 클릭해 주세요.MySQL 데이터베이스 서버에 대한 원격 액세스를 활성화하는 방법

업데이트:2017년 2월

다음은 MySQL(Amazon EC2에 배포됨)의 원격 액세스를 위한 전체 단계입니다.-

1. 인바운드 규칙에 MySQL을 추가합니다.

인스턴스의 규칙 -> -> ec2 Security Group 선택 -> " -> " -"MySQL/Aurora으로서 「 」에 송신원.Anywhere

2. bind-address = 0.0.0을 my.cnf에 추가합니다.

인스턴스 콘솔:

sudo vi /etc/mysql/my.cnf

vi 를 .
파일, my.cnf 파일 뒤에 [mysqld].

bind-address = 0.0.0.0

을 하려면 을 입력합니다.:wq복수)

MySQL을 다시 시작합니다.

sudo /etc/init.d/mysqld restart

3. 리모트 사용자를 생성하여 권한을 부여합니다.

MySQL 로그인:

mysql -u root -p mysql합니다) ('비밀번호 입력')

이제 다음 명령을 작성합니다.

CREATE USER 'jerry'@'localhost' IDENTIFIED BY 'jerrypassword';

CREATE USER 'jerry'@'%' IDENTIFIED BY 'jerrypassword';

GRANT ALL PRIVILEGES ON *.* to jerry@localhost IDENTIFIED BY 'jerrypassword' WITH GRANT OPTION;

GRANT ALL PRIVILEGES ON *.* to jerry@'%' IDENTIFIED BY 'jerrypassword' WITH GRANT OPTION;

FLUSH PRIVILEGES;

EXIT;

이후 MySQL dB는 인스턴스의 public dns/ip를 MySQL Host Address로 입력하고 사용자 이름을 jerry, 비밀번호를 jerrypassword로 입력하여 원격으로 액세스할 수 있습니다(포트는 기본 3306으로 설정).

EC2 인스턴스에 할당된 Amazon Security Group이 포트 3306(MySQL의 기본 포트)에서 들어오는 요청을 수락하도록 구성되지 않았을 수 있습니다.

이 경우 버튼 클릭 몇 번으로 Security Group 포트를 쉽게 열 수 있습니다.

1) AWS Console에 로그인하여 'EC2'로 이동합니다.

2) 왼쪽 메뉴의 [네트워크 및 보안]에서 [보안 그룹]으로 이동합니다.

3) 해당 Security Group 확인

4) [인바운드]탭을 클릭합니다.

5) 드롭다운 목록에서 'MYSql'을 선택하고 'Add Rule'을 클릭합니다.

이유는 아닐지 몰라도 해볼만해...

이 문제를 추적하는 데 도움이 되는 절차는 실제로 어떤 바인드주소 MySQL이 설정되어 있는지를 특정하는 것입니다.netstat을 사용하면 이 작업을 수행할 수 있습니다.

netstat -nat |grep :3306

mysql 설정 파일이 여러 개 있고 잘못된 파일을 편집했기 때문에 이 파일을 사용하여 문제를 집중시킬 수 있었습니다.Netstat에서는 mysql이 아직 잘못된 설정을 사용하고 있는 것을 나타내고 있습니다.

ubuntu@myhost:~$  netstat -nat |grep :3306
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN

그 때문에, 설정을 덮어쓸 가능성이 있는 다른 파일의 설정 디렉토리를 grep 하고, 다음의 정보를 발견했습니다.

ubuntu@myhost:~$  sudo grep -R bind /etc/mysql
/etc/mysql/mysql.conf.d/mysqld.cnf:bind-address         = 127.0.0.1
/etc/mysql/mysql.cnf:bind-address = 0.0.0.0
/etc/mysql/my.cnf:bind-address = 0.0.0.0

D'oh! 제가 조정한 설정이 잘못된 설정 파일이라는 것을 알 수 있었기 때문에 이번에는 RIGHT 파일을 편집하여 netstat에서 확인하고 업무를 수행했습니다.

ubuntu 설정에 따라서는 다음 파일에서 바인드 주소를 변경해야 합니다.

/etc/mysql/mysql.conf.d/mysqld.cnf 

이 질문에 대한 답변이 있는 것처럼 보이지만 DB 사용자가 잘못 구성되었다는 다른 일반적인 문제가 발생할 수 있습니다.이것은 mysql 관리 및 권한 문제입니다.

  1. (「EC2_DB」)를 했습니다.10.55.142.100
  2. (「」)로 10.55.142.144
  3. EC2_DB 및 EC2_WEBARE는 DB 포트를 통해 액세스할 수 있는 동일한 보안 그룹(3306)에 속합니다.
  4. 사용자EC2_DB)가할 수 .'root'@'localhost')
  5. 사용자 EC2_DB mysql DB가 .'my_user'@'%' IDENTIFIED BY PASSWORD 'password'
  6. EC2_WEB "mysql " " bash " " 。mysql -umy_user -p -h ip-10-55-142-100.ec2.internal호스트가 명시적인 IP, 퍼블릭 DNS 등을 참조하는 경우와 같습니다.

스텝 6은 mysql DB에 잘못된 사용자 설정이 있기 때문에 실패합니다.필요한 것은 다음과 같습니다.

GRANT ALL PRIVILEGES ON *.* TO 'my_user'@'ip-10-55-142-144.ec2.internal' IDENTIFIED BY PASSWORD 'password'

는 그렇게 요.%어떤 리모트 서버에서도 동작합니다만, 실제로는 동작하지 않습니다.

도움이 되시면 알려주세요.

/etc/mysql/my.cnf:

bind-address            = 127.0.0.1 to 0.0.0.0

'%' 를 생성host재기동합니다.

/etc/init.d/mysql restart

효과적! :)

AWS EC2의 새로운 MySQL 5.7 업데이트

/etc/mysql의 my.cnf 파일에는 다음 파일만 있습니다.

!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/

이 파일을 편집하지 마십시오...MYSQL은 변경을 차단합니다.

'로 ./etc/mysql/mysql.conf.d/

파일 수 있을 예요.mysqld.cnf

여기, 당신은 찾을 수 있습니다.

bind-address = 127.0.0.1

로 변경하다

bind-address = 0.0.0.0 <OR> <Your IP>

바로 그거야!!!파일을 저장하고 MYSQL을 재시작합니다.

'Skip-Networking(네트워킹 건너뛰기)'이 방법은 유효합니다.

감사해요.

AWS 관리 콘솔에 로그인합니다.RDS로 이동한 다음 DB 인스턴스를 선택하고 "보안 그룹"으로 이동합니다.Security Group 아래에 CIDR/IP를 추가하면 문제가 해결되었습니다.

다음은 Ec2에 설치된 MySQL을 사용한 원격 연결에 대해 수행한 단계입니다.

  1. /etc/mysql/mysql.conf.d/mysqld.cnf에서 다음 행을 편집합니다.

    bind-address            = 127.0.0.1
    
    to
    
    bind-address            = 0.0.0.0
    
  2. 임의의 머신에서 mysql에 리모트로 접속하기 위한 신규 사용자 작성.특정 IP에서 mysql에만 원격으로 액세스하려면 '%' 대신 머신 IP를 언급하십시오.

CREATE USER 'master'@'%' IDENTIFIED BY 'write-password-here';

GRANT ALL PRIVILEGES ON db_name.* TO 'master'@'%' WITH GRANT OPTION;
  1. Ec2 인스턴스의 Security Group 인바운드 규칙에서 MYSQL/Aurora, TCP, 3306 및 source=0.0.0/0인 행을 추가합니다.

마지막으로 리모트 머신에서 MySQL로 접속하려면

mysql -u master -h write-server-ip -p

오래된 포스트인 건 알지만...

이 문제가 발생하고 있는데 EC2 인스턴스가 문제가 아니라는 것을 알게 되었습니다.MySQL 클라이언트 드라이버 소프트웨어의 버그인 것 같습니다.아직 자세히 조사하지는 않았지만 MySQL Workbench를 EC2 인스턴스에 설치했는데 IT도 불규칙하게 연결이 되지 않습니다(오류가 "연결 취소"됨). 링크는 EC2가 아닌 스택 하부에 버그가 있을 가능성이 있음을 나타냅니다.

물론, 저는 철저한 조사를 하지 않았고, 제 포스트가 실제로 빗나갔을 수도 있지만, 어쨌든 주목하거나 탐색할 가치가 있습니다.

이 문제를 해결하려면 다음 3단계를 수행합니다.

  1. MySQL my.ini/my.cnf 파일 내에서 바인드 주소를 변경하여 모든 호스트(0.0.0)로부터의 접속을 받아들입니다.

  2. aWS 콘솔 - ec2 - 특정 Security Group에서 mysql 포트(기본값 3306)를 열어 모든 호스트(0.0.0)의 연결을 허용합니다.

  3. Windows 방화벽 내에서 예외에 mysql 포트(기본값은 3306)를 추가합니다.

리모트 접속을 받아들이기 시작합니다.

  • 「MYSQL」
    • mysql - u admin-user -p (프롬프트에 비밀번호를 입력)
  • 새용자자: :
    • 비밀번호로 식별되는 사용자 'newuser'@% 생성; (% -> anyhost)
  • 한한: :
    • GRANT SELECT,INSERT,UPDATE ON db_name.* 'newuser'@%에게;
    • 플래시 특권

EC2 인스턴스를 실행하는 경우 MYSQL/Aurura를 사용하여 보안 그룹에 인바운드 규칙을 추가하는 것을 잊지 마십시오.

이 절차가 실패하면 /etc/mysql/my.cnf 파일을 확인하고 bind_address 파라미터를 다음과 같이 편집합니다.

bind_address=0.0.0

AWS EC2 Ubuntu 18.x 및 20.x의 경우

  1. EC2 콘솔로 이동합니다.
  2. 다음으로 Security Groups로 이동합니다.
  3. 인스턴스에 관련되어 있는 Security Group
  4. 인바운드 규칙 편집
  5. 새 규칙을 추가합니다.MySQL/Aurora를 선택한 다음 Source to anywhere를 선택합니다.
  6. 마지막으로 최적화된 원격 데이터베이스 연결을 설정하는 방법에 대한 디지털 오션의 이 튜토리얼을 따르십시오.

튜토리얼 링크: https://www.digitalocean.com/community/tutorials/how-to-set-up-a-remote-database-to-optimize-site-performance-with-mysql-on-ubuntu-18-04

지금까지의 회답(및 유사한 질문의 회답)을 모두 검토했지만 성공하지 못했습니다.마지막으로 도움이 된 것은 다음과 같습니다.을 (에 대해) 사용자에게 만, IP(「mysql」)가 .myuser@*.*.*.*전체 단계별 솔루션은 다음과 같습니다.

  1. 「 」를 코멘트 아웃 .bind_address을 서다/etc/mysql/my.cnfEC2를 사용하다그렇구나.bind_address=0.0.0.0다른 사람들이 말한 것처럼 그럴 필요는 없습니다.

  2. 및 "MYSQL"을 사용하여 EC2 MYSQL은 "3306"으로 "EC2" Security Group" 중 하나입니다.My IP ★★★★★★★★★★★★★★★★★」Anywhere 가지 때문에 잘 작동합니다.모든 순서를 실행해도, 양쪽 모두 올바르게 동작.

  3. 새 사용자 생성myuser특정 데이터베이스에 대한 제한된 권한으로mydb(기본적으로 이 Amazon 튜토리얼의 지시에 따릅니다).

    $EC2prompt> mysql -u root -p
    [...omitted output...]
    mysql>  CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'your_strong_password';
    mysql>  GRANT ALL PRIVILEGES ON 'mydb'.* TO 'myuser'@'localhost';`
    
  4. 다음은 원격 연결을 시도할 때 로컬 주소가 거부된 주요 단계입니다.(ERROR 1130 (HY000): Host '*.*.*.23' is not allowed to connect to this MySQL server):

    mysql> GRANT ALL PRIVILEGES ON 'mydb'.* TO 'myuser'@'*.*.*.23';
    mysql> FLUSH PRIVILEGES;`
    

    (치환)'*.*.*.23'로컬 IP 주소로)

  5. mysql을 종료하고 셸로 이행하여 msyql 서버를 재부팅했습니다.

    $EC2prompt> sudo service mysql restart

  6. 이 단계를 거쳐 컴퓨터에서 다음 항목으로 원활하게 연결할 수 있었습니다.

    $localprompt> mysql -h myinstancename.amazonaws.com -P 3306 -u myuser -p

    (치환)myinstancename.amazonaws.comEC2 인스턴스의 공개 주소로)

myuser'@'localhost'와 같은 사용자를 생성할 때 사용자는 localhost에서만 연결할 수 있습니다.원격 액세스 전용 사용자를 생성하고 MySQL 서버에 연결할 원격 클라이언트 IP 주소를 사용하십시오.모든 리모트호스트로부터의 접속을 허가하는 리스크를 견딜 수 있는 경우(통상은 다이나믹 IP 주소를 사용하는 경우), 「myuser」@%」를 사용할 수 있습니다.이렇게 하고 /etc/mysql/mysql.cnf(Ubuntu)에서 bind_address도 삭제했습니다.이것으로, 완전하게 접속됩니다.

mysql> select host,user from mysql.user;
+-----------+-----------+
| host      | user      |
+-----------+-----------+
| %         | myuser    |
| localhost | mysql.sys |
| localhost | root      |
+-----------+-----------+
3 rows in set (0.00 sec)

인스턴스 EC2 Ubuntu의 Mysql 기본 IP는 다음과 같습니다.127.0.0.1바꾸고 싶은 경우는, 여기에 기재되어 있는 답을 따르는 것 뿐입니다.

발생한 오류는 데이터베이스 네트워크 설정에서 웹으로의 아웃바운드 트래픽이 허용되었지만 일부 IP 주소에서만 인바운드된 것입니다.

ec2의 개인 IP로부터의 트래픽을 허용하는 인바운드 규칙을 추가했는데, 정상적으로 동작했습니다.

심플 해크

  1. EC2 MYSQL 서버는 다음에서 호스트됩니다.remotehost:3306사용.

port forwarding이 리모트 포토를, 이 포토에 전송 할 수 있습니다.localhost:3307그리고.

MYSQL 워크벤치를 사용하여 'localhost:3307'에 접속합니다.

  1. 트래픽을 허용하도록 ec2 인스턴스의 인바운드 규칙을 편집해야 합니다.

포트 3306

언급URL : https://stackoverflow.com/questions/9766014/connect-to-mysql-on-amazon-ec2-from-a-remote-server

반응형