Дамп базы сохранился, архив файлов распаковывается, но после восстановления у публикаций нет изображений. Возможная причина — компоненты скопированы в разное время: база уже содержит ссылку на загрузку, которой ещё нет в архиве.
Чтобы сделать согласованный бэкап базы данных и файлов сайта, нужно сохранить их общее состояние. Для небольшого проекта понятный способ — временно остановить все изменения, дождаться завершения текущих операций и скопировать компоненты в одном окне; близкие даты файлов сами по себе согласованность не доказывают.
1. Определите, что должно совпасть
Составьте карту связей: какие записи базы указывают на файлы и где эти файлы лежат. Помимо каталога загрузок это могут быть документы в объектном хранилище, вложения из интеграций и отдельное хранилище медиа.
Разделите данные на три группы:
- Незаменимые: оригиналы загрузок, документы и записи, связывающие их с объектами сайта.
- Версионные: код, схема базы и конфигурация, совместимые с выбранной копией.
- Восстанавливаемые: кэш, миниатюры или поисковый индекс, если для них действительно есть проверенный способ пересоздания.
Не исключайте каталог cache, пока не убедитесь, что там нет единственных экземпляров данных. Секретную конфигурацию восстанавливают через защищённый процесс.
2. Найдите все источники записи
Заглушка «технические работы» останавливает посетителей лишь в той мере, в какой это предусмотрено приложением. Она не обязательно блокирует административную панель, API, cron, фоновые очереди, импорт, вебхуки и прямую загрузку в хранилище.
Перед резервированием:
- Согласуйте окно и запретите новые операции, меняющие базу или файлы.
- Приостановите фоновые задания, импорты, удаления и обработку очередей штатным способом.
- Дождитесь завершения уже начатых загрузок и транзакций; проверьте активные задания по журналам и панели процессов.
- Остановите выкладку кода и миграции схемы до завершения копирования.
Для входящих событий заранее предусмотрите сохранение и повторную обработку на стороне интеграции. Простое отключение вебхуков может потерять события, а принудительное завершение загрузки — оставить частичный файл: это не способ получить согласованное состояние.
3. Выберите способ копирования
Если допустимо окно без изменений
При подтверждённом отсутствии записей создайте дамп базы, копию незаменимых файлов и отметьте версию кода. Компоненты могут копироваться последовательно: важно, чтобы общее состояние между этими шагами не менялось.
Сохраняйте запрет изменений до завершения обоих компонентов. После успешного создания проверьте коды завершения заданий и состав комплекта, затем возобновите обработчики и приём новых операций; глубокую проверку выполняйте на стенде.
Если копирование файлов слишком долгое, администратор может предварительно перенести основную массу, а в остановленном окне выполнить финальную синхронизацию. Она должна корректно учитывать изменения и удаления; один предварительный проход живого каталога не заменяет финальный.
Если простой недопустим
Нужен согласованный механизм приложения или системы резервирования: например, привязка снимка базы к определённым версиям файлов. У каждого изменяемого хранилища должна быть понятная точка восстановления, а у всего комплекта — проверяемая связь между этими точками.
В MariaDB режим mariadb-dump --single-transaction даёт согласованный срез таблиц InnoDB, но не фиксирует внешние файлы. Он не гарантирует тот же результат для MyISAM и MEMORY; во время дампа также нельзя менять структуру копируемых таблиц. Ограничения описаны в руководстве mariadb-dump.
Снимок диска работающего сервера тоже не равнозначен согласованной копии приложения. Например, Google Cloud требует подготовки приложения: завершения транзакций, приостановки записывающих процессов и сброса буферов. Снимок диска не охватывает автоматически отдельную БД или объектное хранилище.
Не копируйте каталог работающей СУБД обычным архиватором вместо штатного бэкапа базы. Если нельзя остановить изменения и нет проверенного механизма согласования, комплект пока следует считать непроверенным.
4. Свяжите части одним манифестом
Сохраните рядом с закрытым комплектом короткую опись:
- общий идентификатор запуска;
- время и часовой пояс начала и конца окна без изменений;
- способ получения дампа и файлового среза;
- точные имена архивов, снимков или версии объектов;
- версии приложения и схемы базы;
- исключения, ошибки и контрольные суммы завершённых файлов.
Одинаковая дата в названиях архивов — только удобная метка. Проверка целостности бэкапа подтверждает сохранность байтов, но не согласованность записей с загрузками.
5. Проверьте связи после восстановления
На изолированном стенде отключите реальные письма, платежи, вебхуки и фоновые отправки. Восстановите весь выбранный комплект, затем проверьте несколько объектов около границы копирования: новую загрузку, заменённое вложение и удалённый документ.
У записи должен открываться именно ожидаемый файл, а не другая версия с тем же именем. Проверьте также отсутствие ссылок на удалённые объекты; выборочная проверка полезна, но не доказывает полноту всей базы. Общий порядок развёртывания описан в инструкции по пробному восстановлению.
Если уже остались только разновременные копии, сохраните оригиналы и разбирайте расхождения на стенде. Не объединяйте «самую свежую базу» и «самые свежие файлы» поверх рабочего сайта: понадобится подтвердить связи по версиям объектов, журналам или более раннему согласованному комплекту.
Web-Puls помогает наблюдать за доступностью публичного сайта после восстановления, но HTTP-проверка не проверяет согласованность бэкапа. Если безопасный комплект собрать не удаётся, отправьте заявку на диагностику: укажите сайт, способ резервирования и найденное расхождение без архивов и секретов; команда оценит задачу и согласует формат и стоимость работ.