Files
Backup/MongoDBBackup
Administrator 916ab42bcc notebookvb
2026-05-23 09:38:53 +02:00
..
2026-05-23 09:38:53 +02:00
2026-05-23 09:38:53 +02:00
2026-05-23 06:54:13 +02:00
2026-05-23 09:38:53 +02:00

MongoDB Backup & Restore - Tower / Tower1

Kompletní řešení pro zálohování a obnovu MongoDB na Unraid.
Ověřeno v praxi na dvou Unraid serverech Tower (192.168.1.76) a Tower1 (192.168.1.50).


🏗️ Infrastruktura

Server IP Role MongoDB kontejner
Tower 192.168.1.76 Primární (zdroj záloh) MongoDB
Tower1 192.168.1.50 Záloha (restore cíl) MongoDB

SSH: Tower1 ↔ Tower mají vzájemně nahrané SSH klíče (bez hesla).


📋 Co backup zachovává

  • Všechny kolekce a dokumenty (BSON formát)
  • Všechny indexy (unique, compound, sparse, text)
  • Metadata kolekcí (validators, options)
  • Komprimace gzipem (--archive --gzip)

Poznámka k admin DB: MongoDB je provozováno bez autentifikace, admin DB obsahuje pouze system.version (1 dokument, 360 B). Není nutné ji zálohovat pro obnovení dat.


📁 Struktura záloh

/mnt/user/Backup/Critical/MongoDBBackup/tower/
├── admin/
│   └── 2026-05-23_0532/
│       └── admin.archive.gz  (~360 B)
├── edc/
│   └── 2026-05-23_0532/
│       └── edc.archive.gz    (~436 KB)
└── ...

Dostupné přes Windows: \\tower\Backup\Critical\MongoDBBackup\


⚙️ Konfigurace backup skriptu

Soubor: mongodbbackup_with_gzip.sh

Proměnná Hodnota Popis
CONTAINER_NAME MongoDB Jméno Docker kontejneru
BASE_PATH /mnt/user/Backup/Critical/MongoDBBackup Cesta k zálohám
KEEP_DAYS 3 Smazat zálohy starší než N dní
KEEP_COUNT 3 Ponechat max N posledních záloh
WHAT_TO_BACKUP ("admin" "edc" ...) Seznam DB k zálohování

Klíčové: Backup používá mongodump --archive --gzip který streamuje přes stdout - nepotřebuje volume mount v kontejneru.


🔄 Backup

Skript je registrován v Unraid User Scripts jako MONGODB_BACKUP na Tower.

TOOLS → USER SCRIPTS → MONGODB_BACKUP → RUN SCRIPT

Cesta na Unraidu:

/boot/config/plugins/user.scripts/scripts/MONGODB_BACKUP/script

Očekávaný výstup:

Processing database: edc
SUCCESS: edc backed up successfully
Dump size: 436K
Cleaning up old backups for edc...

🔁 Restore

Metoda 1: Ze sdíleného share (doporučeno, ověřeno)

Záloha je dostupná na Tower1 přes SMB - /mnt/user/Backup/Critical/MongoDBBackup/.
Pokud není automaticky namountováno, zkopíruj soubor na Tower1 share #test:

# Z Windows:
Copy-Item "\\tower\Backup\Critical\MongoDBBackup\tower\edc\2026-05-23_0532\edc.archive.gz" "\\tower1\#test\edc.archive.gz"

Restore skript na Tower1 (User Scripts → MONGODB_RESTORE):

docker exec -i MongoDB mongorestore --archive --gzip --drop < /mnt/user/#test/edc.archive.gz

Metoda 2: SSH stream Tower → Tower1 (ověřeno, funguje)

ssh -o StrictHostKeyChecking=no root@192.168.1.76 \
  'cat /mnt/user/Backup/Critical/MongoDBBackup/tower/edc/2026-05-23_0532/edc.archive.gz' \
  | docker exec -i MongoDB mongorestore --archive --gzip --drop

Cesta skriptu na Tower1:

/boot/config/plugins/user.scripts/scripts/MONGODB_RESTORE/script

⏱️ Reálné časy (ověřeno)

Databáze Velikost zálohy Dokumentů Čas restore
admin 360 B 1 < 1 min
edc 436 KB 4563 ~7 minut

Pozor: Restore vypadá že "stojí" - ale probíhá indexace. Například edc.queries_snapshots (2091 docs, 5 indexů včetně compound unique) trvá několik minut. Nezavírat okno!


Výsledek úspěšného restore (edc)

finished restoring edc.MDD3003_DateofVisit (381 documents, 0 failures)
finished restoring edc.queries_snapshots (2091 documents, 0 failures)
finished restoring edc.queries (2091 documents, 0 failures)
restoring indexes for collection edc.queries from metadata
  - queryId_1 (sparse, unique)
  - queryStatus_1
  - openedDate_1
  - site.number_1
  - subject.label_1
restoring indexes for collection edc.queries_snapshots from metadata
  - queryId_1_snapshotDate_1 (compound, unique)
  - snapshotDate_1
  - queryStatus_1
  - site.number_1
  - subject.label_1
4563 document(s) restored successfully. 0 document(s) failed to restore.
Exit: True

🔧 Troubleshooting

Problém Příčina Řešení
Restore "stojí" minuty Indexace probíhá Počkej, nezavírej okno
--dumpDbUsersAndRoles error MongoDB bez auth nemá users/roles Flag odstraněn ze skriptů
tar: Cannot stat mongodump zapisuje do kontejneru, ne na host Použít --archive --gzip (stdout stream)
SSH stream visí SSH drží stdin otevřený Přidat -n flag nebo použít lokální soubor
Permission denied Práva na složky chmod 755 /mnt/user/Backup/Critical/MongoDBBackup

📝 Historie vývoje a naučené lekce

  1. mongodump --out do kontejneru nefunguje - kontejner zapisuje do svého filesystému, host soubory nevidí. Řešení: --archive --gzip streamuje přes stdout.

  2. --dumpDbUsersAndRoles selže na MongoDB bez auth - odstraněno.

  3. tar cesta - mongodump vytváří DUMP_DIR/DB_NAME/kolekce.bson, ne přímo DUMP_DIR/kolekce.bson.

  4. Restore je pomalý - indexace compound a unique indexů trvá. Normální chování, není to chyba.

  5. SSH stream - funguje ale při pomalé indexaci může paramiko timeout. Bezpečnější je lokální soubor přes share.