Основы резервного копирования PostgreSQL: от pg_dump до PITR
Резервное копирование баз данных: от простых дампов до PITR
Резервное копирование — фундамент надежной инфраструктуры. Для новичков в системном администрировании этот процесс часто начинается с настройки простых скриптов, но с ростом проекта подходы должны меняться. Рассмотрим основные методы защиты данных в PostgreSQL.
Классический подход: pg_dump и cron
Самый очевидный способ для небольших инстансов (например, Metabase или Grafana) — создание дампа через pg_dump по расписанию в cron. Это удобно, просто и позволяет восстановить как всю базу, так и отдельные таблицы.
pg_dump -U username -d dbname -f /backups/dump.sql
Однако у этого метода есть два существенных недостатка:
- RPO (Recovery Point Objective): Риск потери данных за последние 24 часа.
- Масштабируемость: При росте объема БД время восстановления (RTO) растет непропорционально. Даже при использовании параллельных потоков, процесс создания индексов после заливки данных становится «узким горлышком», потребляющим максимум ресурсов процессора и дисковой подсистемы.
Point-in-Time Recovery (PITR) — решение для продакшена
Когда цена потери данных возрастает, на помощь приходит механизм Point-in-Time Recovery (PITR). В отличие от SQL-дампов, PITR работает на уровне файлов базы данных и журналов транзакций (WAL — Write Ahead Log).
Методология PITR включает:
- Регулярные полные файловые бэкапы (или инкрементальные/дифференциальные для ускорения).
- Непрерывную архивацию WAL-файлов во внешнее хранилище.
Почему это эффективнее:
- Скорость: Восстановление файлового бэкапа — это просто копирование данных, что значительно быстрее, чем проигрывание SQL-инструкций.
- Точность: Вы можете «откатить» состояние базы на любую секунду до инцидента. Если в 10:45 произошла ошибка, вы легко восстановитесь на 10:44.
Для реализации PITR в PostgreSQL часто используют инструмент WAL-G. Он позволяет эффективно управлять архивацией WAL-ов и бэкапами, обеспечивая высокую надежность. Настройка мониторинга за выполнением этих процессов обязательна: всегда нужно быть уверенным, что бэкапы актуальны и доступны.