Резервное копирование и восстановление
Резервное копирование PostgreSQL
pg_dump
Базовое резервное копирование через pg_dump:
bash
# Полный дамп БД
pg_dump -h localhost -U slozy_user -d slozy_dev \
--no-owner --no-acl \
-F c -f backup_$(date +%Y%m%d_%H%M%S).dump
# Восстановление из дампа
pg_restore -h localhost -U slozy_user -d slozy_dev \
--no-owner --no-acl \
-c backup.dumpАвтоматическое резервное копирование
Для продакшена используйте скрипты из scripts/backup.sh:
bash
#!/bin/bash
BACKUP_DIR="/var/backups/slozy"
DB_NAME="slozy"
DB_USER="slozy"
RETENTION_DAYS=30
pg_dump -U "$DB_USER" "$DB_NAME" \
-F c \
-f "$BACKUP_DIR/slozy_$(date +%Y%m%d).dump"
# Удаление старых копий
find "$BACKUP_DIR" -name "slozy_*.dump" -mtime +$RETENTION_DAYS -deleteМиграции
SLOzy использует golang-migrate/migrate/v4 для управления схемой БД. Миграции расположены в migrations/.
Применение миграций
bash
# Up — применить все pending миграции
go run ./cmd/slozy-web -migrate up
# Down — откатить одну миграцию
go run ./cmd/slozy-web -migrate down 1
# До конкретной версии
go run ./cmd/slozy-web -migrate goto 000010Структура файлов миграций
migrations/
├── 000001_organizations.up.sql
├── 000001_organizations.down.sql
├── 000002_teams.up.sql
├── 000002_teams.down.sql
...
├── 000018_query_cache.up.sql
└── 000018_query_cache.down.sqlКаждая миграция имеет up (применение) и down (откат). При запуске сервера миграции выполняются автоматически.
Важные миграции
| Миграция | Назначение |
|---|---|
| 000012_slo_recommendations | Рекомендации SLO |
| 000013_oauth2_persistence | OAuth2 токены |
| 000014_password_reset | Сброс пароля |
| 000015_rbac_system | RBAC и роли |
| 000016_prometheus_integration | Интеграция Prometheus |
| 000018_query_cache | Кэширование запросов |
Kubernetes CronJob
Для автоматического бэкапа в Kubernetes:
yaml
apiVersion: batch/v1
kind: CronJob
metadata:
name: slozy-db-backup
namespace: slozy
spec:
schedule: "0 2 * * *"
jobTemplate:
spec:
template:
spec:
containers:
- name: pg-dump
image: postgres:16-alpine
command:
- /bin/sh
- -c
- |
pg_dump postgres://$(POSTGRES_USER):$(POSTGRES_PASSWORD)@postgres-service:5432/slozy \
-F c -f /backup/slozy_$(date +%Y%m%d).dump
envFrom:
- secretRef:
name: slozy-secrets
volumeMounts:
- name: backup-volume
mountPath: /backup
restartPolicy: OnFailure
volumes:
- name: backup-volume
persistentVolumeClaim:
claimName: backup-pvcРекомендации
- Храните дампы минимум 30 дней
- Шифруйте резервные копии при хранении вне инфраструктуры
- Тестируйте восстановление из бэкапа ежемесячно
- Используйте
pg_dump -F c(custom format) для сжатия и гибкости - При миграциях в production предварительно делайте дамп схемы