PostgreSQL · 2026-04-18

MySQL에서 PostgreSQL로 마이그레이션 체크리스트

MySQL에서 PostgreSQL로 전환할 때 필요한 단계별 준비사항, 스키마·데이터 변환 포인트, mysqldump 변환 예제와 호환성 검사 항목을 정리한 체크리스트

작성일 : 2026-04-18 ㆍ 작성자 : 관리자
post
목차

개요

MySQL에서 PostgreSQL로 마이그레이션은 단순한 덤프 복원 이상의 작업이다. 두 DBMS의 데이터 타입, 인덱스 동작, 문자셋과 트랜잭션 동작 차이를 고려해야 한다. 이 문서는 처음 접하는 사용자도 이해할 수 있도록 단계별 체크리스트와 실제 변환 예제를 제공한다.

사전 점검

목표 정의 및 범위

마이그레이션의 목적(성능 향상, 기능 전환, 운영비 절감 등)과 대상 범위(프로덕션, 테스트, 일부 스키마)를 명확히 한다. 다운타임 허용 수준과 롤백 전략을 미리 결정한다.

환경 및 버전 확인

  • MySQL 및 MariaDB 버전 확인
  • PostgreSQL 버전과 확장 모듈 필요 여부 확인
  • 운영체제, 네트워크, 디스크 성능 확인

스키마 호환성 검사

데이터 타입 매핑

MySQL과 PostgreSQL은 같은 이름의 타입이라도 동작이 다를 수 있다. 주요 변환 포인트는 다음과 같다.

  • TINYINT, SMALLINT, INT, BIGINT → 각각 적절한 integer 타입으로 매핑
  • VARCHAR, TEXT → 문자 길이 및 인코딩 고려
  • ENUM → CHECK 제약 또는 별도 참조 테이블로 변환
  • AUTO_INCREMENT → SERIAL 또는 IDENTITY
  • DATETIME/TIMESTAMP → TIMESTAMP WITH/WITHOUT TIME ZONE 여부 결정

인덱스와 제약 조건

MySQL의 인덱스 동작(특히 NULL과 빈 문자열 처리)이 PostgreSQL과 다를 수 있다. 고유 제약(unique)과 복합 인덱스의 동작을 검증한다. 외래키 제약의 ON DELETE/UPDATE 동작도 확인한다.

문자셋과 정렬순서(collation)

UTF-8 사용 권장. MySQL의 기본 collation이 다를 수 있어 정렬 결과가 변경될 수 있다. 필요시 PostgreSQL의 ICU 기반 collate를 사용한다.

도구 선택

직접 변환 vs 도구 사용

  • mysqldump로 스키마/데이터 추출 후 수동 변환
  • pgloader나 ora2pg 같은 도구로 자동 마이그레이션
  • ETL 방식으로 애플리케이션 레벨에서 옮기는 방법

권장 도구

  • pgloader: 데이터 타입 변환과 대량 데이터 로드에 강함
  • mysqldump + sed/perl: 세밀한 제어가 필요할 때 유용
  • 스크립트(파이썬, 루비) 기반 커스텀 변환: 복잡한 비즈니스 로직이 있을 때

스키마 변환 절차

1. 스키마 추출

mysqldump로 스키마만 추출하여 기본 구조를 확보한다.

mysqldump --no-data --routines --events --databases your_db > schema.sql

2. 스키마 변환

자동 변환 도구를 쓰거나, sed/awk로 반복적인 치환 수행 후 수동 검토를 권장한다. AUTO_INCREMENT나 ENUM, ENGINE=InnoDB 같은 MySQL 전용 구문 제거가 필요하다.

# 예: AUTO_INCREMENT 제거 및 SERIAL 변환(수동 검토 필요)
sed -e 's/ AUTO_INCREMENT=[0-9]*//g' \
    -e 's/\`\([a-zA-Z0-9_]*\)\` INT\([^,]*\) AUTO_INCREMENT/\1 SERIAL/g' schema.sql > schema_pg.sql

3. 함수와 저장프로시저

MySQL의 저장 프로시저는 PostgreSQL의 PL/pgSQL로 수동 이식이 필요하다. 로직을 그대로 옮기기보다 테스트 가능한 단위로 재작성하는 편이 안전하다.

데이터 마이그레이션

mysqldump로 덤프 후 변환

mysqldump로 CSV나 INSERT 덤프를 만든 뒤 PostgreSQL에 로드한다. 대량 데이터는 COPY로 처리하는 것이 빠르다.

# CSV로 테이블 덤프 예시
mysql -N -e "SELECT * FROM table_name" your_db | sed 's/\t/,/g' > table_name.csv
# PostgreSQL에서 COPY로 로드
psql -d target_db -c "\copy table_name FROM 'table_name.csv' WITH (FORMAT csv)"

pgloader 사용 예제

pgloader는 MySQL에서 직접 읽어 PostgreSQL로 옮기는 데 유용하다. 타입 매핑과 인덱스 비활성화 등 자동 최적화를 제공한다.

pgloader mysql://user:pass@localhost/source_db postgresql:///target_db

호환성 문제와 해결법

주요 호환성 항목

  • NULL과 빈 문자열 처리 차이
  • 트랜잭션 격리 수준과 잠금 동작 차이
  • 문자열 연결 연산자: MySQL의 CONCAT vs PostgreSQL의 ||
  • 비표준 함수와 날짜/시간 처리 차이

테스트 목록

  • 스키마 DDL 비교: 컬럼 타입, 제약, 인덱스 일치 여부
  • 데이터 무결성 확인: 레코드 수, 체크섬, 샘플 값 비교
  • 성능 테스트: 쿼리 응답 시간 및 인덱스 효율성
  • 애플리케이션 통합 테스트: ORM 또는 SQL 쿼리 동작 확인

운영 준비와 전환 전략

샘플 전환 단계

  • 테스트 환경에서 전체 마이그레이션 수행 및 검증
  • 프로덕션 복제/동기화 준비(중간 단계로 복제 사용 가능)
  • 최종 스위치: 쓰기 정지 → 최종 데이터 동기화 → DNS/애플리케이션 연결 전환
  • 모니터링 및 롤백 계획 유지

모니터링 항목

  • 쿼리 지연 시간 및 에러율
  • 커넥션 수와 리소스 사용량(CPU, 메모리, I/O)
  • 장기 작업의 잠금 및 블로킹 상황

마무리 점검

마이그레이션 이후에는 데이터 정합성, 성능, 보안 설정을 다시 확인한다. 인덱스 재구성, 통계 수집(VACUUM ANALYZE), 권한 정책 점검을 잊지 않는다. 또한 백업과 복구 절차를 PostgreSQL 환경에 맞춰 재정의한다.

요약 체크리스트

  • 목표와 범위 정의
  • 버전 및 환경 호환성 확인
  • 스키마 타입 매핑 및 제약 검토
  • 데이터 추출 방식 결정(mysqldump, pgloader 등)
  • 변환 스크립트 작성 및 수동 검토
  • 테스트 마이그레이션과 데이터 무결성 검증
  • 운영 전환 계획(다운타임/롤백 포함)
  • 모니터링 및 최적화 수행

이 체크리스트는 마이그레이션의 핵심 포인트를 빠짐없이 점검하도록 구성되었다. 각 단계에서 작은 테스트를 반복하면 전환 위험을 크게 줄일 수 있다.

mysql to postgres 마이그레이션 mysqldump postgres 변환 mysql postgres 호환성 문제 PostgreSQL 마이그레이션 pgloader 데이터베이스 이관 체크리스트 스키마 변환 mysqldump 변환 예제