Files
Backup/MongTower/mongodbrestore_from_backup.sh
T
Administrator bfa049e0c2 notebookvb
2026-05-23 05:39:25 +02:00

104 lines
3.1 KiB
Bash

#!/bin/bash
set -x
# ==========================================================
# CONFIGURATION
# ==========================================================
CONTAINER_NAME="MongoDB"
MONGO_HOST="localhost"
MONGO_PORT="27017"
# Cesta k záloze kterou chceš obnovit
# Např: /mnt/user/Backup/Critical/MongoDBBackup/tower
BACKUP_BASE_PATH="$1"
# ==========================================================
# VALIDATION
# ==========================================================
if [ -z "$BACKUP_BASE_PATH" ]; then
echo "Usage: $0 <backup_base_path>"
echo "Example: $0 /mnt/user/Backup/Critical/MongoDBBackup/tower"
exit 1
fi
if [ ! -d "$BACKUP_BASE_PATH" ]; then
echo "ERROR: Backup path does not exist: $BACKUP_BASE_PATH"
exit 1
fi
echo "Starting MongoDB restore from: $BACKUP_BASE_PATH"
START_TS=$(date '+%Y-%m-%d %H:%M:%S')
# ==========================================================
# RESTORE PROCESS
# ==========================================================
# Najdi nejnovější backupy pro každou DB
# Struktura: $BACKUP_BASE_PATH/DB_NAME/YYYY-MM-DD_HHMM/DB_NAME.archive.gz
for DB_DIR in "$BACKUP_BASE_PATH"/*; do
if [ ! -d "$DB_DIR" ]; then
continue
fi
DB_NAME=$(basename "$DB_DIR")
echo "------------------------------------------"
echo "Processing database: $DB_NAME"
# Najdi nejnovější backup pro tuto DB
LATEST_BACKUP=$(ls -td "$DB_DIR"/*/ 2>/dev/null | head -1)
if [ -z "$LATEST_BACKUP" ]; then
echo "WARNING: No backup found for $DB_NAME"
continue
fi
BACKUP_FILE="$LATEST_BACKUP/${DB_NAME}.archive.gz"
ERR_FILE="$LATEST_BACKUP/${DB_NAME}.restore.err"
if [ ! -f "$BACKUP_FILE" ]; then
echo "ERROR: Backup archive not found: $BACKUP_FILE"
continue
fi
echo "Found backup: $BACKUP_FILE"
echo "Backup date: $(stat -c %y "$BACKUP_FILE" | cut -d' ' -f1-2)"
echo "Backup size: $(du -h "$BACKUP_FILE" | cut -f1)"
# ======================================================
# RESTORE TO MONGODB (streamuje přes stdin z hosta)
# Restores: indexy, metadata, validators, all collections
# ======================================================
echo "Restoring $DB_NAME to MongoDB..."
docker exec -i "$CONTAINER_NAME" mongorestore \
--host="$MONGO_HOST" \
--port="$MONGO_PORT" \
--archive \
--gzip \
--drop \
--numParallelCollections=4 \
< "$BACKUP_FILE" \
2> "$ERR_FILE"
RESTORE_EXIT=$?
# ======================================================
# VALIDATION
# ======================================================
if [ $RESTORE_EXIT -eq 0 ]; then
echo "SUCCESS: $DB_NAME restored successfully"
rm -f "$ERR_FILE"
else
echo "ERROR: Restore failed for database: $DB_NAME"
echo "Exit code: $RESTORE_EXIT"
echo "Error output:"
[ -s "$ERR_FILE" ] && cat "$ERR_FILE" || echo " (no stderr output)"
fi
done
echo "------------------------------------------"
echo "All restore tasks completed at $(date)"
echo "Started at: $START_TS"
set +x