Skip to content

Runbook: DB Backup & Restore

⚠️ Tenhle runbook byl do 2026-07-31 STALE. Popisoval DigitalOcean Managed DB, ruční pg_dump do /root/backups/ a u automatizace měl „TODO: Nastavit cron pro denní backup". Nic z toho neplatilo — zálohy jezdí přes cron proti pg-alfa a mají tři vrstvy. Aktuální stav žije v jednom dokumentu:

infra/backup.md

Najdeš tam:

  • tři vrstvy — sentinel (Norimberk) → Storage Box (Falkenstein) → Object Storage (Helsinky)
  • seznam zálohovaných databází + kontrolu, které na pg-alfa v rotaci chybí
  • rozvrh cronu a proč běží v tom pořadí
  • alertingbackup-alert.sh, Telegram + mail při selhání
  • postupy obnovení z lokální kopie i z archivu
  • co se 2026-07-31 našlo rozbité a proč se o tom nikdo nedozvěděl

Rychlé připomenutí

# obnovení z lokální kopie
gunzip -c /var/backups/postgres/<db>_<datum>.sql.gz | psql -h 100.125.3.121 -p 5432 -U s60admin -d <db>

# která DB na pg-alfa NENÍ v rotaci
# (grep MUSÍ být kotvený — volný hlásí s60_billit jako pokrytý, protože ho najde v s60_billit_hub)
ssh root@100.125.3.121 "sudo -u postgres psql -tAc \"SELECT datname FROM pg_database WHERE NOT datistemplate AND datname NOT IN ('postgres')\"" \
  | while read db; do [ -n "$db" ] && { grep -q "^  $db\b" /usr/local/bin/s60-backup.sh || echo "CHYBÍ: $db"; }; done

⚠️ Obnovitelnost se zatím nikdy netestovala — viz infra/backup.md §8. Dump, který nikdo nezkusil obnovit, není záloha, jen soubor.