Перейти к основному содержанию
Резервное копирование снимков — это облегчённый режим резервного копирования для cloud-native движков таблиц. Вместо копирования данных он записывает в ClickHouse Keeper узлы блокировки для каждой части. Эти блокировки не позволяют серверу удалять части в объектном хранилище, на которые ссылается снимок, пока этот снимок хранится. Затем резервная копия сохраняет ссылки на объекты в хранилище вместо физического копирования данных, поэтому снимок создаётся быстро независимо от размера таблицы. Облегчённый режим применяется к таблицам SharedMergeTree, SharedSet и SharedJoin. Для всех остальных типов движков — например, Log или Memory — резервное копирование автоматически возвращается к стандартному режиму с копированием данных.

Создание снимка

Для резервного копирования снимков используется стандартная команда BACKUP с параметром experimental_lightweight_snapshot = true. Параметр id обязателен — он задаёт имя снимка и используется для обращения к нему в командах разблокировки и обсервабилити:
Команда возвращает id и status, а id можно использовать для отслеживания операции в system.backups. Создайте резервную копию отдельной таблицы в S3:
Создайте резервную копию всей базы данных:
Создайте резервную копию всех таблиц, кроме одной:
Те же команды подходят и для Azure Blob Storage:

Восстановление в тот же сервис

Поскольку снимок хранит ссылки на файлы в Объектном хранилище, а не копии данных, для восстановления в новый или другой сервис ClickHouse нужен доступ к исходному Объектному хранилищу. Поэтому межсервисное восстановление через SQL не поддерживается — оно доступно только через интерфейс. Через SQL можно восстановить снимок в тот же сервис из бакета с внешней резервной копией, используя snapshot_from_current_service = 1. В этом случае объекты считываются напрямую через диск пункта назначения, а не через механизм чтения удалённого снимка:
Предложение AS выполняет восстановление в таблицу с новым именем, сохраняя исходную таблицу. Чтобы перезаписать исходную таблицу, сначала удалите её:

Разблокировка снимка

Каждый снимок удерживает блокировки в ClickHouse Keeper, из-за которых файлы объектного хранилища, на которые он ссылается, не удаляются сборщиком мусора. После завершения восстановления — или когда снимок больше не нужен — разблокируйте его, чтобы снять эти блокировки. Есть два варианта: разблокировка на уровне системы, которая сразу снимает все блокировки снимка, и разблокировка на уровне отдельной таблицы, которая снимает блокировку только для одной таблицы, оставляя остальную часть снимка без изменений. Разблокировка на уровне системы — снимает все блокировки снимка:
Разблокировка для отдельной таблицы — снимает блокировку только для одной таблицы:
Предложение FROM необязательно, если пункт назначения снимка был сохранён в Keeper при создании (это видно в столбце info таблицы system.snapshot_locks):
После разблокировки соответствующая строка исчезает из system.snapshot_locks, а части, на которые больше не ссылаются другие снимки, пропадают из system.snapshot_parts.

Обсервабилити

system.backups

Все операции со снимками появляются в system.backups наряду с обычными операциями резервного копирования и восстановления. Выполните запрос к этой таблице по заданному id (или по UUID, возвращённому командой):

system.snapshot_locks

system.snapshot_locks показывает зафиксированные снимки, которые в данный момент зарегистрированы в Keeper. Когда снимок фиксируется, в Keeper создаётся узел по пути /clickhouse/snapshot/committed/{snapshot_id}. Перед удалением любой части данных сервер проверяет, не удерживает ли какой-либо зафиксированный снимок блокировку на эту часть. Если удерживает, удаление не выполняется. Блокировка сохраняется, пока вы явно не разблокируете снимок.
Каждая строка соответствует одному зафиксированному снимку. Если вы видите блокировки для снимков, у которых больше нет действительного пункта назначения резервной копии, выполните SYSTEM UNLOCK SNAPSHOT, чтобы удалить их. Чтобы проверить, существует ли блокировка для конкретного снимка:

system.snapshot_parts

system.snapshot_parts показывает части данных, которые в данный момент закреплены как минимум одной блокировкой снимка. Для каждой заблокированной части в Keeper существует узел по пути /clickhouse/snapshot/{table_uuid}/{part_name}, содержащий размер части в сжатом и несжатом виде. Эта таблица читает эти узлы, чтобы показать, какие части в настоящее время защищены от удаления.
На части с snapshots_size > 1 ссылаются несколько снимков, и они не будут удалены из Объектного хранилища, пока не будут разблокированы все удерживающие их снимки. Чтобы проверить общий объём закреплённого хранилища:
Чтобы найти части, заблокированные снимком, но уже удалённые или больше не являющиеся активными на сервере — то есть данные, которые сохраняются в Объектном хранилище исключительно из-за блокировок снимка:
Это полезно для оценки дополнительных затрат на хранение снимков после изменения или удаления исходных данных.

Настройки сервера

Следующие параметры конфигурации сервера управляют поведением снимков. Они задаются в файле конфигурации сервера, а не в SQL.
Последнее изменение 29 июня 2026 г.