#!/bin/bash set -x # ========================================================== # CONFIGURATION # ========================================================== CONTAINER_NAME="MySQL" DB_USER="root" DB_PASS="Vlado9674+" UNRAID_NAME="tower" BASE_PATH="/mnt/user/MySQLBackup" KEEP_DAYS=3 # Databases to back up WHAT_TO_BACKUP=("fio" "torrents" "OrdinaceDropBoxBackup" "medevio" "kanboard" "medicus" "studie" "puzzle") # ========================================================== # START # ========================================================== echo "Starting scheduled backup for: ${WHAT_TO_BACKUP[*]}" START_TS=$(date '+%Y-%m-%d %H:%M:%S') for DB_NAME in "${WHAT_TO_BACKUP[@]}"; do echo "------------------------------------------" echo "Processing database: $DB_NAME" DATE=$(date +%Y-%m-%d_%H%M) FINAL_PATH="$BASE_PATH/$UNRAID_NAME/$DB_NAME/$DATE" mkdir -p "$FINAL_PATH" DUMP_FILE="$FINAL_PATH/$DB_NAME.sql.gz" ERR_FILE="$FINAL_PATH/$DB_NAME.err" # ====================================================== # DUMP + GZIP # ====================================================== docker exec "$CONTAINER_NAME" mysqldump \ -u"$DB_USER" \ -p"$DB_PASS" \ --databases "$DB_NAME" \ --single-transaction \ --quick \ --routines \ --triggers \ --events \ --set-gtid-purged=OFF \ --default-character-set=utf8mb4 \ --max_allowed_packet=512M \ 2> "$ERR_FILE" \ | gzip -1 > "$DUMP_FILE" EXIT_CODE=${PIPESTATUS[0]} # ====================================================== # VALIDATION # ====================================================== if [ $EXIT_CODE -eq 0 ] && [ -s "$DUMP_FILE" ] && [ ! -s "$ERR_FILE" ]; then echo "SUCCESS: $DB_NAME backed up successfully" echo "Dump size: $(du -h "$DUMP_FILE" | cut -f1)" rm -f "$ERR_FILE" else echo "ERROR: Backup failed for database: $DB_NAME" echo "Exit code: $EXIT_CODE" echo "Dump file:" ls -lh "$DUMP_FILE" 2>/dev/null || echo " (not created)" echo "Error output:" [ -s "$ERR_FILE" ] && cat "$ERR_FILE" || echo " (no stderr output)" fi # ====================================================== # CLEANUP OLD BACKUPS # ====================================================== echo "Cleaning up old backups for $DB_NAME..." find "$BASE_PATH/$UNRAID_NAME/$DB_NAME" \ -mindepth 1 -maxdepth 1 -type d -mtime +$KEEP_DAYS \ -exec rm -rf {} \; done echo "------------------------------------------" echo "All backup tasks completed at $(date)" echo "Started at: $START_TS" set +x