Прямой ответ
Database backup — создание резервных копий базы данных для восстановления после сбоев (backup — «резервные копии» — backup — incident — «восстановление после сбоев» — backup), зачем: защита от потери данных (backup — «данные могут быть потеряны» — backup — incident — «восстановление» — backup — postgres — «защита данных» — backup); стратегии резервного копирования (backup — «стратегии» — backup): (1) Полное (Full) (backup — «полная копия всей БД» — backup — incident — «вся база» — backup — postgres — pg_dump (backup — «полный дамп» — backup — «долго, но просто» — backup); (2) Инкрементальное (Incremental) (backup — «только изменения с последнего бэкапа» — backup — incident — «изменения» — backup — postgres — WAL (backup — «WAL-архивы» — backup — «быстро, но сложнее восстановление» — backup); (3) Дифференциальное (Differential) (backup — «изменения с последнего полного» — backup — incident — «изменения с полного» — backup — postgres — WAL (backup — «WAL-архивы» — backup — «быстрее полного» — backup); инструменты (backup): (1) pg_dump (backup — «утилита PostgreSQL» — backup — incident — «логический дамп» — backup — postgres — pg_dump mydb > backup.sql (backup — «SQL-дамп» — backup — pg_dump — «PostgreSQL» — backup); (2) pg_dumpall (backup — «дамп всех БД» — backup — incident — «все базы» — backup — postgres — pg_dumpall > all.sql (backup — «все БД» — backup — pg_dump — «PostgreSQL» — backup); (3) pgBackRest (backup — «инструмент резервного копирования» — backup — incident — «физические бэкапы» — backup — postgres — WAL (backup — «WAL-архивы» — backup — pgBackRest — «популярный» — backup); восстановление (backup — «восстановление из бэкапа» — backup): (1) Из pg_dump (backup — psql mydb < backup.sql (backup — «восстановление из SQL» — backup — postgres — «SQL-дамп» — backup — pg_dump — «долго» — backup); (2) Из pgBackRest (backup — pgbackrest restore (backup — «восстановление из физического бэкапа» — backup — postgres — «WAL» — backup — pgBackRest — «быстро» — backup); (3) Point-in-Time Recovery (PITR) (backup — «восстановление до момента времени» — backup — incident — «до ошибки» — backup — postgres — WAL (backup — «WAL-архивы» — backup — pgBackRest — «точное время» — backup); когда делать бэкапы (backup): регулярно (backup — «каждый день/час» — backup — incident — «регулярно» — backup — postgres), перед изменениями (backup — «перед миграциями» — backup — incident — «перед изменениями» — backup — postgres), после сбоев (backup — «после восстановления» — backup — incident — «после сбоев» — backup — postgres); антипаттерны: не делать бэкапы (backup — «без бэкапов» — backup — incident — «потеря данных» — backup — postgres — «бэкапы обязательны» — backup), не тестировать восстановление (backup — «бэкапы не тестируются» — backup — incident — «не восстановить» — backup — postgres — «тестировать обязательно» — backup).
Практика: резервное копирование PostgreSQL
pg_dump (backup — pg_dump -h localhost -U postgres mydb > backup.sql (backup — «SQL-дамп» — backup — postgres — «логический дамп» — backup — pg_dump); pgBackRest (backup — pgbackrest --stanza=mydb backup (backup — «физический бэкап» — backup — postgres — «WAL» — backup — pgBackRest); Восстановление из pg_dump (backup — psql -h localhost -U postgres mydb < backup.sql (backup — «восстановление» — backup — postgres — «из SQL» — backup — pg_dump); Восстановление из pgBackRest (backup — pgbackrest --stanza=mydb restore (backup — «восстановление» — backup — postgres — «из физического» — backup — pgBackRest); PITR (backup — pgbackrest --stanza=mydb --type=time --target="2024-01-15 10:00:00" restore (backup — «восстановление до момента» — backup — postgres — «PITR» — backup — pgBackRest).
Практический сценарий: настройка резервного копирования
Контекст: PostgreSQL (postgres — продакшн (incident — backup), боль: нет бэкапов (backup — «без бэкапов» — backup — incident — «потеря данных» — backup — postgres); решение — database backup: (1) pgBackRest (backup — установка (backup — apt install pgbackrest (backup — postgres — «pgBackRest» — backup — pgBackRest); (2) конфигурация (backup — /etc/pgbackrest/pgbackrest.conf (backup — «конфигурация» — backup — postgres — «настройка» — backup — pgBackRest); (3) полный бэкап (backup — pgbackrest --stanza=mydb --type=full backup (backup — «полный» — backup — postgres — «full» — backup — pgBackRest); (4) инкрементальные (backup — pgbackrest --stanza=mydb --type=incr backup (backup — «инкрементальные» — backup — postgres — «incr» — backup — pgBackRest); (5) автоматизация (backup — cron (backup — 0 2 * * * pgbackrest --stanza=mydb --type=incr backup (backup — «каждый день в 2:00» — backup — postgres — «автоматически» — backup — pgBackRest); (6) тестирование (backup — восстановление (backup — pgbackrest --stanza=mydb restore (backup — «тестирование» — backup — postgres — «восстановление» — backup — pgBackRest); результат: бэкапы настроены (backup — «полные + инкрементальные» — backup — incident — «автоматически» — backup — postgres — «тестированы» — backup — «восстановление работает» — backup); вывод: database backup решили задачу (защита от потери данных — backup — ADR — «не делать бэкапы» — антипаттерн — postgres — бэкапы обязательны — backup — техдолг).
FAQ
Что такое database backup и какие стратегии существуют? Database backup (backup — создание резервных копий (backup — «резервные копии» — backup — incident — «восстановление» — backup — postgres); стратегии (backup): Full (backup — «полная копия» — backup — incident — «вся база» — backup — postgres), Incremental (backup — «только изменения» — backup — incident — «изменения» — backup — postgres), Differential (backup — «изменения с последнего полного» — backup — incident — «изменения» — backup — postgres); «без бэкапов» — антипаттерн (потеря данных — postgres — бэкапы обязательны — backup — ADR — техдолг).
Какие инструменты database backup существуют и чем они отличаются? pg_dump (backup — «утилита PostgreSQL» — backup — incident — «логический дамп» — backup — postgres — pg_dump — «PostgreSQL» — backup); pg_dumpall (backup — «дамп всех БД» — backup — incident — «все базы» — backup — postgres — pg_dump — «PostgreSQL» — backup); pgBackRest (backup — «инструмент резервного копирования» — backup — incident — «физические бэкапы» — backup — postgres — pgBackRest — «популярный» — backup); отличие: pg_dump — логический (backup — pg_dump), pgBackRest — физический (backup — pgBackRest — «выбор по задаче» — backup — incident — ADR — техдолг).
Как настроить database backup с pgBackRest?
Настройка (backup — pgBackRest (backup — apt install pgbackrest (backup — postgres — «установка» — backup — pgBackRest); конфигурация (backup — /etc/pgbackrest/pgbackrest.conf (backup — «конфигурация» — backup — postgres — «настройка» — backup — pgBackRest); бэкап (backup — pgbackrest --stanza=mydb backup (backup — «бэкап» — backup — postgres — «бэкап» — backup — pgBackRest); автоматизация (backup — cron (backup — 0 2 * * * pgbackrest --stanza=mydb backup (backup — «каждый день» — backup — postgres — «автоматически» — backup — pgBackRest); «не делать бэкапы» — антипаттерн (потеря данных — postgres — бэкапы обязательны — backup — ADR — техдолг).
Как восстановить базу данных из бэкапа и почему важно тестировать восстановление?
Восстановление (backup — из бэкапа (backup — «восстановление» — backup — incident — «из бэкапа» — backup — postgres); как: из pg_dump (backup — psql mydb < backup.sql (backup — «из SQL» — backup — postgres — «SQL» — backup — pg_dump), из pgBackRest (backup — pgbackrest restore (backup — «из физического» — backup — postgres — «физический» — backup — pgBackRest), PITR (backup — pgbackrest --type=time --target="..." restore (backup — «до момента» — backup — postgres — «PITR» — backup — pgBackRest); почему важно: без тестирования — не восстановить (backup — «бэкапы не работают» — backup — incident — «не восстановить» — backup — postgres — «тестировать обязательно» — backup); «не тестировать восстановление» — антипаттерн (не восстановить — postgres — тестировать обязательно — backup — ADR — техдолг).
Источники: PostgreSQL docs (backup), pgBackRest docs, pg_dump docs — ссылки в шапке.