# Бэкапы, из которых получается восстановиться

> Что копировать кроме базы, сколько хранить, где держать копии и как устроить учения, после которых восстановление перестаёт быть импровизацией.

Published: 2025-09-14 · Source: https://subxcat.com/ru/articles/backups-that-restore · Author: SUBXCAT

Почти у всех есть бэкапы. Намного реже есть уверенность, что из них получится собрать работающий продукт, а не просто базу, которая где-то запустилась. Бэкап проверяется только одним способом — восстановлением, и об этом стоит подумать до того, как оно понадобится.

## Два вопроса, с которых всё начинается

Прежде чем выбирать инструменты, ответь на два вопроса:

- Сколько данных ты готов потерять? Час, сутки, ничего?
- Сколько продукт может лежать, пока ты восстанавливаешься?

От первого ответа зависит частота копий. Ежесуточный дамп означает, что в худшем случае пропадёт день заказов и регистраций. Если это неприемлемо, нужно восстановление на момент времени: база непрерывно пишет журнал изменений, и откатиться можно на любую минуту. У большинства управляемых баз это включается в настройках.

От второго ответа зависит, насколько подробно расписано восстановление. Если продукт может лежать полдня, хватит понятной инструкции. Если час — нужна инструкция, которую уже кто-то прошёл по шагам.

## Что копировать кроме базы

База — самое очевидное, но не единственное:

- Загруженные файлы. Аватары, документы, вложения обычно лежат в объектном хранилище, и дамп базы их не содержит.
- Конфигурация и секреты. Без переменных окружения восстановленное приложение не запустится, а вспоминать их по памяти — плохая идея. Храни их в менеджере паролей или хранилище секретов, у которого есть своя история.
- DNS-записи. Их немного, но если аккаунт регистратора недоступен, восстановить почтовые записи наизусть почти невозможно.
- Описание инфраструктуры: какие сервисы, в каком регионе, с какими настройками.

## Файлы и база должны совпадать

Частая ловушка: база восстановлена на вчерашний вечер, а файлы — на сегодняшнее утро, или наоборот. В базе остаются ссылки на файлы, которых нет, а в хранилище — файлы, на которые никто не ссылается. Первое ломает страницы, второе просто занимает место.

Помогает версионирование в объектном хранилище: удалённый или перезаписанный файл не пропадает сразу, и его можно вернуть на нужный момент. После восстановления полезно прогнать скрипт, который проверяет, что каждая ссылка из базы ведёт на существующий файл.

## Сколько хранить

Разумная схема для раннего продукта: ежедневные копии за последние пару недель, еженедельные за пару месяцев, ежемесячные за год. Длинный хвост нужен не для аварий, а для ситуаций «мы заметили через месяц, что импорт испортил половину записей».

Если продукт хранит персональные данные, срок хранения копий стоит записать в политику конфиденциальности. Удалённый по просьбе пользователь продолжает жить в бэкапах, и честнее об этом сказать, чем делать вид, что его там нет.

## Где держать копии

Копия, которая лежит в том же аккаунте, что и база, защищает от сбоя диска, но не от ошибки человека с правами администратора и не от взлома этого аккаунта. Хотя бы одна копия должна лежать отдельно: в другом аккаунте или у другого провайдера, с ключами, которыми нельзя удалить её из основного окружения. Копии шифруются, а ключ шифрования хранится не рядом с ними.

## Учения

Раз в квартал восстанавливай продукт целиком в отдельное окружение и записывай шаги. На учениях стоит проверить:

- сколько времени заняло восстановление от начала до работающего входа;
- что в копии есть данные за последние сутки;
- что файлы открываются, а не только перечислены;
- можно ли восстановить одну удалённую запись, не откатывая всю базу.

Последний пункт нужен чаще полной аварии: кто-то случайно удалил проект клиента, и вернуть надо только его.

## Бэкап, который тихо перестал делаться

Задача резервного копирования ломается так же, как любая другая, только молча. Нужно уведомление не об ошибке, а об отсутствии успеха: если за сутки не появилось новой копии, кто-то должен об этом узнать.

SUBXCAT может настроить копирование и провести первые учения вместе с командой, чтобы дальше они шли по написанной инструкции.
