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
- Stop application to prevent data corruption
- Restore from backup:
# Restore PostgreSQL backup dropdb production_db createdb production_db gunzip -c backup_file.sql.gz | psql production_db - Verify data integrity
- Restart application services
Application Recovery
- Deploy from version control:
git clone https://github.com/yourusername/yourapp.git cd yourapp git checkout production - Restore configuration files
- Install dependencies and build
- 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.