backup_db.sh 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. #!/bin/bash
  2. # $Id$
  3. # $Author$
  4. # $log$
  5. #ident "@(#)LocalFoodAI:backup_db.sh:$Format:%D:%ci:%cN:%h$"
  6. # backup_db.sh - Automated Disaster Recovery Backup Script
  7. BACKUP_DIR="./backups"
  8. DB_CONTAINER="food_project-mysql-1"
  9. DB_NAME="food_db"
  10. RETENTION_DAYS=7
  11. DATE=$(date +"%Y%m%d_%H%M%S")
  12. BACKUP_FILE="$BACKUP_DIR/food_db_$DATE.sql.gz"
  13. echo "Starting Database Backup for $DB_NAME..."
  14. # Ensure backup directory exists
  15. mkdir -p "$BACKUP_DIR"
  16. # Load credentials from configuration file
  17. if [ -f "./.env" ]; then
  18. source ./.env
  19. fi
  20. # Execute mysqldump inside the container securely via environment variable
  21. sudo docker exec -e MYSQL_PWD="${MYSQL_ROOT_PASSWORD}" $DB_CONTAINER mysqldump -u root $DB_NAME | gzip > "$BACKUP_FILE"
  22. if [ $? -eq 0 ]; then
  23. echo "Backup successfully saved to $BACKUP_FILE"
  24. else
  25. echo "Error: Database backup failed!"
  26. exit 1
  27. fi
  28. # Apply retention policy
  29. echo "Applying retention policy: keeping backups for $RETENTION_DAYS days..."
  30. find "$BACKUP_DIR" -name "food_db_*.sql.gz" -type f -mtime +$RETENTION_DAYS -exec rm {} \;
  31. echo "Backup process completed."