본문 바로가기
mysql

dbeaver에서 원격mysql에 접근하기

by limew 2024. 1. 9.

situation

AWS EC2 (ubuntu) 인스턴스에 프로젝트를 배포하고 mysql을 설치한 상태이고,

로컬에서 원격 mysql을 관리하기 위해 로컬 dbeaver를 instance에 연결해야 하는 상황이다 

 

하지만 dbeaver에서 인스턴스에 연결하려고 하면 timeout이 됐다

 

 

 

데이터베이스는 아무나 수정하는 것을 막기위해 정해진 user만 접근가능하고 user마다 비번을 입력하여야 접근할 수 있다.

 

접근할 수 있는 user가 뭐가 있는지

먼저 인스턴스 상 mysql의 user를 확인해봤다.

디폴트 유저인 root가 있다.

 

 

 

 

일반적으로 MySQL 사용자 계정은 username@hostname의 형식으로 이루어져 있다. 

dbeaver 상의 users

 

mysql에 접근하기 위해서는 이 세 가지가 맞아야 한다.

  1. username: 유저이름
  2. 호스트: 접근을 요청하는 origin
  3. 유저의 비번

그래서 root@localhost를 살펴보면 

root은 현재 mysql이 위치한 로컬의 유저이므로 로컬 mysql 접근이 가능한 것이다.

 

 

 

하지만 내가 원하는 것은 내 컴퓨터의 dbeaver에서 => EC2 인스턴스로 접근하는 것이다

이는 인스턴스 입장에서 보면 외부의 누군가가 로컬(인스턴스)로 접근하려는 것과 같다.

 

 

그럼 이 상황에서 나의 컴퓨터가 아무리 원격 mysql에 접근하려고 해도 다음과 같은 이유로 접근할 수 없다.

  1. 내 컴퓨터의 유저는 root이 아니다
  2. 현재 접근가능한 호스트는 localhost밖에 없다
  3. 유저도 없는데 비번이 있겠냐

 

따라서 접근하고 싶으면 새로운 user를 추가해줘야 한다

 

 

유저 추가

  1. 유저이름은 아무거나 정한다 
  2. 내 컴퓨터의 고정된 호스트이름 
  3. 비번은 설정하면 된다

난 2번 호스트 이름을 임시로 %로 설정했다.

%는 모든 호스트에서든 접속을 허용한다는 것을 의미하는데 

내 컴퓨터가 고정된 IP가 없기 때문이다. (고정된 IP주소가 있다면 보안을 위해 그것을 쓰길 추천한다. )

 

 

자 그럼 다음의 명령어로 유저를 추가해 보자

CREATE USER 'ujunglim'@'%' IDENTIFIED BY '비번';

 

 

추가한 뒤 새로고침

 FLUSH PRIVILEGES;

 

 

 

 

Inbound rule 추가

EC2 Inbound rule은 외부에서 내부로 들어오는 데이터의 도착 및 처리를 관리하는 규칙이다.

이는 일반적으로 방화벽 등의 보안 장치에서 설정하며, 외부로부터의 접근을 허용하거나 차단하는 데 사용된다.

즉 외부에서(dbeaver) => EC2 인스턴스에 접근하려면 이때 사용되는 포트와 프로토콜을 허용해야 한다는 것이다.

 

 

이는 AWS Security Groups 탭의 Edit inbound rules에서 추가할 수 있다.

 

 

Type은 mysql을 선택하고 0.0.0.0/0로 소스를 지정해 줬다

0.0.0.0/0는 해당 포트에 대한 모든 IP 주소의 외부 연결을 허용한다는 의미이다.

 

port는 인스턴스의 문들이며 debeaver는 이 허용된 문으로 인스턴스와 연결한다.

 

 

이제 dbeaver를 확인해 보자

 

 

dbeaver가 원격 mysql에 연결됐고 추가한 유저ujunglim도 보인다.

 

 

이제 사용자가 CRUD를 동작하면 나의 Express서버에서 쿼리를 날려 인스턴스 안의 mysql를 수정할 수 있고

dbeaver에서 인스턴스 내의 데이터베이스의 상황을 확인할 수 있다

 

 

 

 

참고

https://stackoverflow.com/questions/15872543/access-mysql-remote-database-from-command-line

 

Access mysql remote database from command line

I have a server with Rackspace. I want to access the database from my local machine command line. I tried like: mysql -u username -h my.application.com -ppassword But it gives an error: ERROR 2003 (

stackoverflow.com