기본 백업과 복구
📖 약 2분🏷 PostgreSQL 기초
백업의 중요성
데이터베이스 백업은 실수로 인한 데이터 삭제, 하드웨어 장애, 마이그레이션 등에 대비하는 필수 작업입니다.
pg_dump — 논리 백업
pg_dump는 SQL 형식으로 데이터베이스를 덤프합니다.
# 기본 백업 (SQL 형식)
pg_dump -U postgres -d myapp > myapp_backup.sql
# 압축 커스텀 형식 (추천)
pg_dump -U postgres -d myapp -F c -f myapp_backup.dump
# 특정 테이블만 백업
pg_dump -U postgres -d myapp -t users -t orders -F c -f partial_backup.dump
# 스키마만 백업 (데이터 제외)
pg_dump -U postgres -d myapp --schema-only -f schema.sql
# 데이터만 백업 (구조 제외)
pg_dump -U postgres -d myapp --data-only -f data.sql
pg_dumpall — 전체 클러스터 백업
# 모든 데이터베이스 + 역할/권한 포함
pg_dumpall -U postgres > full_cluster_backup.sql
복구 — psql / pg_restore
# SQL 형식 복구
psql -U postgres -d myapp < myapp_backup.sql
# 커스텀 형식 복구
pg_restore -U postgres -d myapp -F c myapp_backup.dump
# 새 데이터베이스에 복구
createdb -U postgres myapp_restored
pg_restore -U postgres -d myapp_restored myapp_backup.dump
# 특정 테이블만 복구
pg_restore -U postgres -d myapp -t users myapp_backup.dump
백업 파일 형식 비교
| 형식 | 옵션 | 장점 | 단점 |
|---|---|---|---|
| SQL 텍스트 | -F p |
사람이 읽기 쉬움 | 파일 크고 느림 |
| 커스텀 | -F c |
압축·선택적 복구 | pg_restore 필요 |
| 디렉터리 | -F d |
병렬 처리 가능 | 여러 파일 생성 |
| tar | -F t |
스트리밍 가능 | 병렬 불가 |
운영 환경에서는 커스텀 형식(
-F c)을 권장합니다. 압축률이 높고 선택적 복구가 가능합니다.
자동 백업 스크립트 예시
#!/bin/bash
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR="/var/backups/postgresql"
DB_NAME="myapp"
mkdir -p "$BACKUP_DIR"
pg_dump -U postgres -d "$DB_NAME" -F c \
-f "$BACKUP_DIR/${DB_NAME}_${DATE}.dump"
# 7일 이전 백업 삭제
find "$BACKUP_DIR" -name "*.dump" -mtime +7 -delete
echo "백업 완료: ${DB_NAME}_${DATE}.dump"
# cron에 등록 (매일 새벽 2시 실행)
# 0 2 * * * /path/to/backup.sh >> /var/log/pg_backup.log 2>&1
백업 검증
# 백업 파일 내용 확인
pg_restore --list myapp_backup.dump
# 테스트 복구 (실제 DB에 영향 없이 검증)
createdb -U postgres test_restore
pg_restore -U postgres -d test_restore myapp_backup.dump
psql -U postgres -d test_restore -c "SELECT COUNT(*) FROM users;"
dropdb -U postgres test_restore
댓글
댓글을 불러오는 중...