AWS EC2를 이용해 배포해보자 (3) - MySQL 서버 실행

Suntory·2022년 4월 10일
7

AWS로 배포하기

목록 보기
3/6

지난 글에서 성공적으로 서버 설정과 필요한 MySQL, jdk를 설치했으니 이번엔 MySQL 서버부터 실행시켜보겠습니다.


MySQL 서버 실행하기

먼저 MySQL 접속을 위해 아래와 같은 명령어를 사용해봅니다.

$ mysql -u root -p

그럼 당연히 password 입력창이 나오는데 우리는 mysql root password를 설정해준 기억이 없습니다.
일단 아무 값이나 쳐서 나온 다음 설정을 해야 합니다.

$ sudo mysql_secure_installation

이 명령어를 입력하면 MySQL의 보안 세팅이 시작된다.

먼저 위와 같이 VALIDATE PASSWORD component를 할 건지 묻는데, NO를 눌러준다. 비밀번호를 복잡하게 만들어야 하기 때문이다. 그 다음 root 계정의 password를 정한다.

다음으로 익명 유저 삭제 여부이다. yes 해준다.

다음으로 원격에서 root 계정 접속을 거부할건지 묻는다. 묻지도 따지지도 않고 yes한다.

다음으로 mysql을 생성하면 기본적으로 깔려있는 test라는 database를 지울 지 정한다. yes한다.

권한 테이블을 리로드하여 반영할 건지 묻는다. yes이다.

자 이제 그럼 root 계정의 패스워드를 정했으니 다시 아래와 같이 접속해본다.

$ mysql -u root -p

하지만 안된다. 왜 그럴까? MySQL 8.0부터 이런 방식의 접속을 막아두었다고 한다. 해결 방법은 해당 서버의 root 권한을 통한 sudo로 접속한다.

$ sudo mysql -u root

그럼 이렇게 mysql 에 접속이 되었다. 그럼 이제 유저를 만들어야 한다.
간단히 프로젝트에 사용할 db를 만들어준 후 아래와 같이 유저를 만든다.

$ create database {database_name};
$ create user '{username}'@'%' identified by '{password}';
$ grant all on {database_name}.* to '{username}'@'%' with grant option;
$ flush privileges;

그럼 user가 하나 만들어지고, mysql에 이 user를 통해 접속할 수 있다.

그럼 이제 로컬에서 우리가 만든 MySQL 서버로 접속이 되는지 살펴보자.


Local에서 MySQL 서버에 접속하기

MySQL workbench 등의 database 연결을 할 수 있는 프로그램을 활용해보자.

위와 같이 hostname에는 서버의 ip를, username에는 방금 만든 mysql 계정 그리고 패스워드를 입력한다.
그리고 test connection을 보내면 갑자기 무지개가 돌면서 잠시 멈출 것이다.

이유는 뭘까?

EC2 보안 그룹 설정

그 이유는 MySQL 연결에 사용되는 3306 포트를 EC2에서 허용하지 않았기 때문이다.
예전에 생성한 ec2 인스턴스의 3306 포트를 열어주러 간다.
우리가 만든 인스턴스의 정보에서 [보안]-[보안 그룹]의 보안 그룹 규칙 ID 링크를 누른다.

그럼 현재 인바운드 규칙이 아래와 같이 나오는데, 인바운드 규칙 편집을 누른다.

그리고 새 인바운드 규칙으로 3306 포트에 대해서 추가해준다. 이것 역시 보안을 위해 내 IP에 대해서만 우선 열어놓자.

그리고 다시 MySQL connection을 시도해본다. 하지만 여전히 failed이 될 것이다. 하지만 응답 속도가 빨라졌다. 서버에는 도달했지만 곧바로 거절당했음을 유추해볼 수 있다.

MySQL bind-address 설정

다시 서버로 돌아가서, 다음과 같이 입력한다.

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

이 configuration 파일을 열면 아래와 같은 설정 값이 있다.

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

이 두개를 모두 주석 처리해주고 저장한다.
그 다음 설정을 저장하기 위해 명령어를 입력한다.

$ systemctl status mysql

그 다음 workbench에서 실행해보면 정상적으로 연결이 된다. 혹시라도 안되시면 ec2 인스턴스를 재부팅해보시면 잘 되실 것입니다!


이로써 우리가 만든 서버에 데이터베이스를 띄우는 데 성공했습니다. 마지막으로 Spring 프로젝트만 실행하면 배포가 끝납니다.

배포 시 참고용으로 작성된 글입니다. 잘못된 내용이나 보완이 필요한 내용은 언제든지 댓글 부탁드립니다 :)

profile
천천히, 하지만 꾸준히 그리고 열심히

1개의 댓글

comment-user-thumbnail
2024년 3월 5일

캡쳐이미지랑 설명이 살짝 밀린 부분이 있는 것 같습니다 :)

답글 달기