Backup & Recovery

Database backup strategies and disaster recovery.

Automated Backups

PostgreSQL Backups

# Daily backups with 30-day retention
0 2 * * * pg_dump -h postgres -U eval752 eval752 | \
  gzip > /backups/eval752_$(date +%Y%m%d).sql.gz

# Cleanup old backups
find /backups -name "eval752_*.sql.gz" -mtime +30 -delete

Point-in-Time Recovery

Enable WAL archiving for PITR:

# postgresql.conf
wal_level = replica
archive_mode = on
archive_command = 'cp %p /archive/%f'

Manual Backup/Restore

Backup

# Full database dump
docker compose exec postgres pg_dump -U eval752 eval752 > backup.sql

# Compressed
docker compose exec postgres pg_dump -U eval752 eval752 | gzip > backup.sql.gz

Restore

# From SQL file
docker compose exec -T postgres psql -U eval752 eval752 < backup.sql

# From compressed
gunzip -c backup.sql.gz | docker compose exec -T postgres psql -U eval752 eval752

Disaster Recovery

RTO (Recovery Time Objective): < 1 hour RPO (Recovery Point Objective): < 24 hours

Recovery Procedure

  1. Provision new infrastructure (10 min)
  2. Restore database from backup (20 min)
  3. Deploy application (15 min)
  4. Verify and test (15 min)

For production deployment, see Deployment.