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};