notebookvb
This commit is contained in:
+108
-34
@@ -1,68 +1,142 @@
|
||||
# PostgreSQL Backup - Tower
|
||||
|
||||
PostgreSQL 18 (Docker: `postgresql18`) na Tower (192.168.1.76).
|
||||
Dva samostatné PostgreSQL Docker kontejnery na Tower (192.168.1.76).
|
||||
|
||||
## Konfigurace
|
||||
---
|
||||
|
||||
## Instance 1 — postgresql18 (hlavní)
|
||||
|
||||
| Parametr | Hodnota |
|
||||
|----------|---------|
|
||||
| Server | Tower (192.168.1.76) |
|
||||
| Container | `postgresql18` |
|
||||
| Port | 5432 |
|
||||
| Docker kontejner | `postgresql18` |
|
||||
| Image | `postgres:18` |
|
||||
| Port | `5432` (host) → `5432` (container) |
|
||||
| User | `vladimir.buzalka` |
|
||||
| Metoda | `pg_dumpall` (všechny DB najednou) |
|
||||
| Záloha | `/mnt/user/Backup/Critical/PostgreSQLBackup/tower/YYYY-MM-DD_HHMM/` |
|
||||
| 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
|
||||
|
||||
### `postgresqlbackup_with_gzip.sh`
|
||||
Provede `pg_dumpall` všech databází, rolí a tablespaces. Výstup je komprimovaný gzip soubor `all_databases.sql.gz`.
|
||||
| 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 postgresqlbackup_with_gzip.sh
|
||||
bash /boot/config/plugins/user.scripts/scripts/PostgreSQLBackup/script
|
||||
bash /boot/config/plugins/user.scripts/scripts/PostgreSQLImmichBackup/script
|
||||
```
|
||||
|
||||
Výsledná struktura:
|
||||
```
|
||||
/mnt/user/Backup/Critical/PostgreSQLBackup/tower/
|
||||
└── 2026-05-23_0200/
|
||||
└── all_databases.sql.gz
|
||||
```
|
||||
|
||||
### `postgresqlrestore_from_backup.sh`
|
||||
Obnoví všechny databáze z nejnovější zálohy (nebo ze zadané cesty).
|
||||
### Restore postgresql18 (nejnovější záloha)
|
||||
|
||||
```bash
|
||||
# Nejnovější záloha (automaticky)
|
||||
bash postgresqlrestore_from_backup.sh
|
||||
|
||||
# Konkrétní záloha
|
||||
bash postgresqlrestore_from_backup.sh /mnt/user/Backup/Critical/PostgreSQLBackup/tower/2026-05-23_0200
|
||||
```
|
||||
|
||||
> **POZOR:** Dump obsahuje `--clean --if-exists`, takže restore přepíše existující data.
|
||||
### Restore postgresql18 (konkrétní záloha)
|
||||
|
||||
### `verify_backup_integrity.sh`
|
||||
Ověří po restore že jsou všechny DB, tabulky, indexy a role přítomny a funkční.
|
||||
```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
|
||||
```
|
||||
|
||||
## Nastavení Unraid User Script
|
||||
---
|
||||
|
||||
Na Tower přidat User Script `POSTGRESQL_BACKUP`:
|
||||
## Metoda zálohy
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
bash /boot/config/plugins/user.scripts/scripts/POSTGRESQL_BACKUP/postgresqlbackup_with_gzip.sh
|
||||
- **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)
|
||||
```
|
||||
|
||||
Schedule: **Daily**
|
||||
|
||||
## Windows přístup k zálohám
|
||||
### 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`.
|
||||
|
||||
Reference in New Issue
Block a user