PostgreSQL에서 카카오클라우드 MySQL로 데이터 이관
PostgreSQL에서 카카오클라우드 MySQL로 데이터 마이그레이션하는 방법을 설명합니다.
- 예상 소요 시간: 30분
- 권장 운영 체제: MacOS, Ubuntu
- Region: kr-central-2
- 사전 준비 사항
시나리오 소개
이번 시나리오에서는 PostgreSQL에서 카카오클라우드 MySQL로 데이터를 이관하는 방법을 소개합니다. 주요 내용은 다음과 같습니다.
- 마이그레이션 환경 구성: 보안 그룹 설정과 마이그레이션을 위한 Bastion 호스트를 생성하여 데이터 이관을 준비합니다.
- MySQL 데이터베이스 생성: 카카오클라우드 콘솔에서 관리형 MySQL 인스턴스를 생성합니다.
- PostgreSQL 데이터 변환:
pg_dump
로 PostgreSQL 덤프를 생성한 후, pg2mysql 컨버터 툴로 MySQL 형식으로 변환합니다. - MySQL 데이터 임포트 및 검증: 변환된 데이터를 MySQL 인스턴스에 임포트하고 데이터 정합성을 확인합니다.
pg2mysql 컨버터 툴은 PHP 기반으로 제공되는 오픈소스 소프트웨어로 자세한 정보는 공식 웹페이지를 참고해주시기 바랍니다.
시작하기 전에
1. 네트워크 환경 구축
카카오클라우드에서 데이터 이관 및 복제를 구축하기 전에 먼저 네트워크 환경 설정이 필요합니다. 아래 표의 항목과 값을 참조하여 VPC 및 퍼블릭 서브넷을 생성합니다.
-
카카오클라우드 콘솔 > Beyond Networking Service > VPC 메뉴로 이동합니다.
-
우측의 [+ VPC 생성] 버튼을 클릭한 후, 다음과 같이 VPC 및 서브넷을 생성합니다.
구분 항목 설정/입력값 VPC 정보 VPC 이름 tutorial VPC IP CIDR 블록 10.0.0.0/16 Availability Zone 가용 영역 개수 1 첫 번째 AZ kr-central-2-a 서브넷 설정 가용 영역당 퍼블릭 서브넷 개수 1 kr-central-2-a 퍼블릭 서브넷 IPv4 CIDR 블록: 10.0.0.0/20
-
하단에 생성되는 토폴로지를 확인 후, 이상이 없다면 [생성] 버튼을 클릭합니다.
- 서브넷의 상태는
Pending Create
>Pending Update
>Active
순서로 변경됩니다.Active
상태가 되어야 다음 단계를 진행할 수 있습니다.
- 서브넷의 상태는
2. 보안 그룹 설정
보안 그룹 설정은 외부 불법 접근 차단과 필요한 트래픽 허용을 통해 데이터 안전성을 확보하고, 원활한 네트워크 통신을 위해 필요합니다.
보안 그룹: tutorial-bastion-sg
-
카카오클라우드 콘솔 > VPC > 보안 그룹 메뉴로 이동합니다. 아래 표를 참조하여 보안 그룹을 생성합니다.
이름 설명(선택) tutorial-bastion-sg Bastion 호스트의 보안정책 -
하단의 [+ 추가하기] 버튼을 클릭 후, 인바운드 조건을 아래와 같이 설정하고 [적용] 버튼을 클릭합니다.
추가할 인바운드 규칙 항목 설정값 bastion inbound policy 1 프로토콜 TCP
패킷 출발지 {사용자 공인 IP}/32
포트 번호 5432 정책 설명(선택) bastion inbound policy 1 bastion inbound policy 2 프로토콜 TCP
패킷 출발지 {사용자 공인 IP}/32
포트 번호 22 정책 설명(선택) bastion inbound policy 2
3. Bastion 호스트 설정
Bastion 호스트는 클라우드 환경에서 데이터 이관 및 MySQL 접속을 위한 VM으로, 원격으로 클라우드 인스턴스에 안전하게 접근할 수 있는 게이트웨이 역할을 수행합니다.
-
카카오클라우드 콘솔 > Beyond Compute Service > Virtual Machine 메뉴로 이동합니다.
-
아래 표의 항목과 값을 참조하여 Bastion 호스트의 역할을 할 VM 인스턴스를 생성합니다.
구분 항목 설정/입력값 비고 기본 정보 이름 tutorial-migration 개수 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 서브넷 main(10.0.0.0/20) 자동 백업 자동 백업 옵션 미사용
시작하기
Step 1. 마이그레이션을 위한 인스턴스 설정
-
Virtual Machine > 인스턴스 탭에서 미리 생성해둔 MySQL 데이터베이스 인스턴스
tutorial-migration
를 선택 후, 우측의 [퍼블릭 IP 연결] 버튼을 클릭하고 퍼블릭 IP를 할당합니다.- 연결된 Public IP는 네트워크 탭에서 확인할 수 있습니다.
-
로컬 환경에서 터미널 실행 후,
cd
명령어를 사용하여 키 페어 파일을 다운로드받은 폴더로 이동합니다.- 키 페어 파일을 최초 생성해서 사용했다면, 기본적으로 다운로드 폴더에 저장됩니다. (
cd ~/Downloads
)
- 키 페어 파일을 최초 생성해서 사용했다면, 기본적으로 다운로드 폴더에 저장됩니다. (
-
다음 명령어를 실행하여 SSH 접근합니다.
chmod 400 {PRIVATE_KEY}.pem # 읽기 권한 부여
ssh -i {PRIVATE_KEY}.pem ubuntu@{tutorial-migraton-public-ip}항목 설명 {private_key}
프라이빗 키 파일 이름 {tutorial-migration-public-ip}
Virtual Machine > 인스턴스 메뉴에서 생성한 tutorial-migration
인스턴스 클릭 후, Network 탭에서 확인 가능 -
다음 명령어를 통해 마이그레이션 인스턴스를 설정합니다.
마이그레이션 인스턴스 설정sudo apt-get update -y
sudo apt-get install php -y
wget https://www.easyredmine.com/ER/media/knowledge-base/pg2mysql-1.9.zip
unzip pg2mysql-1.9.zip
Step 2. PostgreSQL 데이터 덤프 생성
pg_dump
덤프(PostgreSQL Dump)는 데이터베이스의 데이터를 백업하거나 이식하기 위해 사용하는 유틸리티이자 명령어입니다.
-
아래 명령어를 실행하여 PostgreSQL 덤프를 생성합니다.
pg_dump -U postgres -h 127.0.0.1 -p 5432 {DATABASE_NAME} -n public --format=p > {PG_DUMP_FILE_NAME}.sql
-
PostgreSQL 덤프를 MySQL 덤프로 변환합니다.
php pg2mysql_cli.php {PG_DUMP_FILE_NAME}.sql {MYSQL_DUMP_FILE_NAME}.sql innodb
-
변환된 MySQL 파일을 아래와 같이 수정합니다.
예시: MYSQL DUMP 파일 AS-IS# Converted with pg2mysql-1.9
# Converted on Thu, 25 Jul 2024 05:11:47 +0000
# Lightbox Technologies Inc. http://www.lightbox.ca
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
SET time_zone="+00:00";
CREATE TABLE public.users (
id int(11) NOT NULL,
name varchar(50),
email varchar(50)
) ENGINE=innodb;
INSERT INTO `public.users` (`id`, `name`, `email`) VALUES
('1','Alice','alice@example.com'),
('2','Bob','bob@example.com'),
('3','Charlie','charlie@example.com');
ALTER TABLE public.users
ADD CONSTRAINT users_pkey PRIMARY KEY (id);예시: MySQL DUMP 파일 TO-BE# Converted with pg2mysql-1.9
# Converted on Thu, 25 Jul 2024 05:11:47 +0000
# Lightbox Technologies Inc. http://www.lightbox.ca
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
SET time_zone="+00:00";
-- 데이터베이스 생성
CREATE databases {DATABASE_NAME};
-- 데이터베이스 선택
USE {DATABASE_NAME};
CREATE TABLE users (
id int(11) NOT NULL,
name varchar(50),
email varchar(50)
) ENGINE=innodb;
INSERT INTO users (id, name, email) VALUES
('1', 'Alice', 'alice@example.com'),
('2', 'Bob', 'bob@example.com'),
('3', 'Charlie', 'charlie@example.com');
ALTER TABLE users
ADD CONSTRAINT users_pkey PRIMARY KEY (id);안내카카오클라우드 MySQL에는 데이터를 임포트할 데이터베이스가 없기 때문에
CREATE
를 진행합니다.
Step 3. 카카오클라우드 MySQL 인스턴스에 데이터 임포트
카카오클라우드 MySQL 인스턴스에 MySQL 덤프 파일을 임포트합니다.
mysql -u {USER} -h {MYSQL_ENDPOINT} -p {DATABASE_NAME} < {MYSQL_DUMP_FILE_NAME}.sql
Step 4. 데이터 정합성 확인
카카오클라우드 MySQL에서 임포트한 데이터베이스의 데이터 정합성을 확인합니다.
mysql> use {DATABASE_NAME};
Database changed
mysql> select * from {TABLE};