티스토리 뷰

DB가 필요해...

이직을 하기 전에는, 사내 DB를 개인용 프로젝트에 써먹었었다. 이직이 결정된 이후에 인프라를 만지작 거리려니까 DB가 문제가 됐다.

 

어떻게 써야할까 고민하다가 그냥 인프라 구축을 위해 띄워놓은 EC2에 MySQL 서버를 띄우기로 했다.

 

아쉬운 점은, 난 그동안 오라클만 써왔다는 것이다. 하지만 오라클은 유료라 과감히 버린다.

(Oracle 이미지는 Docker Hub에서도 내려버렸다...)

 

AWS EC2 / Docker 설정 및 설치

멈춰버린 인프라 관련 글에 잘 써놨다.

 

MySQL Docker 설치

Docker Hub에 저장된 공식 이미지를 사용하면, 별도의 설치파일 없이 편하게 사용할 수 있다.

docker pull mysql:latest

설치 후 아래와 같이 뜨면 정상적으로 설치됨!

 

 

MySQL Volume Mount 후 Docker 실행

도커에서는 컨테이너가 삭제되면 도커에 할당된 볼륨(메모리)도 함께 삭제된다.

 

때문에, MySQL용 볼륨을 따로 Docker에 할당 해주고, 마운팅을 해주면 영구적으로 데이터를 보존할 수 있다.

 

우선 Docker Volume을 할당 받는다.

docker volume create mysql-volume

아래의 명령어로 할당 받은 볼륨 확인!

docker volume ls

DRIVER    VOLUME NAME
local     mysql-volume

할당 받은 Volume을 mount 하여 dokcer를 run 해준다.

docker run -d --name mysql-container -p 3306:3306 -v mysql-volume:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=1234 mysql:latest

root 계정의 비밀번호를 1234로 설정했다.

 

볼륨은 /var/lib/mysql 경로 아래에 docker volume으로 할당받은 mysql-volume이 저장되도록 지정했다.

 

PORT는 3306이 MySQL의 기본 포트이므로 외부에서 EC2에 접근 할 수 있도록 보안 그룹에 3306 포트를 열어줬다.

docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED        STATUS        PORTS                                                  NAMES
0db65b68ed80   mysql:latest   "docker-entrypoint.s…"   24 hours ago   Up 24 hours   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   mysql-container

위와 같이 뜨면 정상적으로 실행된 것이다.

 

별도의 사용자 설정과 테이블 생성은 DBeaver에서 설정하고 사용했다.

 

DBeaver에서 DB 접근하기

자, DB를 띄웠으니 외부에서 접근할 수 있어야한다.

 

위와 같이 새 DB를 연결하려고 하기 위해 Test Connection을 누르면,

 

위와 같은 에러가 발생한다.

 

이 문제는, 오래된 버전의 MySQL Connector/J 드라이버를 사용하여 외부 클라이언트에서 MySQL 서버에 연결을 시도할 때 발생한다.

 

MySQL 버전 8.0.19 이상에서 "allowPublicKeyRetrieval" 옵션의 기본값이 "false"로 변경되었기 때문인데, 이 옵션을 "true" 변경해주면 된다.

 

Driver properties를 클릭하고, 아래 옵션을 찾아서 true로 변경해 주면 된다.

 

allowPublicKeyRetrieval=true

 

 

연결 완료!

 


공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함