143 lines
4.5 KiB
Markdown
143 lines
4.5 KiB
Markdown
# 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
|
|
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
|
|
bash postgresqlrestore_from_backup.sh
|
|
```
|
|
|
|
### Restore postgresql18 (konkrétní záloha)
|
|
|
|
```bash
|
|
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
|
|
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!
|
|
|
|
```python
|
|
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`.
|