Files
Administrator 916ab42bcc notebookvb
2026-05-23 09:38:53 +02:00

4.5 KiB

PostgreSQL Backup - Tower

Dva samostatné PostgreSQL Docker kontejnery na Tower (192.168.1.76).


Instance 1 — postgresql18 (hlavní)

Parametr Hodnota
Docker kontejner postgresql18
Image postgres:18
Port 5432 (host) → 5432 (container)
User vladimir.buzalka
Password Vlado7309208104++
Data path (Unraid) /mnt/user/appdata/postgresql18
Obsah Hlavní aplikační databáze
Záloha /mnt/user/Backup/Critical/PostgreSQLBackup/tower/YYYY-MM-DD_HHMM/all_databases.sql.gz
Retence 7 dní / posledních 7 záloh
User Script (Unraid) PostgreSQLBackup
Skript postgresqlbackup_with_gzip.sh
První test 2026-05-23 06:59:51 → 07:03:12 (cca 3 min), dump 3.3 GB

Instance 2 — PostgreSQL_Immich (Immich)

Parametr Hodnota
Docker kontejner PostgreSQL_Immich
Image tensorchord/pgvecto-rs:pg16-v0.2.0 (PG 16 + pgvecto-rs extension)
Port 5433 (host) → 5432 (container)
User postgres
Password postgres
DB immich
Data path (Unraid) /mnt/user/appdata/PostgreSQL_Immich
Obsah Metadata Immich (fotky, alba, uživatelé) — bez samotných fotek
Záloha /mnt/user/Backup/Critical/PostgreSQLImmichBackup/tower/YYYY-MM-DD_HHMM/immich_all.sql.gz
Retence 7 dní / posledních 7 záloh
User Script (Unraid) PostgreSQLImmichBackup
Skript postgresqlimmichbackup_with_gzip.sh
První test 2026-05-23 07:25:31 → 07:25:49 (18 sekund), dump 52 MB

Poznámka: pgvecto-rs je specializovaná extension pro vektorové vyhledávání (používá Immich pro AI similarity search). Dump obsahuje i extension definice, takže restore vyžaduje stejný image (tensorchord/pgvecto-rs), ne čistý postgres.


Skripty

Soubor Popis
postgresqlbackup_with_gzip.sh Backup postgresql18 (pg_dumpall → gzip)
postgresqlimmichbackup_with_gzip.sh Backup PostgreSQL_Immich (pg_dumpall → gzip)
postgresqlrestore_from_backup.sh Restore postgresql18 z nejnovější / zadané zálohy
verify_backup_integrity.sh Ověření DB, tabulek, indexů, rolí po restore

Backup (spuštění ručně na Tower)

bash /boot/config/plugins/user.scripts/scripts/PostgreSQLBackup/script
bash /boot/config/plugins/user.scripts/scripts/PostgreSQLImmichBackup/script

Restore postgresql18 (nejnovější záloha)

bash postgresqlrestore_from_backup.sh

Restore postgresql18 (konkrétní záloha)

bash postgresqlrestore_from_backup.sh /mnt/user/Backup/Critical/PostgreSQLBackup/tower/2026-05-23_0659

POZOR: Dump je vytvořen s --clean --if-exists → restore dropne a znovu vytvoří všechny objekty. Existující data budou přepsána.

Verify po restore

bash verify_backup_integrity.sh

Metoda zálohy

  • pg_dumpall — jeden soubor obsahující všechny DB, role, tablespaces, grants, extensions
  • Streamuje přes stdout | gzip přímo na disk → žádný dočasný soubor uvnitř kontejneru
  • Restore: gunzip -c file.sql.gz | psql
  • Validace: EXIT_CODE z ${PIPESTATUS[0]} + kontrola velikosti souboru + prázdný .err soubor

Struktura záloh na disku

/mnt/user/Backup/Critical/
├── PostgreSQLBackup/
│   └── tower/
│       └── 2026-05-23_0659/
│           └── all_databases.sql.gz   (3.3 GB)
└── PostgreSQLImmichBackup/
    └── tower/
        └── 2026-05-23_0725/
            └── immich_all.sql.gz      (52 MB)

Windows přístup

\\tower\Backup\Critical\PostgreSQLBackup\
\\tower\Backup\Critical\PostgreSQLImmichBackup\

Unraid User Scripts (Tower)

Skripty jsou nasazeny v:

/boot/config/plugins/user.scripts/scripts/PostgreSQLBackup/
/boot/config/plugins/user.scripts/scripts/PostgreSQLImmichBackup/

Nastavit schedule: Settings → User Scripts → Daily


SSH přístup na Tower (z Windows/Python)

Heslo pro SSH se liší od ostatních hesel!

import paramiko
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect("192.168.1.76", username="root", password="7309208104",
               look_for_keys=False, allow_agent=False)

Standardní ssh root@192.168.1.76 z Windows selže kvůli "Too many authentication failures" (nabízí klíče před heslem). Použít look_for_keys=False, allow_agent=False.