👩‍💻 Web Programming/Web Server

2. AWS EC2 인스턴스 Mysql 서버에 외부 접속하기

나리 집사 2021. 3. 29. 11:51

외부 접속을 하기 위해서 DB 개발과 관리를 용이하게 해주는 GUI 개발 툴이 필요하다.

그 예시로는 MysqlWorkbench와 DataGrip이 있는데, Workbench는 이미 사용경험이 있으므로 지금은 DataGrip을 사용해볼 것이다.

(1) DataGrip 설치

www.jetbrains.com/ko-kr/datagrip/download/#section=windows

 

다운로드 DataGrip: 데이터베이스 및 SQL용 크로스 플랫폼 IDE

최신 버전 다운로드: DataGrip (Windows, macOS, Linux)

www.jetbrains.com

(2) MySQL 사용자 생성

외부에서 원격으로 접속하기 위해, root보다도 새로 사용자를 만들어주고 해당 사용자 계정으로 접속할 것이다.

 

우선, 이전 게시글에서 만들었던 ec2 서버에 접속한다.

$ cd 폴더
$ ssh -i 키파일.pem ubuntu@ec2-탄력적아이피주소.ap-norheast-2.compute.amazonaws.com

root 권한으로 접속해서, 새로운 user 계정을 생성한다. root는 보안에 취약하기 때문이다.

$ sudo mysql -u root -p  #mysql접속
mysql> create user 'name'@'%' identified by 'password'; #user생성
mysql> grant all privileges on *.* to 'name'; # 모든 데이터베이스의 모든 테이블에 대한 권한 부여(*.* 이 모든 테이블이란 뜻이다.) 
mysql> FLUSH PRIVILEGES; # 변경한 권한을 즉시 반영시켜주는 명령어 
mysql> mysql -u '아이디' -p  # 만든 아이디로 접속

 

name이라는 이름의 사용자를 만들고 비밀번호를 설정한다.

 

사용자를 생성할 때 접근 허용 범위를 다음과 같이 설정 할 수 있다.

'Username'@'%'  : 해당 사용자는 외부에서 접근가능

'Username'@'localhost'  : 해당 사용자는 내부에서만 접근 가능

'Username'@'xxx.xxx.xxx.xxx'  : 해당 사용자는 지정한 ip주소로만 접근 가능

 

사용자가 잘 생성되었는지 확인한다.

mysql> show databases;
mysql> select databases();           # 현재 database를 보여줌
mysql> user mysql;                   # mysql database를 사용
mysql> select user, host from user;  # mysql database의 사용자 목록 출력

 

(3) 데이터베이스 생성

mysql> create database db;
mysql> show databases;

 

(4) 데이터베이스 권한 부여

이제 위에서 생성한 사용자에게 데이터베이스에 대한 권한을 부여합니다.

mysql> grant all privileges on db.* to 'name'@'%';
mysql> flush privileges;
mysql> show grants for 'name'@'%';    # 해당 사용자에 대한 권한을 보여줌

권한 부여 확인

만약 권한을 해제하고 싶으면 다음과 같은 명령어를 입력한다.

mysql> revoke all privileges on db.* from 'name'@'%';

 

(5) MySQL 외부 접속 설정

이제 외부 접속을 하기 위한 설정을 한다.

MySQL의 설정 파일인 /etc/mysql/mysql.conf.d/mysqld.cnf 를 수정한다.

(이 때, 기본 터미널에서 실행)

$ cd /etc/mysql/mysql.conf.d
$ sudo vim mysqld.cnf

bind-address 수정

bind-address를  0.0.0.0으로 설정해서 외부 접속을 허용해준다.

변경사항을 적용하기 위해서 mysql을 재시작한다.

$ sudo service mysql restart

 

(6) 포트 포워딩

그다음으로 포트 포워딩을 해준다. AWS EC2 인스턴스(서버)의 인바운드 규칙을 수정해주어야 한다.

(인스턴스 -> 보안 -> 보안그룹 -> 인스턴스 편집)

MYSQL 규칙을 추가하고 위치 무관으로 설정해서 어디서나 접근할 수 있도록 한다.

 

 

(7) DataGrip으로 외부에서 MySQL 접속

위에서 설치한 DataGrip을 실행시킵니다.

 

1. 빈 프로젝트를 생성하고, Database 버튼을 클릭한 뒤, MySQL을 선택

 

2. 데이터 베이스 정보 입력

Name, Host (AWS EC2 인스턴스의 공인 ip), port번호(자동지정, 3306), User+Password(mysql의 사용자와 비밀번호)를 입력해한다.

이후 아래의 Test Connection으로 연결이 잘 되는지 확인한다.

 

3. 접속 확인

Test Connection을 누르고 다음과 같이 나온다면 접속이 잘 되는 것이다.

이제 Apply 버튼을 눌러서 AWS EC2 인스턴스의 MySQL 정보들을 불러온다.

 

데이터베이스를 확인하기 위해서, 초록색 실행 버튼을 누르면 아래처럼 데이터베이스가 나오는 것을 확인할 수 있다.

 

이로서 외부 접속이 잘되고 MySQL안 특정 사용자의 Database도 확인할 수 있다.