본문 바로가기
🗄️ DB_이야기/# 🐘 PostgreSQL

🐘 [PostgreSQL] 물리적 백업 & 복구(pg_basebackup)

by gwon_s 2025. 8. 22.

안녕하세요. 지난 글에서 pg_dumpall에 대해 다루어 보았습니다.

 

🐘 [PostgreSQL] SQL 덤프 백업 & 복구(pg_dumpall)

안녕하세요. 지난 글에서 pg_dump에 대해 다루어 보았습니다. 🐘 [PostgreSQL] SQL 덤프 백업 & 복구(pg_dump)SQL 덤프(Logical Backup)는 PostgreSQL 실무에서 소규모 서비스, 특정 DB/테이블 이관, 개발 환경 세팅

gwon-s.tistory.com

 

이번 글에서 물리적 백업 방식인 pg_basebackup에 대해 알아보겠습니다.


 

🔍 pg_basebackup이란?

pg_basebackup은 데이터베이스의 논리적 구조(테이블, 데이터)뿐만 아니라, 모든 파일 시스템 레벨의 데이터(인덱스, 트랜잭션 로그 등)를 그대로 복제합니다. 이를 통해 시점 복구(Point-in-Time Recovery, PITR)가 가능해집니다.

 

  • PostgreSQL에서 제공하는 물리적 백업 도구
  • DB 데이터 디렉토리 전체를 통째로 복사
  • WAL(Write Ahead Log) 파일도 함께 백업 가능 → 시점 복구(PITR) 지원
  • Streaming Replication(스트리밍 복제) 환경에서 standby 서버 구축할 때도 자주 사용

 

 

pg_basebackup은 PostgreSQL 데이터베이스 클러스터의 실제 파일을 복사하여 백업합니다. 이는 tar나 gzip 같은 파일 시스템 도구를 사용해 데이터 디렉토리 전체를 그대로 복제하는 것과 유사합니다.

 

[pg_basebackup과 SQL덤프(pg_dump, pg_dumpall) 백업 비교]

구분 pg_dump pg_dumpall pg_basebackup
백업 방식 논리적 백업(SQL 구문) 논리적 백업(SQL 구문) 물리적 백업(파일 복사)
백업 대상 단일 데이터베이스 클러스터 전체(모든 DB + 전역 객체) 클러스터 전체(실제 파일)
백업 포맷 텍스트, 커스텀, 디렉토리(.sql, .dump, .tar 등) 텍스트 파일만(.sql) 바이너리 파일(tarball 또는 디렉토리)
복구 도구 psql, pg_restore psql pg_basebackup과 WAL 로그
복구 유연성 유연함(다른 버전/OS 가능) 유연함(다른 버전/OS 가능) 제한적(동일 버전/OS만 가능)
주요 용도 특정 DB 복원/마이그레이션 서버 전체 복원, 사용자/권한 백업 대용량 DB, 고가용성, 시점 복구
백업 속도 보통 느림 매우 빠름

⚡ pg_basebackup 사용 예시

PostgreSQL 데이터 디렉토리 그대로 백업

ps_basebackup –D {백업 디렉토리}
ps_basebackup –D /psql/backup/full/test01

 

 

 

PostgreSQL 데이터 디렉토리 압축 형태로 백업

pg_basebackup -D {백업 디렉토리} -F tar
pg_basebackup -D /psql/backup/full/test01 -F tar
-- 예시 실행 결과
/psql/backup/full/test01/base.tar
/psql/backup/full/test01/global.tar
/psql/backup/full/test01/pg_wal.tar
...

 

 

PostgreSQL 데이터 디렉토리 압축 형태 + WAL 아카이브 포함 백업

pg_basebackup -D {백업 디렉토리} -X {stream | fetch}
pg_basebackup -D /psql/backup/full/test04 -F tar -X stream

 

📖 옵션 설명

  • -h : 접속할 DB 서버 주소
  • -p : 포트 번호
  • -U : 백업 권한이 있는 계정
  • -D : 백업 데이터를 저장할 경로
  • -F : 백업 포맷 (plain 형식, 기본값)
    • -F plain → 디렉토리 복사 형태 (기본값)
    • -F tar → 압축 파일 형태 (전송/보관 시 편리)
    • -F tar -z → gzip 압축까지 적용 가능
  • -X : WAL 로그도 함께 백업
    • -X fetch : 백업이 끝난 시점에서 한번에 가져옴
    • -X stream : 백업을 진행하는 동안 WAL 파일을 실시간 스트리밍해서 같이 저장
  • -P : 진행률 표시
  • -R : standby.signal 파일 생성 → 복제용 standby 서버 구축 시 유용

🔁 복구 예시

0. (사전 작업) postgresql.conf 파일 수정

복구 과정에서 필요한 WAL 파일을 아카이브 디렉토리(ARCH_DIR)에서 가져와서 pg_wal 폴더로 복사하라는 명령

restore_command = 'cp /{ARCH_DIR}/%f %p'

-- %f → 복구에 필요한 WAL 파일 이름
-- %p → PostgreSQL이 지정한 위치(데이터 디렉토리 내부 pg_wal/)

 

 

특정 시점 복구(PITR)할 시

recovery_target_time = '2025-08-18 14:30:00'   # 원하는 시점

 

 

PITR 시점 복구가 완료되면 어떻게 동작할지를 지정하는 설정

recovery_target_action = 'pause'   # default

-- pause : 복구 완료 후 DB는 중지(Paused) 상태 → 관리자가 수동으로 resume
-- promote : 복구 끝나면 자동으로 새로운 Primary DB로 전환
-- shutdown : 복구 끝나면 그냥 종료

 

 

설정 변경 사항 반영

sudo systemctl reload postgresql

 

 

1. DB 중지

sudo systemctl stop postgresql

 

 

2. 백업본 압축풀기

(tar) $ tar -xvf backup.tar
(tar.gz) $ tar -xvzf backup.tar.gz
(gz) $ gunzip backup.gz

 

 

3. 기존 데이터 디렉토리 백업 또는 삭제

mv {데이터 디렉토리} {데이터 디렉토리}_old

 

 

4. 백업본 복사 및 권한 설정

cp -r {백업 디렉토리} {데이터 디렉토리}
chown -R postgres:postgres {데이터 디렉토리}

 

 

5. 복구용 신호 파일 생성(정상 복구되면 자동 삭제)

touch {PGDATA}/recovery.signal

 

 

6. DB 기동

sudo systemctl start postgresql

 

 


🏆 핵심 포인트

  • pg_dump / pg_dumpall → 논리적 백업 (DB 서버 켜져 있어야 함)
  • pg_basebackup → 물리적 백업 (DB 서버에서 데이터 디렉토리 전체 복사)
  • WAL 포함 가능 → 시점 복구(PITR), Standby 구축에 활용
  • 실무에서 HA(고가용성) 환경 구성할 때 반드시 알아야 하는 도구

🎯 마무리

SQL 덤프는 부분 백업에 유리하고,
pg_basebackup은 전체 백업 + 복제 환경 구성에 유리합니다.