Skip to content

DB 서버 배포 매뉴얼

정수현 edited this page Aug 3, 2022 · 2 revisions

private IP만 할당된 EC2에 MySQL을 설치하고 같은 VPC 내의 다른 EC2 인스턴스와 연결하는 방법을 다룹니다.

WAS가 설치된 서버 인스턴스의 이름을 backend-prod, public IP를 15.123.123.123,

DB 서버가 될 인스턴스 이름을 db-prod, private IP를 192.168.123.123이라고 가정하고 설명하도록 하겠습니다.

db-prod 인스턴스 생성

우테코에서 지정한 설정에 맞춰 EC2 인스턴스를 생성합니다. DB서버는 외부에 공개될 이유가 없기 때문에 public IP는 할당하지 않습니다.

backend-prod의 ssh접속 키는 key-backend-prod.pem, db-prod의 ssh 접속 키는 key-db-prod.pem이라고 가정하겠습니다.

db-prod 접속

db-prod는 퍼블릭 ip가 열려있지 않기 때문에 같은 VPC 내의 인스턴스에서만 접근이 가능합니다.

backend-prod는 퍼블릭 ip가 열려있기 때문에 우리는 로컬 -> backend-prod -> db-prod 순서로 접근해야 합니다.

backend-prod에서 db-prod로 접근하려면 ssh 키가 backend-prod에 준비되어 있어야합니다. 따라서 로컬에서 backend-prod로 key-db-prod.pem 파일을 전송합니다.

backend-prod로 pem 키 전송

 scp -i key-backend-prod.pem key-db-prod.pem [email protected]:/home/ubuntu

backend-prod 접속

ssh -i key-backend-prod.pem [email protected]

db-prod 접속

ssh -i key-db-prod.pem [email protected]

db-prod에 MySQL 설치

db-prod는 퍼블릭 ip가 없기 때문에 외부로부터 파일을 다운로드 받을 수 없습니다. 따라서 탄력적 ip를 잠시 할당받아 필요한 파일을 다운로드한 후, 다시 탄력적 ip를 해제하는 방법을 사용해야합니다.

db-prod에 탄력적 ip를 할당받습니다. 할당받는 방법은 아래의 문서를 참고하세요.

탄력적 IP 주소 - Amazon Elastic Compute Cloud

탄력적 ip를 할당받고 나면 아래처럼 mysql을 설치할 수 있습니다.

sudo apt-get update
sudo apt-get install mysql-server

외부 접속 허용

MySQL은 기본적으로 외부에서 접속할 수 없도록 설정이 되어있습니다. 이를 허용하려면 설정에서 bind-address를 모두 열어주어야합니다.

sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf

해당 파일에서

bind-address = 127.0.0.1
mysqlx-bind-address = 127.0.0.1

위처럼 되어있는 부분을 아래처럼 수정 후 저장합니다.

bind-address = 0.0.0.0
mysqlx-bind-address = 0.0.0.0

저는 여기서, 어차피 backend-prod에서만 접근할거니까 bind-address를 backend-prod의 public IP나 private IP로 설정하면 되지 않을까? 라고 생각했습니다. 그런데 그렇게하면 정작 db-prod에서 MySQL에 직접 접근할 수 없는 문제가 생깁니다.

어차피 db-prod 자체가 퍼블릭 ip가 닫혀있기 때문에 그냥 전체를 허용해도 별 문제 없다고 생각합니다.

최상위 설정파일을 수정하고 난 후에는 MySQL을 다시 실행해주어야합니다.

sudo systemctl restart mysql

데이터베이스 및 유저 생성

이제 backend-prod에서 사용할 데이터베이스와 user를 생성하고 권한을 부여해주면 설정은 끝입니다.

MySQL 접속

sudo mysql -u root -proot

데이터베이스 및 유저 생성

CREATE DATABASE example;
CREATE USER userid@'%' identified by 'password';

권한 부여

GRANT SELECT, INSERT, UPDATE, DELETE ON example.* to userid@'%';

FLUSH PRIVILEGES;

외부에서 접속

backend-prod에서 아래 명령어로 db-prod의 mysql 서버에 접속 성공하면 끝입니다.

sudo mysql -h 192.168.123.123 -u userid -ppassword

!!! db-prod에 할당된 탄력적 IP를 릴리즈하는 것을 잊지마세요!