안녕, 세상!

2-3 MySQL 외부에서 접속 본문

It공부/Server

2-3 MySQL 외부에서 접속

dev_Lumin 2021. 2. 1. 00:28

이어서 AWS EC2 인스턴스의 MySQL 서버에 외부 접속을 해보겠습니다.

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

DataGrip을 이용하겠습니다.

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

 

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

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

www.jetbrains.com

우선 DataGrip을 설치를 해줍니다.

 

DataGrip으로 AWS EC2 인스턴스의 MySQL 서버에 외부 접속을 하기 전에

MySQL에 사용자를 만들겠습니다.

외부에서 원격으로 접속하는 것이므로 root보다는 새로 사용자를 만들어주고

해당 사용자 계정으로 접속하는것이 더 안전합니다.

 

또한 전의 설명에서 mysql보안 설정을 할 때 외부 접속을 차단하는 설정을 했기 때문에 

root사용자 말고 다른 사용자로 접속을 해야 접속이 될 것입니다.

 

(1) MySQL 사용자 생성

우선 root사용자로 접속을 합니다.

$ sudo mysql -u root -p
mysql> create user 'lumin'@'%' identified by 'password';

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

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

'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의 사용자 목록 출력

 

(2) 데이터베이스 생성

간단하게 database를 생성해보겠습니다.

mysql> create database Lumindb
mysql> show databases;

 

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

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

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

다음과 같이 잘 부여된 것을 확인할 수 있습니다.

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

mysql> revoke all privileges on Lumindb.* from 'lumin'@'%';

( 참조 : gofnrk.tistory.com/15 )

 

 

(4) MySQL 외부 접속 설정

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

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

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

다음과 같이 43번째 줄 bind-address 부분을 0.0.0.0으로 설정을 해서 외부 접속을 허용해줍니다.

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

$ sudo service mysql restart

 

포트 포워딩

그다음으로 포트 포워딩을 해줍니다.

AWS EC2 인스턴스(서버)의 인바운드 규칙을 수정해줍니다.

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

 

 

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

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

1. 빈 프로젝트를 생성합니다.

[File] -> [new] -> [project]

 

2. Database 버튼을 클릭한 뒤, 다음과 같이 MySQL을 선택합니다.

 

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

Name 부분은 자유롭게 입력합니다.

Host는 AWS EC2 인스턴스의 공인 ip를 입력해줍니다.

port번호는 자동으로 지정되겠지만 mysql의 port인 3306으로 되어있는지 확인합니다.

User과 Password는 앞서 만든 mysql의 사용자와 비밀번호를 입력해줍니다.

Test Connection으로 연결이 잘 되는지 확인합니다.

 

4. 접속 확인

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

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

 

그럼 다음과 같이 나오는데 분명 앞서 lumin사용자에 대해서 Lumindb에 대한 권한을 전부 부여했는데

왼쪽에는 나오지 않습니다.

 

이를 확인하기 위해서 코드 창에 다음 명령어를 입력하고 

초록색 실행 버튼을 눌러줍니다.

show databases;

잘 나오는 것을 확인할 수 있습니다.

 

왼쪽 창에 Lumindb를 불러오는 방법은 다음과 같이 합니다.

우선 다음과 같이 아래 화살표를 눌러서 Lumindb를 선택합니다.

 

다음은 Introspect schema를 클릭합니다.

 

다음과 같이 잘 나오는 것을 확인할 수 있습니다.

 

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

 

Comments