1. DB서버 원격 접속하기
이전까지 백엔드, 프론트 배포를 위해 생성한 EC2는 페이지 요청에 대한 반환, API 요청에 대한 응답 등 외부에서 접속할 수 있어야 하기에 Public IP를 할당받았다. 하지만 DB의 경우는 백엔드 배포 서버의 Spring 프로젝트에서만 접속할 뿐 외부에서는 직접적인 접속이 있어서는 안된다. 이러한 보안상의 안정성을 위해 DB 서버의 경우 Public IP를 할당받지 않고 Private IP만 존재하도록 생성하였다.
Public IP를 할당받지 않은 EC2의 경우 외부에서 접속할 수 없어서 같은 VPC에 있는 EC2를 통해 접속하여야 한다. DB 서버에 접속하기 위해 먼저 Spring 배포 서버에 scp
명령어를 통해 DB서버에 접속하기 위해 필요한 pem키를 보내주겠다.
$ scp -i {key-chain} {보낼 파일} ubuntu@{배포서버_ip}:{받는위치}
Ex
$ scp -i key-momo.pem key-momo-db.pem ubuntu@xxx.xxx.xxx:/home/ubuntu
이제 배포서버에 접속 후, 배포서버를 통해 DB서버에 접속해보겠다. 먼저 배포서버에 접속해보겠다.
{local} $ ssh -i key-momo.pem ubuntu@{배포서버_ip}
배포서버에 접속하였다면 앞서 scp를 통해 전송한 pem키를 통해 DB서버에 접속해보겠다.
{배포_서버} $ ssh -i key-momo-db.pem ubuntu@{DB서버_ip}
2. DB 서버에 MySQL 설치하기
이제 DB서버에 MySQL을 설치하겠다. 일반적으로 사용하는 EC2에서 외부 네트워크와의 연결이 가능하다면 아래의 명령어를 통해 MySQL을 설치해주면 된다.
{DB_서버} $ sudo apt-get update
{DB_서버} $ sudo apt-get install mysql-server
하지만 현재 필자가 사용하는 private EC2의 경우 보안정책이 걸려있어 외부와의 네트워크 연결이 불가능하였다. 그래서 MySQL 설치를 위해 배포서버에서 mysql-server 설치 파일을 다운 후 그 후에 db 인스턴스로 보내주는 방법으로 진행하였다. 다시 배포 서버로 이동하여 MySQL 설치 파일을 다운해보겠다.
{배포_서버} $ sudo apt-get install --download-only mysql-server
위의 명령어를 통해 파일이 정상적으로 다운되었다면 /var/cache/apt/archives
경로에 MySQL과 엮여있는 의존성 설치된 파일들이 모두 다운되었을 것이다. /var/cache/apt/archives
디렉터리를 tar로 압축후 scp
를 이용하여 db서버에 압축 파일 전송하도록 해보겠다.
{배포_서버} $ cd /var/cache/apt
{배포_서버} $ tar -cvf archives.tar archives
{배포_서버} $ scp -i {key-chain} archives.tar ubuntu@{DB서버_ip}:/home/ubuntu
이제 다시 DB서버로 이동하여 전송한 설치파일을 압축 해제 후, 패키지 내에 있는 deb파일들을 모두 설치해보겠다.
{DB_서버} $ tar -xvf archives.tar
{DB_서버} $ sudo dpkg --force-all -i *.deb
3. 원격(배포)서버에서 접속을 위한 설정하기
MySQL은 기본적으로 로컬에서만 접속 가능하도록 설정되어 있다. 기본 설정대로라면 원격 서버에서 DB서버에 있는 MySQL접속이 불가능하기에 설정 변경이 필요하다.
/etc/mysql/mysql.conf.d/
경로에 있는 mysql 설정 파일의 bind-address = 127.0.0.1
와 mysqlx-bind-address = 127.0.0.1
부분을 0.0.0.0으로 변경하여 외부에서 접속이 가능하도록 열어주겠다.
{DB_서버} $ sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
4. 외부에서 접속할 계정 생성하기
이제 MySQL에 접속하여 외부에서 접속할 떄 사용할 수 있는 계정을 만들도록 하겠다.
{DB_서버} $ sudo mysql -u root -p
mysql> create database {생성할 DB이름};
mysql> create user '사용자'@'배포서버_private_ip' identified by '비밀번호';
mysql> grant all privileges on {생성한 DB이름}.* to '사용자'@'배포서버_private_ip';
이제 설정을 모두 마쳤음으로 MySQL을 재시작해주고 배포 서버로 다시 이동해보겠다.
{DB_서버} $ sudo service mysql restart
5. 원격(배포)서버에서 MySQL접속하기
원격 서버에서 배포 서버에 접속하기 위해서는 MySQL client를 설치하여야 한다.
{배포_서버} $ sudo apt-get install mysql-client
MySQL Client 설치가 끝났다면 아래의 명령어를 통해 DB에 접속하여 사용하면 된다.
{배포_서버} $ sudo mysql -h {DB서버 private ip} -u {사용자} -p