지난 글에서 성공적으로 서버 설정과 필요한 MySQL, jdk를 설치했으니 이번엔 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 서버로 접속이 되는지 살펴보자.
MySQL workbench 등의 database 연결을 할 수 있는 프로그램을 활용해보자.
위와 같이 hostname에는 서버의 ip를, username에는 방금 만든 mysql 계정 그리고 패스워드를 입력한다.
그리고 test connection을 보내면 갑자기 무지개가 돌면서 잠시 멈출 것이다.
이유는 뭘까?
그 이유는 MySQL 연결에 사용되는 3306 포트를 EC2에서 허용하지 않았기 때문이다.
예전에 생성한 ec2 인스턴스의 3306 포트를 열어주러 간다.
우리가 만든 인스턴스의 정보에서 [보안]-[보안 그룹]의 보안 그룹 규칙 ID 링크를 누른다.
그럼 현재 인바운드 규칙이 아래와 같이 나오는데, 인바운드 규칙 편집을 누른다.
그리고 새 인바운드 규칙으로 3306 포트에 대해서 추가해준다. 이것 역시 보안을 위해 내 IP에 대해서만 우선 열어놓자.
그리고 다시 MySQL connection을 시도해본다. 하지만 여전히 failed이 될 것이다. 하지만 응답 속도가 빨라졌다. 서버에는 도달했지만 곧바로 거절당했음을 유추해볼 수 있다.
다시 서버로 돌아가서, 다음과 같이 입력한다.
$ 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 프로젝트만 실행하면 배포가 끝납니다.
배포 시 참고용으로 작성된 글입니다. 잘못된 내용이나 보완이 필요한 내용은 언제든지 댓글 부탁드립니다 :)
캡쳐이미지랑 설명이 살짝 밀린 부분이 있는 것 같습니다 :)