안녕하세요. 지난 글에서 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은 전체 백업 + 복제 환경 구성에 유리합니다.
'🗄️ DB_이야기 > # 🐘 PostgreSQL' 카테고리의 다른 글
| 🐘 [PostgreSQL] 백업·복구 실습을 위한 대량 더미데이터 생성하기 (0) | 2025.11.18 |
|---|---|
| 🐘 [PostgreSQL] Parameter 설정 방법(postgresql.conf파일) (0) | 2025.08.30 |
| 🐘 [PostgreSQL] SQL 덤프 백업 & 복구(pg_dumpall) (0) | 2025.08.21 |
| 🐘 [PostgreSQL] SQL 덤프 백업 & 복구(pg_dump) (0) | 2025.08.21 |
| 🐘[PostgreSQL]AWS EC2(Ubuntu)에 PostgreSQL 싱글 노드 설치하기 (1) | 2025.08.20 |