DevOps/DevOps

[DevOps] AWS에서 cloudtype으로 DB 마이그레이션하기

sebinChu 2024. 8. 10. 17:58

개요


 

앞편에서 cloudtype의 MariaDB를 생성해주었다. 이에 이어서 AWS MySQL로부터 cloudtype MariaDB로 마이그레이션을 함으로써 비용을 절약해보자.

 

 

가장 먼저 cloudtype 프로젝트 전체 설정(나의 경우 koala)에서 TCP 허용이 되어있는지 확인하자.

 

 

 

 

1) RDS 외부 접근을 위한 작업


일단 마이그레이션을 하려면 AWS RDS에 직접 내 로컬에서 접근이 가능해야 한다.

 

 

1-1) 마스터 암호 설정

DB 수정을 통해 마스터 암호를 설정하자.

 

 

1-2) 퍼블릭 액세스 허용

 

 

1-3) 보안그룹이 설정되어 있다면 인바운드에 나의 IP 등록

DB에 보안그룹이 설정되어있다면, 나의 IP가 접근 가능하도록 정보를 등록해준다.

 

2) 로컬 터미널에서 명령어를 통해 AWS RDS에 접근하기


 

mysql -h [endpoint] -u [user명] -P [port번호] -p

 

 

해당 명령어를 입력해서 AWS RDS에 접근한다. 엔드포인트와 유저명은 AWS RDS 콘솔의 속성에서 확인할 수 있다!

 

 

아까 설정한 마스터 암호를 입력하고 접속하면 위와 같이 접근 성공 메시지와 mysql> 이라는 터미널이 뜬다. 이렇게 되면 접근 성공이다!

 

여기서 SHOW databases; 명령어를 통해 내가 접근할 database 이름을 확인해두자. 

 

 

 

2-1) mysqldump 명령어를 통해 데이터 백업하기

DB 연결 및 정보를 확인한 뒤, exit로 종료하고 나서 mysqldump 명령어를 통해 DB의 정보를 백업한다.

 

mysqldump --set-gtid-purged=OFF -u [사용자명] -p[비밀번호] --host=[AWS RDS 엔드포인트] [데이터베이스명] > [원하는 파일명].sql

 

 

이 과정에서 다양한 에러가 발생할 수 있는데, 확인해볼 점은 다음과 같다.하나의 철자라도 틀리면 접근할 수 없으니 여기서 꼼꼼히 할 수 있도록 주의하자..!

 

  • 보안그룹 인바운드 규칙(1번 참고)
  • AWS DB 정보(RDS명, DB명, 마스터유저, 마스터비밀번호 등)
  • 로컬에서 mysql이 실행중이라면 확인 후, 이 프로세스를 죽이고 명령어를 실행할 것

 

📌 또 주의할 점 

 

이 문서에서 잘 알 수 있는데, mysqldump 명령어를 사용할 때, --set-gtid-purged=OFF 옵션을 빼먹지 않도록 주의하자.

필자는 ERROR 1227 (42000)를 마주하고나서야 알게되었다. 보통의 mysql db 복구는 GTID를 사용하지 않기 때문에 백업 단계에서 꼭 이 옵션을 추가해주어야 한다! 

 

  • GTID를 간단하게 말하자면 MySQL 복제에서 서버의 각 트랜잭션을 구분하는 고유한 식별자로, 백업 과정에 쓰이는 기능이다.

 

 

해당 명령어를 실행하면 내 로컬 컴퓨터 루트 경로에 sql 파일이 하나 생겨있음을 확인할 수 있다.

 

 

3) cloudtype MariaDB에 접속하기


 

AWS에 접근했을 때와 거의 동일하다. 

 

mysql -h [endpoint] -u [user명] -P [port번호] -p

 

 

 

사용할 데이터베이스를 use [database명]; 으로 ON 해주고, source [로컬경로/백업파일명.sql] 명령어를 통해 백업 파일을 실행해주자.

 

 

📌 ERROR 1273 (HY000): Unknown collation: 'utf8mb4_0900_ai_ci'

 

MySQL Workbench에서 해당 부분을 모두 'utf8m64_general_ci'로 변경해준다. 워크벤치의 Replace 기능을 활용하면 훨씬 수월하다.

 

 

 

 

쿼리문이 뜨고 데이터들이 잘 담긴 모습을 확인할 수 있다. 😭👍

 

 

4) DataGrip, IntelliJ에서 데이터와 API 확인해보기


  • 이후에 IntelliJ의 MySQL 의존성을 모두 MariaDB로 변경해준다.
  • 환경변수도 바꿔주고,
  • API 몇 개 테스트 한 뒤 서버에 적용하면 끝..! 🤗

배포까지 완료

 

 

 

cloudtype이 아직 활발히 쓰이진 않아서 다양한 자료를 찾기 어려웠다. (GCP를 쓸 때 하도 당해서 익숙하다..~)

꽤나 까다로웠던 마이그레이션 덕분에 4배 정도는 비용을 아낄 수 있게 되어 다행이다!

 

 

추가))

 

AWS 예상 비용을 확인해봤더니, RDS 없애기 + VM 인스턴스 스펙 낮추기로 비용이 확연히 줄었다!