[Web] 최종프로젝트(11)AWS EC2 RDS MySQL연결

hyewon jeong·2023년 3월 4일
4

web

목록 보기
13/24

📌1. AWS EC2 RDS MySQL생성

  1. AWS RDS 대시보드 이동한다.

  1. 데이터베이스 생성

  • Amazon RDS의 MySQL 버전 결정에 참고자료

    현 서비스로 배포 목적이 아니지만 최신 버전 중 연장가능성 고려하여 23년 9월까지인 8.0.31 로함

마스터 사용자 이름, 마스터 암호

  • 마스터 사용자의 id와 암호를 작성

  • 이부분은 추후, MySQL에 접속할때 활용되므로 잘 기억해 두어야 함

  • 프로젝트 마다 다르지만
    디폴트값으로 설정되어 있는 값을 사용 ~

  • 디폴드값을 설정
    최대 스토리지 임계값은 1000GB 로 서정 되어 있다.

  • 퍼블릭 액세스는 "예" 로 지정
    "아니요"를 선택하면 퍼블릭 IP 주소가 할당되지 않기 때문에 외부에서 접속할 수 없음

  • EC2 와 마찬가지로 보안 그룹을 설정하거나 새로 생성할 수 있음.
    기존에 사용 중인게 있다면 "기존 항목 선택" 을 누르고 보안 그룹을 추가하면 됨
    여기서는 "새로 생성" 으로 할 예정

  • 초기 데이터베이스 이름 설정
  • 백업 설정 활성화 체크 :
    🎈 만약 개발자용이라 데이터가 중요하지 않다면 (연습용 이라면) 스냅샷을 생성한다고 메모리 잡아먹을 가능성이 있어 자동 백업을 비활성화 하지만, 만약에 지워져도 복구해야 하는 데이터라면 당연히 백업용 활성화 해야한다. 그래서 우린 체크하기로 결정

📌2. AWS RDS MySQL 보안그룹 설정

RDS 인스턴스를 생성할 때 보안 그룹을 새로 생성한 걸 기억나쥬?

데이터베이스는 서버에서 접근 가능해야 하기 때문에 보안 그룹 설정이 추가로 필요한다.
???????여기서 서버란 곧 "EC2 인스턴스의 (탄력적) IP" 를 의미한다.
(탄력적) IP 를 직접 넣는 대신 손쉽게 설정할 수 있는 방법이 있다.

  1. 현재 보안 그룹 확인

    RDS 인스턴스 정보로 들어가면 하단에서 보안 그룹 규칙을 확인할 수 있다.
    친절하게 제가 접속할 수 있게 로컬 IP 만 인바운드 규칙에 추가되어 있다.
    아웃바운드는 EC2 와 마찬가지로 모든 트래픽에 대해 열어둡니다.
    RDS 보안 그룹은 EC2 보안 그룹이랑 별도로 관리하지 않고 같은 곳에서 관리한다.
    따라서, 보안 그룹을 편집하려면 EC2 대시보드로 이동하거나 저 보안 그룹 이름을 클릭해서 페이지를 열어야 한다.

📌3. RDS 파라미터 그룹 셋팅

RDS - 파라미터 그룹 클릭 - 파라미터 그룹 생성 후 -편집 클릭
(1)character 검색하여 나오는 6개 utf8mb4 로 설정

(2)time_zone 검색하여 서울로 설정

(3)collation을 검색하여 나오는 2개를 uf8mb4_general_ci로 변경
(내 경우는 3개나와서 3개 변경함)

(4) 마지막으로 max_connections를 150정도로 수정

📌4. 이제 EC2 인스턴스가 해당 RDS에 접속할수 있도록 하고, 내 PC로도 접속할 수 있도록 한다.

(1) 메뉴에서 데이터베이스 -> 해당 DB 선택 -> 수정클릭 후

-> 3에서 만들었던 DB파라미터 그룹을 생성한 그룹으로(team-database1) 변경 저장 - 즉시 적용 하기 선택후 저장

(2) ec2 인스턴스로 가서 - 보안 태그선택 - 보안그룹 id 복사

(3) RDS 인바운드 규칙에 EC2 보안 그룹 ID 입력
RDS의 보안 그룹의 인바운드 규칙에 두가지를 추가한다.
1. 내 IP
2. 복사한 EC2 보안그룹id

이제 인텔리제이에 플러그인을 설치해서 내 PC에서 DB에 접근할수 있도록 한다

📌5.DBeaver 이용한 AWS RDS MySQL 인스턴스 연결



이제 위에서 복사해두었던 값들을 꺼낼 차례이다. 각 항목에 맞는 값들을 입력한다.

Server Host : 엔드포인트
Port : 포트
Database : DB 이름
Username : 마스터 사용자 이름
Password : 비밀번호
입력이 끝났다면 좌측 하단에 Test Connection... 버튼을 클릭해 접속이 정상적으로 이루어 지는지 테스트한다.


위 처럼 나온다면 테스트 성공!
완료 버튼을 눌러 빠져나온다.

📌6. DB 정보 확인하기


정상적으로 연결이 잘 된 것 같다..!
설정했던 파라미터가 제대로 적용되었는지, 쿼리는 정사적으로 수행 되는지 확인해보기 위해 상단에 SQL 버튼을 선택해서 스크립트 창을 연다.

파라미터 설정 확인하기

SHOW variables LIKE "c%";

Character와 Collation 파라미터를 확인해보기 위해 위 명령어를 수행한다.

설정했던 파라미터의 값들이 모두 설정한대로 제대로 들어가있는 것을 확인한다.

SELECT @@time_zone, now();

타임존 설정을 확인하기 위해 위 명령어를 수행한다.
만약에 timezone 을 변경을 원할 경우 (서울로)

SET time_zone='Asia/Seoul';

하면 변경된다.

📌7. 쿼리 정상 수행 확인하기

CREATE TABLE test (
	id 		bigint(20) NOT NULL AUTO_INCREMENT,
	content varchar(255) DEFAULT NULL,
	PRIMARY KEY(id)
) ENGINE=InnoDB;
	
INSERT INTO test(content)
VALUES ("테스트 content");

SELECT *
FROM test;

test라는 테이블을 만들고 한글과 영어를 섞은 문자열 데이터를 삽입해보았다.


쿼리도 정상적으로 수행되었고, 한글 문자열 역시 깨지지 않고 정상적으로 들어갔다.

database에서 rds 연결 후

new console 클릭 한후 - show databases ; 쿼리 수행

use mydb; 수행후
select * from test; 쿼리 수행 하면 Dbeaver에서 만든 테스트 ㅌㅔ이블이 확인 됨을 알 수 있음


포스트맨으로 faq 등록후 확인하니까 잘나옴

마지막으로 EC2에서 접근이 잘되는지 확인하겠습니다.

📌8.EC2에서 RDS 접근 확인

EC2 에서도 RDS에 접속할 수 있는지 확인하기 위해 Putty를 실행하고 먼저 mysql을 설치한다.
명령어 안됨 sudo yum install mysql
아래와 같은 에러가 난다. 이유는?
Last login: Sun Mar 5 05:06:50 2023 from 45.64.145.40
ubuntu@ip-172-31-2-147:~$ sudo yum install mysql
sudo: yum: command not found
ubuntu@ip-172-31-2-147:~$

해결방법:해결방법: yum 설치 한후 하면된대용~ yum 설치 에러로 apt로 바꿈
sudo apt install mysql

EC2에 SSH 접근을 확인합니다.
접속되었다면 MySQL 접근 테스트를 위해 MySQL CLI를 설치하겠습니다.
설치후 아래 명령어 대로 한다.

(1)

 sudo apt install mysql

(2)설치가 완료되었다면 로컬에서 접근하듯이 계정,비밀번호, 호스트 주소를 사용해 RDS에 접속합니다.

mysql -u 계정 -p -h Host주소

아래 명령어 따라서 하기

ubuntu@ip-172-31-2-147:~$ sudo apt install mysql
Reading package lists... Done
Building dependency tree       
Reading state information... Done
E: Unable to locate package mysql

ubuntu@ip-172-31-2-147:~$ sudo apt update //업데이트 
Hit:1 http://ap-northeast-2.ec2.archive.ubuntu.com/ubuntu bionic InRelease
....
Building dependency tree       
Reading state information... Done
6 packages can be upgraded. Run 'apt list --upgradable' to see them.
//mysql-client 설치 
ubuntu@ip-172-31-2-147:~$ sudo apt install mysql-client
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following additional packages will be installed:
  libaio1 mysql-client-5.7 mysql-client-core-5.7 mysql-common
The following NEW packages will be installed:
  libaio1 mysql-client mysql-client-5.7 mysql-client-core-5.7 mysql-common
0 upgraded, 5 newly installed, 0 to remove and 6 not upgraded.
Need to get 8811 kB of archives.
After this operation, 62.1 MB of additional disk space will be used.
Do you want to continue? [Y/n] Y
Get:1 http://ap-northeast-2.ec2.archive.ubuntu.com/ubuntu bionic-updates/main amd64 libaio1 amd64 0.3.110-5ubuntu0.1 [6476 B]
...
// mysql 버전확인
ubuntu@ip-172-31-2-147:~$  mysql -V

mysql  Ver 14.14 Distrib 5.7.41, for Linux (x86_64) using  EditLine wrapper
ubuntu@ip-172-31-2-147:~$ mysql -h team-database1.cjqopg7k8xlv.ap-northeast-2.rds.amazonaws.com -u admin -p
Enter password: 
ERROR 1045 (28000): Access denied for user 'admin'@'172.31.2.147' (using password: YES)
ubuntu@ip-172-31-2-147:~$ mysql -h team-database1.cjqopg7k8xlv.ap-northeast-2.rds.amazonaws.com -u admin -p
Enter password: 

ec2 와 rds 연동 됨을 확인 할수 있음 😄

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 347
Server version: 8.0.31 Source distribution

Copyright (c) 2000, 2023, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

EC2에서 RDS 접근 확인

MYSQL 클라이언트는 서버가 관리하는 데이터베이스의 정보를 조작하기 위해 서버와 통신하는 프로그램입니다. 예 : mysql 은 서버의 텍스트 기반 프런트 엔드 역할을하는 명령 줄 프로그램입니다.

남은 부분은 다음 블로그에서 정리~
최종프로젝트(13) . Spring boot 와 MySQL 연결

AWS EC2 RDS MySQL생성
AWS EC2 RDS MySQL연결
AWS-RDS-DBeaver에-연결하기

profile
개발자꿈나무

0개의 댓글