Postgresql/백업 및 복구

wal-g 백업 스크립트

dbavayne 2025. 3. 10. 11:17

wal-g를 활용한 백업 스크립트 공유.

postgres@lkmpg:~$ cat backup.sh  
#!/bin/bash  

# 백업 설정  
BACKUP\_DIR="/backups"  
WALG\_CONFIG="/etc/wal-g.yaml"  
PG\_DATA="/var/lib/postgresql/15/main"  
LOG\_FILE="/var/lib/postgresql/wal-glog/wal-g\_backup.log"  
TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S')  

# PostgreSQL 사용자  
PG\_USER="postgres"  

# 로그 함수  
log() {  
    echo "\[$TIMESTAMP\] $1" >> "$LOG\_FILE"  
    echo "\[$TIMESTAMP\] $1"  
}  

# 백업 시작 로그  
log "Starting PostgreSQL backup with WAL-G..."  

# WAL-G 풀 백업 수행  
sudo -u $PG\_USER /usr/local/bin/wal-g backup-push "$PG\_DATA" --config="$WALG\_CONFIG" >> "$LOG\_FILE" 2>&1  
if \[ $? -eq 0 \]; then  
    log "Full backup completed successfully."  
else  
    log "ERROR: Full backup failed!"  
    # 필요 시 알림 추가 (예: 이메일)  
    # echo "Backup failed at $TIMESTAMP" | mail -s "WAL-G Backup Failure" admin@example.com  
    exit 1  
fi  

# 오래된 백업 정리 (예: 7일 이상된 백업 삭제)  
sudo -u $PG\_USER /usr/local/bin/wal-g delete before FIND\_FULL 7d --config="$WALG\_CONFIG" --confirm >> "$LOG\_FILE" 2>&1  
if \[ $? -eq 0 \]; then  
    log "Old backups (older than 7 days) cleaned up successfully."  
else  
    log "WARNING: Failed to clean up old backups."  
fi  

# 백업 목록 확인  
log "Current backup list:"  
sudo -u $PG\_USER /usr/local/bin/wal-g backup-list --config="$WALG\_CONFIG" >> "$LOG\_FILE" 2>&1  

# 스크립트 종료  
log "Backup process finished."  
exit 0