개요
AWS EC2에 MySQL 서버를 설치하고 다른 서버에 접속을 시도했다.
EC2에 적용한 보안 그룹은 아웃바운드와 인바운드 모두 허용되어 있고 MySQL 서버도 실행 중이고,
접속을 시도한 계정은 모든 대역의 IP를 허용하고 있었다.
하지만 접속이 되지 않았다……. telnet 연결조차 되고 있지 않은 상태다.
원인
MySQL은 기본적으로 localhost의 연결만 수신하기 때문에 같은 서버 내에서만 접근할 수 있다. 원격 접속이 필요하다면 아래 두 가지 방법 중 하나를 선택할 수 있다.
- SSH 터널을 통한 접속
- MySQL 서버가 원격 연결을 허용하도록 구성
이 글에서는 MySQL 서버가 원격 연결을 허용하도록 구성해보려고 한다.
MySQL 서버 구성 변경
MySQL 서버와 클라이언트가 전용 네트워크를 사용한다면 전용 IP 또는 전용 IP 대역만 수신하도록 설정하는 것이 좋다.
하지만 접속 IP를 특정할 수 없다면 모든 IP에 대해 수신하도록 설정해야 한다.
모든 IP에 대해 접속을 허용할 때는 0.0.0.0으로 설정해야하는데, 만약 시스템에 IPv6가 구성된 경우에는 ::로 설정한다.
구성 파일 편집
구성 파일의 경로는 OS에 따라 다른데 Ubuntu의 경우 /etc/mysql/mysql.conf.d/mysqld.cnf이다. CentOS는 /etc/my.cnf라고 한다. 옵션 그룹이 mysqld이므로 grep으로 찾아도 될 것 같다.
해당 파일의 bind-address를 0.0.0.0으로 수정 후 저장한다. 만약 bind-address 설정이 없다면 mysqld 섹션에 추가한다.
MySQL 서버 재시작
systemctl restart mysql
MySQL 접속 확인
MySQL 서버 재시작 후 접속을 확인해보면 정상적으로 접속이 가능한 것을 확인할 수 있다.
mysql -h <HOST> -P <PORT> -u <USERNAME> -p
참고 문서
https://jjeongil.tistory.com/1756