Backup & Recovery

Implement comprehensive backup strategies and disaster recovery procedures.

Backup & Recovery

Database Backup

Automated Backups

Set up automated database backups for data protection.

# PostgreSQL backup script
#!/bin/bash
BACKUP_DIR="/var/backups/postgresql"
DATE=$(date +%Y%m%d_%H%M%S)
DB_NAME="your_database"

# Create backup directory
mkdir -p $BACKUP_DIR

# Create backup
pg_dump $DB_NAME > $BACKUP_DIR/backup_$DATE.sql

# Compress backup
gzip $BACKUP_DIR/backup_$DATE.sql

# Keep only last 30 days of backups
find $BACKUP_DIR -name "*.gz" -mtime +30 -delete

Backup Verification

Ensure backup integrity and restorability.

# Test backup restoration
#!/bin/bash
BACKUP_FILE="backup_20240101_120000.sql.gz"
TEST_DB="test_restore_db"

# Create test database
createdb $TEST_DB

# Restore backup to test database
gunzip -c $BACKUP_FILE | psql $TEST_DB

# Verify restoration
psql $TEST_DB -c "SELECT COUNT(*) FROM users;"

# Cleanup
dropdb $TEST_DB

File System Backup

Static Assets

Protect static files and uploads.

# Backup static files
#!/bin/bash
BACKUP_DIR="/var/backups/files"
SOURCE_DIR="/var/www/uploads"
DATE=$(date +%Y%m%d_%H%M%S)

# Create compressed backup
tar -czf $BACKUP_DIR/files_$DATE.tar.gz $SOURCE_DIR

# Upload to cloud storage (AWS S3)
aws s3 cp $BACKUP_DIR/files_$DATE.tar.gz s3://your-backup-bucket/files/

Configuration Files

Backup critical configuration files.

# Backup configuration
#!/bin/bash
CONFIG_DIRS="/etc/nginx /etc/ssl /app/.env"
BACKUP_DIR="/var/backups/config"
DATE=$(date +%Y%m%d_%H%M%S)

tar -czf $BACKUP_DIR/config_$DATE.tar.gz $CONFIG_DIRS

Disaster Recovery

Recovery Procedures

Document and test recovery procedures.

Database Recovery

  1. Stop application to prevent data corruption
  2. Restore from backup:
    # Restore PostgreSQL backup
    dropdb production_db
    createdb production_db
    gunzip -c backup_file.sql.gz | psql production_db
    
  3. Verify data integrity
  4. Restart application services

Application Recovery

  1. Deploy from version control:
    git clone https://github.com/yourusername/yourapp.git
    cd yourapp
    git checkout production
    
  2. Restore configuration files
  3. Install dependencies and build
  4. Start services

Recovery Time Objectives (RTO)

Define acceptable downtime for different scenarios:

  • Database corruption: < 4 hours
  • Server failure: < 2 hours
  • Complete disaster: < 24 hours

Recovery Point Objectives (RPO)

Define acceptable data loss:

  • Database: < 1 hour (hourly backups)
  • Files: < 24 hours (daily backups)
  • Configuration: < 1 week (weekly backups)

Backup Monitoring

Backup Health Checks

Monitor backup success and integrity.

# Backup monitoring script
#!/bin/bash
BACKUP_DIR="/var/backups"
LOG_FILE="/var/log/backup-monitor.log"

# Check if backup exists for today
TODAY=$(date +%Y%m%d)
if [ ! -f "$BACKUP_DIR/backup_${TODAY}_*.sql.gz" ]; then
    echo "ERROR: No backup found for $TODAY" >> $LOG_FILE
    # Send alert notification
    curl -X POST "https://api.example.com/alerts" \
         -d "message=Backup missing for $TODAY"
fi

# Check backup file size
BACKUP_SIZE=$(ls -la $BACKUP_DIR/backup_${TODAY}_*.sql.gz | awk '{print $5}')
if [ $BACKUP_SIZE -lt 1000000 ]; then  # Less than 1MB
    echo "WARNING: Backup file size suspiciously small: $BACKUP_SIZE bytes" >> $LOG_FILE
fi

Automated Testing

Test backup restoration regularly.

# Weekly backup test
#!/bin/bash
# Run every Sunday at 2 AM
# 0 2 * * 0 /path/to/backup-test.sh

LATEST_BACKUP=$(ls -t /var/backups/backup_*.sql.gz | head -1)
TEST_DB="backup_test_$(date +%Y%m%d)"

# Restore to test database
createdb $TEST_DB
gunzip -c $LATEST_BACKUP | psql $TEST_DB

# Run basic integrity checks
USERS_COUNT=$(psql $TEST_DB -t -c "SELECT COUNT(*) FROM users;")
if [ $USERS_COUNT -eq 0 ]; then
    echo "ERROR: Backup restoration failed - no users found"
    exit 1
fi

echo "SUCCESS: Backup test passed - $USERS_COUNT users restored"
dropdb $TEST_DB

Cloud Backup Solutions

AWS S3 Integration

# Sync backups to S3
aws s3 sync /var/backups/ s3://your-backup-bucket/backups/ \
    --delete \
    --storage-class STANDARD_IA

Google Cloud Storage

# Upload to Google Cloud Storage
gsutil -m cp -r /var/backups/ gs://your-backup-bucket/

Implement robust backup and recovery procedures to protect your application data and ensure business continuity.