1
0

backup_db.sh 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  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. # Detect MySQL container name dynamically (e.g. food-mysql-1 or food_project-mysql-1)
  9. DB_CONTAINER=""
  10. if sudo docker ps --format '{{.Names}}' | grep -q "^food-mysql-1$"; then
  11. DB_CONTAINER="food-mysql-1"
  12. elif sudo docker ps --format '{{.Names}}' | grep -q "^food_project-mysql-1$"; then
  13. DB_CONTAINER="food_project-mysql-1"
  14. else
  15. DB_CONTAINER=$(sudo docker ps --format '{{.Names}}' | grep "mysql" | head -n 1)
  16. if [ -z "$DB_CONTAINER" ]; then
  17. DB_CONTAINER="food-mysql-1"
  18. fi
  19. fi
  20. DB_NAME="food_db"
  21. RETENTION_DAYS=7
  22. DATE=$(date +"%Y%m%d_%H%M%S")
  23. BACKUP_FILE="$BACKUP_DIR/food_db_$DATE.sql.gz"
  24. echo "Starting Database Backup for $DB_NAME..."
  25. # Ensure backup directory exists
  26. mkdir -p "$BACKUP_DIR"
  27. # Load credentials from configuration file
  28. if [ -f "./.env" ]; then
  29. source ./.env
  30. fi
  31. # Execute mysqldump inside the container securely via environment variable
  32. sudo docker exec -e MYSQL_PWD="${MYSQL_ROOT_PASSWORD}" $DB_CONTAINER mysqldump -u root $DB_NAME | gzip > "$BACKUP_FILE"
  33. if [ $? -eq 0 ]; then
  34. echo "Backup successfully saved to $BACKUP_FILE"
  35. else
  36. echo "Error: Database backup failed!"
  37. exit 1
  38. fi
  39. # Apply retention policy
  40. echo "Applying retention policy: keeping backups for $RETENTION_DAYS days..."
  41. find "$BACKUP_DIR" -name "food_db_*.sql.gz" -type f -mtime +$RETENTION_DAYS -exec rm {} \;
  42. echo "Backup process completed."