AWS EC2 서버에 MYSQL 구축하기
AWS에서 EC2 인스턴스라는 물리적인 서버를 만든 후 이 안에 우분투 OS(메모리, 하드디스크, cpu의 자원을 관리하는 역할)를 설치하고 우분투 안에 MYSQL를 구축하는 과정입니다. 가장 먼저 AWS 사이트에 접속후 검색창에 EC2를 입력한 후 인스턴스 생성하기를 누른다
- ubuntu 20.4 환경에서 실습 진행
진행 순서
AWS에서 EC2 인스턴스 생성하기
로컬 터미널에서 생성한 서버로 접속하기
접속한 서버에 MYSQL 구축하기
설치한 workbench에 생성한 서버와 연결한 후 2가지 방법으로 db의 샘플 데이터 보내기
(client에서 인터넷망을 통해 mysql서버에 접속하기)
1. 가장먼저 AMI를 선택한다
AMI는 인스턴스를 시작할때 이 서버에서 필요한 SW 구성이 포함된 템플릿이다. 나는 Ubuntu 18.04 os를 선택하였다. 20.04를 선택해도 상관없다.
AMI의 역할 중 하나는 EC2 인스턴스를 생성하는 이미지 역할이다. 쉽게 말해 컴퓨터에 있는 프로그램들의 이미지와 같은 역할을 한다.
또다른 역할 중 하나는 다른 계정에 똑같은 AMI를 생성하고 싶을때 해당 AMI를 복사해서 새로운 서버에 다시 올려서 사용되는 역할을 한다.
2. 인스턴스 유형을 선택해준다.
이때 프리티어 사용 가능
이라고 써져 있는 인스턴스를 선택해준다
3. 3~5단계는 특별히 설정할게 없어서 건너 띄어주었다. 6단계인 보안 그룹 구성에서는 설정해주어야 할 것 들이 여러개 있다
이 단계에서는 포트를 설정해주어야 한다. 필수는 아니지만 컨벤션하게 설정되는 포트들을 작성한다. 아래의 이미지처럼 총 6개의 포트를 설정해준다. 이때 보안 그룹 이름/설명은 변경할 수 있다.
포트의 역할
외부에서 인스턴스(서버)로 들어올때 인터넷 망을 통해서 들어오는데 이때 포트가 문 역할을 해준다. 포트를 열어놓지 않으면 외부에서 해당 서버에 들어올 수 없다
4. 7단계 인스턴스 시작 검토에서 시작하기를 누르면 새 키 페어 생성창이 화면처럼 뜨게 된다.
그럼 해당 키 페어의 이름을 작성해주면 된다. 나는 진행할 프로젝트의 앞 단어들을 따서 지어주었다. 이후 키 페어 다운로드를 눌러서 다운받아준다. 이 파일을
터미널을 통해 방금 만든 서버에 접속할때 키 페어 파일과 로컬에 저장된 위치를 알고 있어야 한다
5. 이제 EC2 서버는 구축이 완성되었다. 이제 터미널을 열어 방금 만든 서버에 접속해보자
.ssh의 폴더을 만들어준다. 이곳에 이전에 저장해두었던 키페어 파일을 옮겨 준다. 이 과정은 컨벤션이므로 꼭 폴더 이름을 ssh로 하지 않아도 되지만 따르길 권장한다고 한다. mv 명령어로 키페어 파일을 옮겨주면 된다. 보통 파일은 downloads 디렉터리에 있지만 나는 파일을 옮겼기 때문에 옮긴곳의 디렉터리를 입력해주었다. 두번째의 명령어는 .ssh 폴더로 해당 파일을 옮기는 명령어이다
$ mkdir /.ssh
$ mv ~/Desktop/DB/neo.pem ~/.ssh
이후 키페어 파일은 파일 권한 가진 사람만 읽을 수 있게 설정해줘야 ssh의 키값으로 사용이 가능하다. 파일 권한을 400으로 바꿔준다.
$ chmod 400 ~/.ssh/neo.pem
이제 서버에 접속하기 위한 기본 설정은 끝이났다. 아래의 명령어를 통해 ec2서버에 접속해보자. 이때 서버에 접속하기 위해서는 퍼블릭 ip가 필요하다. 아래의 명령어와 같이 ubuntu@~를 작성하는 이유는 실제로 우분투에서 터미널에서 유저의 계정이 나오는 것처럼 ec2인스턴스에도 기본적으로 root가 있고 그 밑에 ubuntu 이름(인스턴스의 사용자 계정)을 가지는 사용자 계정이라고 생각하면 된다
ssh -i ~/.ssh/neo.pem ubuntu@{생성한 ec2의 퍼블릭 ip}
명령어 입력후 터미널 왼쪽에 방금 생성한 ubuntu@{퍼블릭ip}
내용이 뜨면 접속에 성공한것 이다
$ ubuntu@{퍼블릭 ip}
이때 위에 있는 명령어는 서버에 접속하기 위해 항상 입력해야 하는 명령어이기 때문에 alias로 설정해두는게 편하다
나는 bashrc를 쓰기때문에 bashrc로 들어왔지만 .zshrc쓰는 사람은 이곳에서 설정해야 한다
$ vi .bashrc
$ alias neo="ssh -i ~/.ssh/neo.pem ubuntu@{생성한 ec2의 퍼블릭 ip}"
$ source .bashrc
이후 neo를 입력하면 서버에 접속되는 것을 볼 수 있다.(neo는 내가 저장한 네임이다)
6. 이제 접속한 ec2서버에 mysql 서버를 구축해보자
가장 먼저 apt-get를 업데이트 해주어야 한다. 뒤에 -y를 붙이는 이유는 모든 질문에 대한 답을 yes로 응답하겠다는 의미이기 때문에 자동으로 넘어가서 편리하다
$ sudo apt-get update -y
$ sudo apt-get upgrade -y
7. mysql 서버를 설치한다
sudo apt-get install -y mysql-server mysql-client
8. mysql의 패스워드를 설정해준다
이때 비밀번호 설정전 최초로 mysql에 접속할땐 sudo mysql로 들어간다. 이후 비밀번호가 설정되면
mysql -u root -p
를 입력후 비밀번호를 입력하고 접속하면 된다.
아래 명령문에서 SELECT로 시작하는 명령문은 실제 MYSQL에 비밀번호가 설정되어 있는지 확인하는 곳이다 ALTER로 비밀번호를 설정한후 SELECT~로 비밀번호가 제대로 설정되었는지 확인한다
$ sudo mysql
mysql > SELECT user,authentication_string, plugin, host FROM mysql.user;
mysql > ALTER USER root'@'localhost IDENTIFIED WITH mysql_native_password BY '비밀번호 입력';
mysql > SELECT user,authentication_string, plugin, host FROM mysql.user;
패스워드 수정하는 방법
mysql > ALTER USER 'root'@'localhost' IIDENTIFIED BY '{변경할 비번}';
9. mysql의 외부접속을 설정을 변경해준다
bind address를 0.0.0.0으로 변경해준다. 127.0.0.1로 설정되면 로컬 호스트에서만 접근이 가능하기 때문에 외부에서 접속할 수 있도록 변경해주어야 한다. 이때 외부에서 접속할때 pwd를 설정해주어야 한다
$ sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
# bind-address에 설정되어 있는 127.0.0.1 을 0.0.0.0으로 변경해준다
################### 외부 접속 패스워드 설정
$ mysql - u root -p
mysql > grant all privileges on *.* to root@'%'identified by '{비밀번호 입력}';
mysql > exit
10. 설정 후 서버 재시작으로 설정 내용을 적용한다
% sudo systemctl restart mysql.service
restart는 자동으로 종료후 시작을 해주는 명령어이다
start는 서버 시작을 해주는 명령어이다
stop은 서버 종료 해주는 명령어이다
status는 서버의 상태를 확인하는 명령어이다.(active가 떠있으면 서버가 실행중임을 의미한다)
11. 이제 workbench를 설치하여 mysql서버에 접속해보자
workbench 설치는 8.0.22버전으로 받아주었다. 해당 버전으로 해야 workbench에서 서버를 연결할때 에러가 발생하지 않으니 이점 유의해서 설치하도록 하자 ! https://dev.mysql.com/downloads/workbench/
설치후 workbench 에서 서버와 연결할때 username은 우분투 서버에 접속하는 것이 아니고 mysql서버에 접속하기 때문에 mysql 계정의 username을 써준다. 이후 workbench에 text를 눌러 success가 뜨면 연결에 성공한것이다
그럼 이제 우리는 aws ec2 서버안에 우분투에 구축되어 있는 mysql 서버에 workbench(client)를 통해 접속해 있는 것이다
12. 이제 샘플 데이터를 로컬 서버에서 ec2서버로 파일을 보낸후 mysql에서 열어보자
이때 workbench에 샘플 데이터를 가져오는 방법은 2가지가 있다. 서버와 연결되어 있는 workbench안에서 직접 다운받는
방법 과 로컬서버에서 ec2서버로 직접 파일을 보내는 방법이 있다
먼저 얘기하자면 로컬서버에서 ec2서버로 직접 파일을 보내는 방법이 훨씬 빠르긴 하지만 좀 더 복잡할 수 있다.
1-1. workbench에서 샘플데이터 추가하기
먼저 https://dev.mysql.com/doc/index-other.html 이곳에서 world, sakila 데이터 베이스를 추가한다.(다른거 추가해도 된다. 주로 사용되는 샘플데이터이다)
1-2. workbench의 파일메뉴에서 open SQL Script를 선택한 후 world.sql 파일을 선택한다
world.sql 파일에 있는 쿼리문이 로드되면 쿼리 실행 아이콘(상단 번개표시)을 클릭한다. 이후 좌측 레이아웃에서 오른쪽 마우스 클릭후 refresh all 메뉴를 선택하면 world 데이터 베이스가 나타난다.
sakila의 경우에는 스키마 파일과 데이터 파일이 분리되어 있다. 이땐 데이터 베이스의 구조를 만든 후에 데이터를 입력할 수 있기 때문에 스키마 피일(sakila-schema.sql)을 실행한 후에 데이터 파일(sakila-data.sql)을 실행해준다
2-1. 서버에서 데이터베이스 데이터 추가하기
먼저 ec2 서버로 sql 파일을 전송한다. 아래의 명령어는 로컬 desktop에 sql폴더에 있는 도모든 파일을 ec2서버를 보내는 명령어이다
$ scp -i ~/.ssh/reo.pem ~/Desktop/sql/* ubuntu@{ip주소}:~/
다운받은 .sql 파일들을 sql 폴더를 생성한후 sql폴더에 넣는 명령어이다
$ mkdir sql && mv ~/*.sql ~/sql
데이터베이스를 생성해준다
sql > create database world;
데이터베이스에 데이터를 추가해준다. 이때 -p바로 다음에 설정된 pwd를 입력하고 아래와 같이 작성하면 sql폴더에 있는 world.sql파일이 생성한 world데이터베이스에 들어간다
mysql> -u root -p{db비밀번호} world < ~/sql/world.sql
이렇게 해서 긴 과정이 끝이났다. 사실 처음 할때는 굉장히 복잡해보이고 어려운데 하나하나 이해하면서 구축하면 재밌다. :-)