1
0

backup_db.sh 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. #!/bin/bash
  2. #ident "@(#)$Format:LocalFoodAI:app.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
  3. # $Id$
  4. # $Author$
  5. # $log$
  6. #ident "@(#)LocalFoodAI:backup_db.sh:$Format:%D:%ci:%cN:%h$"
  7. # backup_db.sh - Automated Disaster Recovery Backup Script
  8. BACKUP_DIR="./backups"
  9. # Detect MySQL container name dynamically (e.g. food-mysql-1 or food_project-mysql-1)
  10. DB_CONTAINER=""
  11. if sudo docker ps --format '{{.Names}}' | grep -q "^food-mysql-1$"; then
  12. DB_CONTAINER="food-mysql-1"
  13. elif sudo docker ps --format '{{.Names}}' | grep -q "^food_project-mysql-1$"; then
  14. DB_CONTAINER="food_project-mysql-1"
  15. else
  16. DB_CONTAINER=$(sudo docker ps --format '{{.Names}}' | grep "mysql" | head -n 1)
  17. if [ -z "$DB_CONTAINER" ]; then
  18. DB_CONTAINER="food-mysql-1"
  19. fi
  20. fi
  21. DB_NAME="food_db"
  22. RETENTION_DAYS=7
  23. DATE=$(date +"%Y%m%d_%H%M%S")
  24. BACKUP_FILE="$BACKUP_DIR/food_db_$DATE.sql.gz"
  25. echo "Starting Database Backup for $DB_NAME..."
  26. # Ensure backup directory exists
  27. mkdir -p "$BACKUP_DIR"
  28. # Load credentials from configuration file
  29. if [ -f "./.env" ]; then
  30. source ./.env
  31. fi
  32. # Execute mysqldump inside the container securely via environment variable
  33. sudo docker exec -e MYSQL_PWD="${MYSQL_ROOT_PASSWORD}" $DB_CONTAINER mysqldump -u root $DB_NAME | gzip > "$BACKUP_FILE"
  34. if [ $? -eq 0 ]; then
  35. echo "Backup successfully saved to $BACKUP_FILE"
  36. else
  37. echo "Error: Database backup failed!"
  38. exit 1
  39. fi
  40. # Apply retention policy
  41. echo "Applying retention policy: keeping backups for $RETENTION_DAYS days..."
  42. find "$BACKUP_DIR" -name "food_db_*.sql.gz" -type f -mtime +$RETENTION_DAYS -exec rm {} \;
  43. echo "Backup process completed."