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