Наличие архива ClickHouse еще не доказывает возможность восстановления. Копирование файлов работающего MergeTree обычным файловым инструментом может захватить части в несогласованном состоянии, пропустить external disk или не сохранить DDL. Проверяемый бэкап должен иметь manifest, завершенный статус и регулярный restore-тест.
Уточните используемый механизм backup и сравните manifest с системными таблицами исходного кластера. Проверьте все database/table, политики storage, реплики, текущие mutations и итог команды. Не удаляйте старую рабочую копию до пробного восстановления новой.
Что проверить в первую очередь
Начните с воспроизводимого сценария: зафиксируйте время сбоя, идентификатор объекта, версию приложения или конфигурации и последнее известное рабочее состояние. Не меняйте несколько параметров одновременно. Один контролируемый шаг должен подтверждать или исключать одну гипотезу, иначе временное исчезновение симптома легко принять за исправление. Перед работой с данными и настройками подготовьте резервную копию и понятный способ отката.
- Зафиксируйте версию ClickHouse и точную команду или инструмент backup.
- Проверьте статус завершения, warnings и список включенных таблиц.
- Сравните размеры и количество строк по partition на момент snapshot.
- Уточните, используются ли S3, отдельные disks, materialized views и dictionaries.
Почему возникает проблема
Внешний симптом часто появляется не в том компоненте, где возникла первичная ошибка. Интерфейс может показывать неверное состояние из-за backend, очереди, кеша, прав доступа или внешнего API. Полезно проследить данные от источника до результата и найти первую точку расхождения. Это надежнее, чем исправлять последнее сообщение об ошибке или бесконечно перезапускать сервис.
- Файлы копируются без штатного snapshot, пока идут merge и mutation.
- Шаблон include/exclude пропускает новую базу или таблицу.
- Данные находятся на нескольких disks, а backup читает только default path.
- Реплика отстает или содержит незавершенную fetch/mutation.
- Архив загрузился в хранилище частично, но задача отмечена успешной внешним cron.
Пошаговая диагностика
Диагностику проводите на тестовой записи или отдельном окружении. В журналах скрывайте токены, пароли, персональные данные и содержимое документов. Для каждого шага сохраняйте измеримый результат: код ответа, версию записи, идентификатор события, состояние процесса, контрольную сумму или время выполнения. Сравнение одной и той же операции до и после изменения помогает отделить причину от совпадения.
- Просмотрите manifest и список объектов внутри backup.
- Снимите system.parts, system.tables и system.mutations для сравнения.
- Проверьте system.disks и storage policies каждой крупной таблицы.
- Сравните контрольные агрегаты count/sum по критичным partition.
- Разверните копию в изолированном ClickHouse и выполните реальные запросы.
Почему restore-тест важнее размера архива
Архив правильного размера может не содержать DDL, прав, отдельных partitions или данных на внешнем диске. Только восстановление подтверждает совместимость формата, доступы и полноту зависимостей.
- Manifest фиксирует набор объектов и частей конкретной копии.
- DDL нужен для движков, partition key, codecs, policies и views.
- Данные distributed-таблицы могут находиться на шардах, а не на узле запуска backup.
- Реплицируемые таблицы требуют понимания, что восстанавливается: локальные parts или логика репликации.
- Проверка должна включать запросы приложения, а не только ATTACH TABLE.
Как исправить проблему
Разбейте исправление на небольшие обратимые изменения. Сначала устраните подтвержденную причину, затем повторите исходный сценарий и проверьте соседние функции. Массовое обновление данных запускайте на ограниченной выборке с отчетом и только после сверки расширяйте на весь объем. Не отключайте авторизацию, валидацию, шифрование или проверку сертификатов ради быстрого исчезновения ошибки.
- Используйте штатный BACKUP или совместимый инструмент с поддержкой версии и storage.
- Явно включите базы, DDL, RBAC и внешние disks по требованиям восстановления.
- Останавливайте или дожидайтесь критичных mutations согласно выбранной стратегии.
- Проверяйте checksum/manifest после загрузки в удаленное хранилище.
- Автоматизируйте периодический restore в изолированное окружение с контрольными запросами.
Безопасный порядок внедрения
- Сохраните затрагиваемые данные, конфигурацию и текущие журналы, заранее проверив реальный способ восстановления.
- Повторите проблему на тестовом объекте без реальных списаний, рассылок и необратимых изменений клиентских данных.
- Зафиксируйте изменение в системе контроля версий или журнале работ вместе с причиной и планом отката.
- Проведите тест на нормальном сценарии, ошибочном вводе, повторном запросе, параллельной операции и временной недоступности зависимости.
- После выпуска наблюдайте логи, метрики и полный пользовательский путь, а не только один успешный запрос.
Как проверить результат
Разовый успешный тест недостаточен. Повторите операцию, проверьте крайние значения, одновременные действия и восстановление после перезапуска или временного сбоя. Для важного сценария сохраните автоматический тест либо короткий регрессионный чек-лист. Итог должен подтверждаться не только интерфейсом, но и состоянием базы, очереди, внешнего сервиса и журналом действий.
- Восстановлены все ожидаемые базы, таблицы, views и права.
- Контрольные агрегаты по критичным partition совпадают со snapshot-значениями.
- Приложение выполняет основные запросы на восстановленной копии.
- Отчет содержит duration, размер, manifest, checksum и результат restore-теста.
Типичные ошибки при исправлении
- Копировать /var/lib/clickhouse обычным rsync на работающем сервере без snapshot.
- Считать success exit code загрузчика доказательством полноты данных.
- Хранить копию в том же регионе и под теми же учетными данными.
- Никогда не проверять восстановление до реальной аварии.
Как предотвратить повторение
Профилактика строится вокруг явных контрактов, повторяемых релизов и наблюдаемости. Система должна не только работать сейчас, но и позволять быстро увидеть нарушение правила при следующем обновлении, росте нагрузки или сбое внешнего сервиса. Проверки полезно автоматизировать там, где ошибка уже привела к потерям времени, данных или заявок.
- Ведите каталог копий с immutable retention и отдельными правами.
- Контролируйте время последнего успешного backup и restore-test.
- Пересматривайте scope после появления новой базы, диска или шарда.
- Документируйте RPO/RTO и точную последовательность восстановления.
Что подготовить для технического разбора
- Описание ожидаемого и фактического поведения с точной последовательностью действий.
- Время проблемы, идентификатор тестового объекта и версии затронутых компонентов.
- Фрагменты журналов до и после ошибки без секретов и персональных данных.
- Перечень последних изменений и уже выполненных проверок.
- Безопасный доступ к тестовой среде либо способ воспроизвести сбой без влияния на клиентов.
Частые вопросы
Можно ли делать бэкап только одной реплики?
Можно при здоровой и синхронизированной реплике и понятной архитектуре, но проверьте данные всех шардов и задержку репликации.
Нужно ли останавливать ClickHouse?
Штатные механизмы позволяют согласованный online backup, но файловое копирование без snapshot требует другой процедуры.
Когда нужна помощь специалиста
Если резервная копия ClickHouse неполная или ни разу не восстанавливалась, я могу проверить scope, storage policies и manifest, настроить безопасный backup и автоматический restore-тест.