Skip to content

Instantly share code, notes, and snippets.

@calvez
Created February 6, 2026 09:31
Show Gist options
  • Select an option

  • Save calvez/1d778d1515201e40e464666adc086ce6 to your computer and use it in GitHub Desktop.

Select an option

Save calvez/1d778d1515201e40e464666adc086ce6 to your computer and use it in GitHub Desktop.
# Database backup script - dumps each database separately and compresses them # Organizes backups in separate folders by date
#!/bin/bash
# Database backup script - dumps each database separately and compresses them
# Organizes backups in separate folders by date
BACKUP_DIR="/var/backups/databases"
DATE=$(date +%Y-%m-%d)
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
DATE_DIR="$BACKUP_DIR/$DATE"
# Create backup directory with date subfolder if it doesn't exist
mkdir -p "$DATE_DIR"
# Get list of all databases (excluding system databases)
DATABASES=$(mysql -e "SHOW DATABASES;" | grep -v Database | grep -v information_schema | grep -v mysql | grep -v performance_schema | grep -v sys)
# Dump each database separately
for DB in $DATABASES; do
BACKUP_FILE="$DATE_DIR/${DB}_$TIMESTAMP.sql.gz"
mysqldump "$DB" | gzip > "$BACKUP_FILE"
if [ $? -eq 0 ]; then
echo "Backup successful: $BACKUP_FILE" >> /var/log/database-backup.log
else
echo "Backup failed for $DB at $(date)" >> /var/log/database-backup.log
fi
done
# Remove backups older than 30 days
find "$BACKUP_DIR" -name "*.sql.gz" -type f -mtime +30 -delete
echo "Old backups cleaned up" >> /var/log/database-backup.log
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment