qvib.pro
EN

Бэкапы (правило 3-2-1)

Данные теряют все — вопрос только когда. Бэкап превращает катастрофу в неудобство.

бесплатно любой

Почему это важно

Диски умирают, миграции ломают БД, шифровальщики стирают файлы, а «случайный» DROP TABLE на проде делается за секунду. Без проверенной копии это потеря бизнеса; с копией — пара часов на восстановление. Особенно коварен непроверенный бэкап: он есть, но в час Х не разворачивается — то есть бэкапа фактически не было.

Живой сценарий. На проде запустили миграцию без дампа. Скрипт отработал не так, часть таблиц повредилась. Дамп вроде делался ночью cron-ом — но в него месяц как не попадала новая БД, и восстановить нечего. Итог: дни простоя и потерянные данные клиентов. С двухминутным дампом перед миграцией это была бы мелкая неприятность.

Что делать (по шагам)

  1. Перед любым необратимым (миграция/деплой/удаление) — снапшот/ветка/дамп БД здесь и сейчас:
# дамп 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
  1. Соблюдай правило 3-2-1: 3 копии данных, на 2 разных носителях, 1 копия — вне площадки (другой регион/облако).
  2. Автоматизируй бэкап (cron/таймер) и шифруй копии, если в них ПД/секреты.
  3. Регулярно проверяй восстановление — разворачивай дамп на тестовом окружении. Бэкап без теста = лотерея.
# раз в N дней: восстановить дамп в тестовую БД и убедиться, что данные на месте
createdb restore_test && pg_restore -d restore_test --clean latest.dump
  1. Защити бэкапы от шифровальщика: оффлайн/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-тест в календаре.