[MySQL] 외부 접속 허용 시 주의 할 점

STEVELOPER·2023년 3월 27일
0

MySQL

목록 보기
3/3

Docker 를 사용해서 서버를 띄우고 mysql 도 같은 docker 내부에 설치해야 할 일이 생겼다.
docker 를 컨테이너화 할 때 시스템 관련 권한을 위해서는 --privileged 옵션을 주어서 실행시켜야 하기에 포트를 엶과 동시에 옵션을 주었다.

docker run -d -it --name blah --privileged -p 22:22 -p 3306:3306 blahImage:0.0.1

Docker image 는 ubuntu 20.04 를 사용했다.
mysql-server 를 설치하고 잘 실행시켰다는 전제하에
설정해야할 부분이 있다.

  1. 우선 mysql 프롬프트에 접속 후 root@"%" 와 같은 외부접속이 설정된 유저가 있는지.
  2. 그리고 그 유저의 권한이 열려 있는지.
  3. 설정파일 수정.

커맨드에 mysql을 입력해서 mysql 프롬프트에 접속한다. 비밀번호 설정을 했다면
mysql -u root -p 와 같은 명령을 통해 프롬프트에 접속한다.
접속 후 하기의 명령어들을 따라서 입력한다.

mysql> use mysql;
mysql> select user, host from user;

결과값을 확인해서 host 가 % 이고 user 가 root 인 레코드가 있는지 확인한다.
없을 경우 하기의 명령어를 통해 생성하고 이미 있다면 권한을 확인한다.

mysql> create user root@"%" identified by "password";
mysql> show grants for root@"%";

모든 권한을 주는 명령어는 다음과 같다.

mysql> grant all privileges on *.* to root@"%" with grant option;

모든 db 와 모든 table 에 대해서 root@"%" 에게 모든 권한을 주게된다.
권한 확인을 통해 다시 한 번 확인해본다.

여기가지 했다면 이제 외부 접속 "설정"이 필요하다.
이 포스팅을 쓰는 이유다.
아주 작은 부분이라서 놓치기 쉬운 부분이기에 기록을 통해 남긴다.

경로 /etc/ 혹은 /etc/mysql/ 하위에 mysql 관련 configure 파일(.cnf) 을 수정해야 하는데
버전 따라서인지 위치가 다를 수 있다.
mysql.cnf 파일을 찾았을 경우 include 와 같이 다른 파일을 참조하고 있는 경우도 있고,
해당 파일에 설정 코드가 기입돼 있는 경우도 있다.
나의 경우
/etc/mysql/mysql.conf.d/mysqld.cnf
해당 파일에 기입돼 있었다.
vim 이나 다른 에디터를 통해 해당 파일을 연다.
없다면 apt install vim 등을 통해 설치후 진행한다.

설정 목록 중 bind-address 부분을 찾아서 주석처리를 통해 설정을 비활성화 한다.
마지막으로 mysql 을 재시작한다.

service mysql restart

systemctl 등 다른 명령어를 통해서 mysql 을 재시작 할 수도 있다.

이제 workbench 등에서 접속을 시도한다.

profile
JavaScript, Node.js, Express, React, React Native, GraphQL, Apollo, Prisma, MySQL

0개의 댓글