#!/bin/bash # WordPress Backup Script # Generated by Ansible set -e # Configuration BACKUP_DIR="{{ backup_destination }}" WP_PATH="{{ wordpress_path }}" DB_NAME="{{ wordpress_db_name }}" DB_USER="{{ wordpress_db_user }}" DB_PASS="{{ wordpress_db_password }}" RETENTION_DAYS="{{ backup_retention_days }}" DATE=$(date +%Y%m%d_%H%M%S) # Create backup directories mkdir -p "$BACKUP_DIR/database" "$BACKUP_DIR/files" # Log function log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$BACKUP_DIR/backup.log" } log "Starting WordPress backup..." # Backup WordPress files log "Backing up WordPress files..." tar -czf "$BACKUP_DIR/files/wordpress_files_$DATE.tar.gz" -C "$(dirname $WP_PATH)" "$(basename $WP_PATH)" # Backup database log "Backing up database..." mysqldump -u"$DB_USER" -p"$DB_PASS" "$DB_NAME" | gzip > "$BACKUP_DIR/database/wordpress_db_$DATE.sql.gz" # Cleanup old backups log "Cleaning up old backups (older than $RETENTION_DAYS days)..." find "$BACKUP_DIR/files" -name "wordpress_files_*.tar.gz" -mtime +$RETENTION_DAYS -delete find "$BACKUP_DIR/database" -name "wordpress_db_*.sql.gz" -mtime +$RETENTION_DAYS -delete # Calculate backup sizes FILES_SIZE=$(du -sh "$BACKUP_DIR/files/wordpress_files_$DATE.tar.gz" | cut -f1) DB_SIZE=$(du -sh "$BACKUP_DIR/database/wordpress_db_$DATE.sql.gz" | cut -f1) log "Backup completed successfully!" log "Files backup size: $FILES_SIZE" log "Database backup size: $DB_SIZE" log "Backup location: $BACKUP_DIR" # Optional: Send notification (requires mail setup) # echo "WordPress backup completed on $(hostname) at $(date)" | mail -s "WordPress Backup Success" admin@example.com