Files
Backup/MongTower
Administrator 36d7c43441 notebookvb
2026-05-23 05:28:39 +02:00
..
2026-05-23 05:28:39 +02:00
2026-05-23 05:28:39 +02:00
2026-05-23 05:28:39 +02:00
2026-05-23 05:28:39 +02:00

MongoDB Backup & Restore Scripts

Kompletní řešení pro zálohování a obnovu MongoDB databází na Unraid.

📋 Obsah backup

Skripty zálohují a obnovují KOMPLETNĚ VŠECHNO:

  • Všechny databáze (včetně admin pro credentials a roles)
  • Všechny kolekce a dokumenty (BSON formát)
  • Všechny indexy (včetně unique, compound, text indexů)
  • Metadata kolekcí (validators, options, atd.)
  • Uživatele a role (v admin DB)
  • Komprimace gzipem pro úsporu místa

Oveřeno zachowáno:

  • Indexové struktury se zachovávají identicky
  • Collection validators (JSONSchema) se zachovávají
  • Collection options (capped collections, atd.) se zachovávají
  • Všechny system collections (system.indexes, system.users, atd.)
  • Opaque object IDs, binary data, všechny BSON typy

🔄 Použití

1. Backup skript (mongodbbackup_with_gzip.sh)

Zálohuje všechny DB do /mnt/user/Backup/Critical/MongoDBBackup/tower/{DB_NAME}/{YYYY-MM-DD_HHMM}/

chmod +x mongodbbackup_with_gzip.sh
./mongodbbackup_with_gzip.sh

Přidej do Unraid scheduled tasksu:

Schedule: Daily (nebo jak chceš)
Command: /mnt/user/path/mongodbbackup_with_gzip.sh

Struktura záloh:

/mnt/user/Backup/Critical/MongoDBBackup/tower/
├── admin/
│   └── 2026-05-23_1530/
│       ├── admin.archive.gz
│       └── admin.err (jen pokud je chyba)
├── fio/
│   └── 2026-05-23_1530/
│       ├── fio.archive.gz
│       └── ...
└── ...

Konfigurace:

  • CONTAINER_NAME - jméno MongoDB kontejneru
  • KEEP_DAYS - Jak dlouho se uchovávají staré zálohy (default: 3 dny)
  • WHAT_TO_BACKUP - Seznam DB k zálohování

2. Restore skript (mongodbrestore_from_backup.sh)

Obnovuje všechny DB ze zálohy na LOCAL MongoDB.

chmod +x mongodbrestore_from_backup.sh
./mongodbrestore_from_backup.sh /mnt/user/Backup/Critical/MongoDBBackup/tower

Co skript dělá:

  1. Najde nejnovější backup pro KAŽDOU DB
  2. Extrahuje .tar.gz archiv
  3. Obnoví do MongoDB (s --drop na přepsání existujících)
  4. Validuje úspěch
  5. Čistí temp soubory

3. Ověřovací skript (verify_backup_integrity.sh)

Kontroluje že se VŠECHNO správně obnovilo (indexy, metadata, kolekce).

chmod +x verify_backup_integrity.sh
./verify_backup_integrity.sh

Co skript ověřuje:

  1. Zda všechny DB existují
  2. Počet a jména kolekcí
  3. Indexy pro každou kolekci (včetně jejich definic)
  4. Počet dokumentů v každé kolekci
  5. Velikost dat v MB
  6. Uživatele a role (admin DB)

Příklad výstupu:

Verifying database: fio
✅ Database exists: fio
✅ Collections count: 8
   Collections:
     - users
     - products
     - logs
   Indexes per collection:
     fio.users: 3 indexes
       - { "_id": 1 }
       - { "email": 1 }
       - { "created_at": -1 }
   Collection stats:
     users:
       Documents: 12345
       Size: 45.23 MB

🧪 Testování na 2 Unraid serverech

Scénář: Tower1 → Tower2 (Kompletní test)

Krok 1: Na Tower1 (zdroj) - Spusť backup:

/mnt/user/Backup/Critical/MongoDBBackup/mongodbbackup_with_gzip.sh

# Ověř že backup existuje
ls -lh /mnt/user/Backup/Critical/MongoDBBackup/tower/*/*/

Očekávaný výstup:

/mnt/user/Backup/Critical/MongoDBBackup/tower/
├── admin/2026-05-23_1530/admin.archive.gz (234K)
├── fio/2026-05-23_1530/fio.archive.gz (45M)
├── torrents/2026-05-23_1530/torrents.archive.gz (...
└── ...

Krok 2: Zkopíruj backup do Tower2:

# Přes SMB share / rsync / fyzicky disku
# Zkopíruj celou strukturu: /mnt/user/Backup/Critical/MongoDBBackup/tower/

Krok 3: Na Tower2 (cíl) - Obnovte zálohu:

/mnt/user/Backup/Critical/MongoDBBackup/mongodbrestore_from_backup.sh /mnt/user/Backup/Critical/MongoDBBackup/tower

# Výstup by měl být:
# SUCCESS: admin restored successfully
# SUCCESS: fio restored successfully
# ...

Krok 4: Ověř INTEGRITU na Tower2 - Nejdůležitější!

/mnt/user/Backup/Critical/MongoDBBackup/verify_backup_integrity.sh

To by mělo ověřit:

  • Všechny DB existují
  • Všechny kolekce se obnovily
  • Všechny indexy jsou tam (se stejnými definicemi!)
  • Počet dokumentů je identický
  • Uživatelé a role jsou obnovení

Krok 5: Manuální spot-check (volitelně):

docker exec -it MongoDB mongosh --host localhost --port 27017

# Ověř indexy v konkrétní kolekci
use fio
db.some_collection.getIndexes()  # Měly by být stejné jako na Tower1

# Ověř počet dokumentů
db.some_collection.countDocuments()  # Měl by být identický

# Ověř že data jsou bezpečná
db.some_collection.findOne()

⚠️ Důležité poznámky

  1. --drop flag - Restore skript obnovuje s --drop, což PŘEPÍŠE existující databázi. To je zvláště důležité pro test.

  2. Admin DB - Obsahuje uživatele a role. Pokud máš auth, musíš je správně obnovit.

  3. Čištění - Po úspěšném testu si můžeš vymazat temp soubory:

    rm -rf /tmp/mongodb_restore_*
    
  4. Disk space - Při restore se vytváří tmp soubory. Ověř prostor na /tmp (nebo /mnt/user).

  5. MongoDB port - Oba skripty očekávají MongoDB na localhost:27017 (default).


📊 Příklad výstupu

Starting scheduled backup for: admin fio torrents OrdinaceDropBoxBackup medevio kanboard medicus studie puzzle
------------------------------------------
Processing database: admin
SUCCESS: admin backed up successfully
Dump size: 234K
Cleaning up old backups for admin...
------------------------------------------
Processing database: fio
SUCCESS: fio backed up successfully
Dump size: 45M
Cleaning up old backups for fio...
------------------------------------------
...
All backup tasks completed at Fri May 23 15:30:45 UTC 2026

🔧 Troubleshooting

Problém Řešení
ERROR: Container not found Ověř jméno kontejneru v CONTAINER_NAME
Dump file too small Ověř že MongoDB běží a má data
mongodump: command not found Mongodump by měl být v MongoDB image, zkontroluj Docker image
Permission denied Ověř práva na složky: chmod 755 /mnt/user/Backup/Critical/MongoDBBackup

📝 Tipy

  • Archivuj staré zálohy - Pokud chceš uchovávat dlouhodobější zálohy, zkopíruj složky před KEEP_DAYS expirací
  • Ověř čitelnost - Po backup jdi ověřit že soubor lze extrahovat: tar -tzf admin.archive.gz | head
  • Monitoruj velikost - du -sh /mnt/user/Backup/Critical/MongoDBBackup/ - kontroluj disk space