Почему это важно
Диски умирают, миграции ломают БД, шифровальщики стирают файлы, а «случайный» DROP TABLE на проде делается за секунду. Без проверенной копии это потеря бизнеса; с копией — пара часов на восстановление. Особенно коварен непроверенный бэкап: он есть, но в час Х не разворачивается — то есть бэкапа фактически не было.
Живой сценарий. На проде запустили миграцию без дампа. Скрипт отработал не так, часть таблиц повредилась. Дамп вроде делался ночью cron-ом — но в него месяц как не попадала новая БД, и восстановить нечего. Итог: дни простоя и потерянные данные клиентов. С двухминутным дампом перед миграцией это была бы мелкая неприятность.
Что делать (по шагам)
- Перед любым необратимым (миграция/деплой/удаление) — снапшот/ветка/дамп БД здесь и сейчас:
# дамп PostgreSQL перед миграцией
pg_dump -Fc "$DATABASE_URL" -f "backup_$(date +%F_%H%M).dump"
# восстановление при беде:
# pg_restore -d "$DATABASE_URL" --clean backup_YYYY-MM-DD_HHMM.dump
- Соблюдай правило 3-2-1: 3 копии данных, на 2 разных носителях, 1 копия — вне площадки (другой регион/облако).
- Автоматизируй бэкап (cron/таймер) и шифруй копии, если в них ПД/секреты.
- Регулярно проверяй восстановление — разворачивай дамп на тестовом окружении. Бэкап без теста = лотерея.
# раз в N дней: восстановить дамп в тестовую БД и убедиться, что данные на месте
createdb restore_test && pg_restore -d restore_test --clean latest.dump
- Защити бэкапы от шифровальщика: оффлайн/immutable-копия, отдельные креды, версионирование в объектном хранилище.
Чего НЕ делать
- Не держи единственную копию рядом с оригиналом (на том же диске/сервере).
- Не считай бэкап рабочим, пока не восстановил из него хотя бы раз.
- Не выкатывай разрушительные изменения «на проде» без свежего дампа.
- Не храни бэкапы без шифрования, если в них персональные данные/секреты.
- Не давай бэкап-хранилищу те же креды, что и проду (иначе шифровальщик достанет и копии).
Как проверить себя
- Перед необратимым я делаю дамп/снапшот — это рефлекс, а не «когда вспомню».
- Выполняется правило 3-2-1 (3 копии / 2 носителя / 1 вне площадки).
- Бэкапы автоматизированы и (при наличии ПД) зашифрованы.
- Я реально восстанавливал данные из бэкапа хотя бы раз и знаю время восстановления.
- Есть оффлайн/immutable-копия на случай шифровальщика.
Инструменты
- БД:
pg_dump/pg_restore(PostgreSQL),mysqldump(MySQL), снапшоты управляемых БД у облака. - Файлы/системы: restic, BorgBackup, Duplicati — дедупликация + шифрование.
- Объектное хранилище с версионированием/Object Lock: S3-совместимые (immutable backups).
- Дисциплина: напоминание/CI-шаг «дамп перед миграцией», регулярный restore-тест в календаре.