MySQL 외부 접속 시

MySQL 외부 접속 시 "ERROR 2003 (HY000): Cant connect to MySQL server on" 에러 해결방법

in

mysql 외부 접속시 아래와 같은 에러가 발생하는 경우가 있습니다.

[root@localhost ~]# mysql --host=3.34.99.98 --port=58233
ERROR 2003 (HY000): Can't connect to MySQL server on '3.34.99.98:58233' (111)

외부 서버에서 MYSQL 서버 접근 확인

nc 명령어를 이용하여 외부에서 mysql 서버로 접근가능한지 확인합니다.
저는 현재 mysql 서버의 3306 포트를 58233 으로 포워딩 해놓은 상태입니다.

dohyeoneom@/ᐠ。ꞈ。ᐟ✿\/彡ミ~ $ nc -vz 3.34.99.98 58233
ec2-3-34-99-98.ap-northeast-2.compute.amazonaws.com [3.34.99.98] 58233: Connection refused

MySQL 서버측 확인

netstat 명령어를 통해서 접근정책을 확인합니다.
아래의 경우 3306 포트가 로컬호스트(127.0.0.1)에 대해서만 열려 있는 상태입니다.

root@goorm:/workspace/mysql# netstat -antp | grep mysql
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      7958/mysqld

MySQL Bind Setting

바인드 세팅을 통해서 외부에서도 접근가능 하도록 설정해주도록 하겠습니다.

/etc/mysql/my.cnf 설정을 보시면 아래처럼 bind-address 설정이 존재합니다.
만약 해당설정이 존재하지 않는다면, inlcude 된 파일을 따라가서 해당 설정이 존재하는지 확인합니다. 저의 경우 해당 설정이 127.0.0.1(로컬호스트) 로만 되어있는데 주석처리 해줍니다.

$ vi /etc/mysql/my.cnf
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
# bind-address            = 127.0.0.1

아래 명령어를 통해 mysql을 재시작 해줍니다.

// ubuntu 18.04.2
$ service mysql restart

// centos
$ systemctl restart mysqld

이후 netstat을 통해 접근정책 확인 시 모든 ip에서 접근할 수 있게 변경된 것을 확인할 수 있습니다.

root@goorm:/etc# netstat -antp | grep mysql
tcp6       0      0 :::3306                 :::*                    LISTEN      11657/mysqld

또한 외부서버에서 nc 명령어를 통해 MySQL 서버로 접근가능함을 확인할 수 있습니다.

dohyeoneom@/ᐠ。ꞈ。ᐟ✿\/彡ミ~ $ nc -vz 3.34.99.98 58233                                                                                                                                                                                  12:43:58
ec2-3-34-99-98.ap-northeast-2.compute.amazonaws.com [3.34.99.98] 58233 open