AWS RDS MySQL에서 카카오클라우드 MySQL로 데이터 이관 및 복제
AWS RDS MySQL과 카카오클라우드 MySQL 간의 데이터 이관 및 복제 방법을 설명합니다.
- 예상 소요 시간: 60분
- 권장 운영 체제: Windows, MacOS
- Region: kr-central-2
시나리오 소개
이번 시나리오에서는 AWS RDS MySQL에서 카카오클라우드 MySQL로 데이터를 이관하는 방법과, 카카오클라우드 MySQL에서 AWS RDS MySQL로 데이터를 복제하는 방법을 설명합니다. 주요 내용은 다음과 같습니다.
- MySQL Workbench와 MySQL Dump를 활용해 데이터 이관
- MySQL Replication을 이용해 데이터 복제
사전 작업
1. 네트워크 환경 구축
카카오클라우드에서 MySQL의 데이터 이관 및 복제를 구축하기 전에 먼저 네트워크 환경 설정이 필요합니다. 이를 위해, 다중 가용 영역에서 NAT 인스턴스를 이용한 네트워크 구축 문서를 참조하여 프라이빗 서브넷에 존재하는 리소스들이 외부 통신이 가능하도록 구축하세요.
2. 보안 그룹 설정
보안 그룹 설정은 외부 불법 접근 차단과 필요한 트래픽 허용을 통해 데이터 안전성을 확보하고, 원활한 네트워크 통신을 위해 필요합니다.
보안 그룹: tutorial-bastion-sg
-
카카오클라우드 콘솔 > VPC > 보안 그룹 메뉴로 이동합니다. 아래 표를 참조하여 보안 그룹을 생성합니다.
이름 설명(선택) tutorial-bastion-sg Bastion 호스트의 보안정책 -
하단의 [+ 추가하기] 버튼을 클릭 후, 인바운드 조건을 아래와 같이 설정하고 [적용] 버튼을 클릭합니다.
나의 퍼블릭 IP 확인하기다음 버튼을 클릭하면 현재 사용 중인 나의 퍼블릭 IP를 확인할 수 있습니다.
추가할 인바운드 규칙 항목 설정값 bastion inbound policy 1 프로토콜 TCP
패킷 출발지 {사용자 공인 IP}/32
포트 번호 10000-10010 정책 설명(선택) bastion inbound policy 1 bastion inbound policy 2 프로토콜 TCP
패킷 출발지 {사용자 공인 IP}/32
포트 번호 81 정책 설명(선택) bastion inbound policy 2 bastion inbound policy 3 프로토콜 TCP
패킷 출발지 {사용자 공인 IP}/32
포트 번호 22 정책 설명(선택) bastion inbound policy 3
3. Bastion 호스트 설정
Bastion 호스트는 클라우드 환경에서 데이터 이관 및 MySQL 접속을 위한 VM으로, 원격으로 클라우드 인스턴스에 안전하게 접근할 수 있는 게이트웨이 역할을 수행합니다.
- 카카오클라우드 콘솔 > Beyond Compute Service > Virtual Machine 메뉴로 이동합니다.
- 아래 표의 항목과 값을 참조하여 Bastion 호스트의 역할을 할 VM 인스턴스를 생성합니다.
구분 | 항목 | 설정/입력값 | 비고 |
---|---|---|---|
기본 정보 | 이름 | tutorial-bastion | |
개수 | 1 | ||
이미지 | Ubuntu 20.04 | ||
인스턴스 타입 | m2a.large | ||
볼륨 | 루트 볼륨 | 20 | |
키 페어 | {USER_KEYPAIR} | ⚠️ 키 페어는 최초 1회 안전하게 보관해야 합니다. 잃어버린 키는 복구할 수 없으며, 재발급이 필요합니다. | |
네트워크 | VPC | tutorial | |
서브넷 | main (10.0.0.0/20) | ||
보안 그룹 | tutorial-bastion-sg |
4. MySQL 데이터베이스 생성
데이터 마이그레이션을 위한 MySQL 인스턴스를 생성합니다. 카카오클라우드의 MySQL은 완전 관리형 데이터베이스 서비스로, 복잡한 설치 없이 콘솔에서 간편하게 MySQL 인스턴스를 프로비저닝할 수 있습니다. 또한, 논리적으로 분리된 네트워크에서 안전하게 사용할 수 있습니다.
-
카카오클라우드 콘솔 > Data Store > MySQL 메뉴로 이동합니다.
-
인스턴스 그룹 탭에서 [인스턴스 그룹 생성] 버튼을 클릭 후, 다음을 참고하여 인스턴스 그룹을 생성합니다.
구분 항목 설정/입력값 비고 기본 설정 인스턴스 그룹 이름 tutorial-mysql 설명 선택 MySQL 설정 엔진 버전 지정된 값을 사용 MySQL 사용자 이름 admin MySQL 비밀번호 root1234 인스턴스 가용성/개수 단일 (Primary 인스턴스) 인스턴스 타입 m2a.large 스토리지 타입/크기 100 로그 스토리지 타입/크기 100 네트워크 설정 VPC tutorial 서브넷 {VPC_ID}_sn_5 (10.0.64.0/20)
⚠️ NAT 인스턴스 튜토리얼에서 생성한 서브넷을 사용합니다. 자동 백업 자동 백업 옵션 미사용
MySQL 데이터 마이그레이션
MySQL 데이터 마이그레이션은 MySQL Dump를 활용하는 방법과 MySQL Workbench를 사용하는 방법으로 진행할 수 있습니다.
데이터 이관은 모두 인터넷망을 통해 이루어지므로, 데이터베이스 인스턴스 간 인터넷 연결이 가능해야 합니다.
1. MySQL Workbench 활용
MySQL Workbench는 SQL 개발과 관리를 단일 개발 통합 환경에서 제공하는 비주얼 데이터베이스 설계하는 오픈소스 도구입니다. 이 튜토리얼에서는 Windows 인스턴스를 기반으로 설명합니다.
Step 1. 데이터 이관 및 MySQL 접속용 VM 접속하기
-
Window 인스턴스 연결를 참고하여 VM 인스턴스에 MySQL Workbench를 설치하기 위해 RDP로 접근합니다.
-
MySQL Workbench 다운로드 공식 홈페이지에서 다운로드 및 설치를 진행합니다.
Step 2. 데이터 마이그레이션 진행하기
-
MySQL Workbench > Database > Migration Wizard를 클릭해 데이터 마이그레이션을 준비합니다.
항목 설정/입력값 비고 Source Selection AWS Database 서버 접근 정보 입력 Test Connection으로 접근 테스트 가능 Target Selection 카카오클라우드 데이터베이스 서버 접근 정보 입력 Test Connection으로 접근 테스트 가능 Schemas Selection 마이그레이션을 진행할 스키마 선택 튜토리얼에서는 Library Schemas 를 선택 Source Objects 대상 테이블 선택 PROCEDURE 또는 FUNCTION 선택 가능 Migration 마이그레이션을 진행할 대 상의 스크립트 생성 Target Creation Options 타겟 데이터베이스에 스키마 생성 및 SQL 스크립트 파일 생성 Create Schemas 테이블 생성 시작 및 로그 확인 Bulk Data Transfer 최종 데이터 이관 완료 로그 확인
위 항목은 필수 설정이며, 나머지 항목은 기본값으로 설정하여 진행합니다.
Step 3. 카카오클라우드 MySQL에서 Migration 데이터 확인
-
사전 준비 단계에서 설정한 Bastion 인스턴스에서 MySQL 인스턴스 그룹에 연결하기 위해, MySQL Client를 이용하여 가상 머신 인스턴스에서 MySQL 인스턴스 연결 명령을 실행합니다.
MySQL 인스턴스 연결 명령어mysql --user={USER} --password={USER_PASSWORD} --host {ENDPOINT} --port {PORT}
항목 설명 user {USER}
: DB 사용자 이름
- MySQL 인스턴스에 연결하는 DB 관리자 계정의 이름password {USER_PASSWORD}
: MySQL 인스턴스 연결하는 관리자 계정의 초기 패스워드
- MySQL 생성 시 입력한 비밀번호host {ENDPOINT}
: MySQL 엔드포인트 정보
- MySQL 인스턴스가 가지고 있는 엔드포인트port {PORT}
: 사용자가 인스턴스 그룹을 만들 때 설정한 포트 번호 -
카카오클라우드 MySQL에서
library
스키마에 있는book
테이블의 데이터 정합성을 확인합니다.MySQL 인스턴스 명령어mysql> use library;
Database changed
mysql> select * from book;
2. MySQL Dump 활용
MySQL 덤프(MySQL Dump)는 데이터베이스의 데이터를 백업하거나 이관하기 위해 사용하는 유틸리티이자 명령입니다.
Step 1. AWS RDS 데이터 덤프
카카오클라우드 VM에서 mysqldump
명령을 사용하여 AWS RDS MySQL Replica DB를 대상으로 덤프를 수행합니다. 덤프 수행전 Replica를 중지시키고 작업합니다.
# 1. 카카오클라우드 VM에 접속
Bastion Server 인스턴스에 접속합니다.
# 2. AWS 읽기 전용 복제본 연결
shell> mysql --user=admin --password=admin1234 --host {aws-rds-read-replica}.ap-northeast-2.rds.amazonaws.com --port 3306
# 3. 읽기 전용 복제본 Replication 중지
mysql> CALL mysql.rds_stop_replication;
+-------------------------------+
| Message |
+-------------------------------+
| Slave is now down or disabled |
+-------------------------------+
1 row in set (3.01 sec)
Query OK, 0 rows affected (3.01 sec)
mysql> exit
Bye
# 4. 읽기 전용 복제본 덤프
shell> mysqldump -h {aws-read-replica}.ap-northeast-2.rds.amazonaws.com \
-u admin \
-p \
--port=3306 \
--routines \
--triggers \
--databases {덤프_데이터베이스} > aws_source.sql
Enter password: {어드민 비밀번호 입력}
Warning: A partial dump from a server that has GTIDs will by default include the GTIDs of all transactions, even those that changed suppressed parts of the database. If you don't want to restore GTIDs, pass --set-gtid-purged=OFF. To make a complete dump, pass --all-databases --triggers --routines --events.
Warning: A dump from a server that has GTIDs enabled will by default include the GTIDs of all transactions, even those that were executed during its extraction and might not be represented in the dumped data. This might result in an inconsistent data dump.
In order to ensure a consistent backup of the database, pass --single-transaction or --lock-all-tables or --master-data.
mysqldump: Got error: 1049: Unknown database 'erin-database' when selecting the database
# 5. 경고 메시지가 나오지만 덤프 파일 생성 확인 가능
shell> ls
aws_source.sql
Step 2. 카카오클라우드 MySQL로 데이터 가져오기 및 복제 설정
카카오클라우드 VM에 생성된 덤프 파일을 사용하여 카카오클라우드 MySQL로 데이터를 가져옵니다.
# 카카오클라우드 MySQL로 접속
shell> mysql --user={USER} --password={USER_PASSWORD} --host {KAKAOCLOUD-MySQL-ENDPOINT} --port 3306
# 권한 부여
mysql> grant SYSTEM_VARIABLES_ADMIN,REPLICATION_SLAVE_ADMIN on *.* to 'admin'@'%';
Query OK, 0 rows affected (0.00 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
mysql> exit
Bye
# 데이터 가져오기
shell> mysql --user=admin --password=admin1234 --host {kc-mysql-endpoint} --port 3306 < aws_source.sql
mysql: [Warning] Using a password on the command line interface can be insecure.
# 카카오클라우드 MySQL에 접속하여 덤프한 데이터가 임포트(import)됨을 확인
MySQL 데이터 Replication
카카오클라우드 MySQL에서 AWS RDS MySQL로 데이터를 마이그레이션하고 복제하는 방법을 소개합니다.