MedicusFirebird — Firebird 2.5 zrcadlo Medicus DB na toweru
Kontejnerizované zrcadlo ostré Medicus databáze (Firebird) na serveru tower (Unraid, 192.168.1.76). Nahrazuje dosavadní restore na Windows VM reporter — tu lze po ověření na Firebird části vypnout.
Proč
Všechny ostatní DB (MySQL, PostgreSQL, MongoDB, Redis) běží na toweru jako Docker. Firebird sem logicky patří taky: jeden host, jeden režim záloh/monitoringu, žádná Windows VM navíc.
Tok dat
Ordinace: gbak -> zip -> rsync na tower (~02:15)
Tower: /mnt/user/OrdinaceSynology/MedicusBackup/MEDICUS_RRMMDD_HHMM.zip (zalohy se HROMADI)
restore_medicus.sh (denne):
1) nejnovejsi MEDICUS_*.zip podle nazvu; pokud == last_restored.txt -> skip
2) pocka az velikost prestane rust (probiha-li jeste rsync) + overi unzip -t
3) unzip .fbk -> gbak -r do medicus_new.fdb -> stop+swap+start kontejneru
4) zapise marker (last_restored.txt)
5) GFS retence zaloh (prune_backups.sh)
Kontejner: firebird-medicus -> serve tower:3050 /firebird/data/medicus.fdb
Zdrojová DB: Firebird 2.5.7, ODS 11.2, dialect 3, page size 8192.
Image: jacobalberty/firebird:2.5-ss = Firebird 2.5.9 (restore 2.5.7 → 2.5.9 v rámci řady OK).
Soubory
| Soubor | Popis |
|---|---|
firebird_create.sh |
Jednorázové vytvoření / znovuvytvoření kontejneru |
restore_medicus.sh |
Denní rutina: obnova z nejnovější zálohy + retence (cron) |
prune_backups.sh |
GFS retence záloh (volá se z restore; lze i samostatně) |
verify_firebird.sh |
Kontrola: verze enginu, ODS, počet pacientů |
last_restored.txt |
Marker poslední úspěšně restorované zálohy (vzniká za běhu) |
restore.log |
Log denních běhů |
Umístění na toweru
- Skripty:
/mnt/user/Scripts/MedicusFirebird/ - Data kontejneru:
/mnt/user/appdata/firebird-medicus/fb(→/firebird, soubordata/medicus.fdb) - Rozbalovací prostor pro
.fbk:/mnt/user/appdata/firebird-medicus/work(→/work)
Kontejner
docker run -d --name firebird-medicus --restart unless-stopped \
-p 3050:3050 -e ISC_PASSWORD=masterkey -e TZ=Europe/Prague \
-v /mnt/user/appdata/firebird-medicus/fb:/firebird \
-v /mnt/user/appdata/firebird-medicus/work:/work \
jacobalberty/firebird:2.5-ss
Pozn.: gbak/isql jsou v /usr/local/firebird/bin/ (nejsou v PATH → volat plnou cestou).
Hesla jsou v security2.fdb (nastaveno přes ISC_PASSWORD), ne v medicus.fdb — restore dat heslo nemění.
Robustnost restoru
Zálohy se v adresáři hromadí a nejnovější se může právě přenášet přes rsync, proto:
- výběr nejnovější podle názvu (
RRMMDD_HHMM→ lexikálně = chronologicky) - stav v
last_restored.txt→ když není nic novějšího, nic se nedělá - čeká na dokončení přenosu (velikost se ustálí) a ověří integritu
unzip -t— nikdy nezpracuje nekompletní soubor - marker se zapíše až po úspěšném restoru; zámek (
flock) proti souběhu
Retence záloh (GFS, sekvenční, počítaná)
prune_backups.sh drží v adresáři záloh schéma:
- 30 posledních dní — nech všechny denní
- pak 8 týdnů — z každého ISO-týdne 1× (nejnovější = konec týdne)
- pak 12 měsíců — z každého měsíce 1× (nejnovější)
- starší → smazat
Datum se čte z názvu (ne mtime). Neparsovatelné názvy se nikdy nemažou.
Bezpečnostní přepínač DRY_RUN=1 (jen výpis) / DRY_RUN=0 (maže). V denní rutině řízeno RETENTION_DRYRUN
v restore_medicus.sh (ostré = 0).
Připojení klientů (fdb / DSN)
192.168.1.76:/firebird/data/medicus.fdb SYSDBA / masterkey, charset win1250
# nebo: tower:/firebird/data/medicus.fdb
V Knihovny/medicus_db.py je odpovídající záznam v dsn_map (klíč TOWER).
Cutover skriptů/MCP z reporteru (2.5.7) na tower (2.5.9) = otevřené rozhodnutí.
Cron (na toweru)
Záloha přistává ~02:15; denní rutina poté. Plánovat přes User Scripts plugin
(vzor: PostgreSQLRestoreFromBackup), spouštět:
/mnt/user/Scripts/MedicusFirebird/restore_medicus.sh # napr. 06:30 denne