Перейти к основному содержанию
В этом разделе в общих чертах рассматриваются резервное копирование и восстановление в ClickHouse. Более подробное описание каждого способа резервного копирования см. на страницах, посвящённых конкретным способам, на боковой панели.

Введение

Хотя репликация обеспечивает защиту от аппаратных сбоев, она не защищает от человеческих ошибок: случайного удаления данных, удаления не той таблицы или таблицы не в том кластере, а также ошибок в программном обеспечении, которые приводят к некорректной обработке данных или их повреждению. Во многих случаях такие ошибки затронут все реплики. В ClickHouse есть встроенные механизмы защиты, предотвращающие некоторые типы ошибок; например, по умолчанию нельзя просто удалить таблицы с движком семейства MergeTree, содержащие более 50 ГБ данных. Однако эти механизмы защиты не охватывают все возможные случаи, и проблемы всё равно могут возникнуть. Чтобы эффективно снизить риск человеческих ошибок, следует заранее тщательно подготовить стратегию резервного копирования и восстановления данных. У каждой компании разные ресурсы и бизнес-требования, поэтому универсального решения для резервного копирования и восстановления ClickHouse, которое подошло бы для любой ситуации, не существует. То, что работает для одного гигабайта данных, скорее всего, не подойдёт для десятков PB данных. Существует множество возможных подходов со своими плюсами и минусами, которые представлены в этом разделе документации. Лучше использовать несколько подходов, а не ограничиваться одним, чтобы компенсировать их различные недостатки.
Имейте в виду: если вы создали резервную копию, но ни разу не пытались её восстановить, велика вероятность, что восстановление не сработает должным образом, когда оно действительно понадобится (или, по крайней мере, займёт больше времени, чем может позволить себе бизнес). Поэтому какой бы подход к резервному копированию вы ни выбрали, обязательно автоматизируйте и процесс восстановления, а также регулярно отрабатывайте его на резервном кластере ClickHouse.
На следующих страницах подробно описаны различные методы резервного копирования и восстановления, доступные в ClickHouse:
СтраницаОписание
Резервное копирование/восстановление с использованием локального диска или диска S3Описывает резервное копирование и восстановление на локальный диск или диск S3 и с них
Резервное копирование/восстановление с использованием конечной точки S3Описывает резервное копирование и восстановление через конечную точку S3
Резервное копирование/восстановление с использованием AzureBlobStorageОписывает резервное копирование и восстановление в Azure Blob Storage и из него
Альтернативные методыРассматривает альтернативные методы резервного копирования
Резервное копирование снимковОблегчённые снимки для таблиц SharedMergeTree с использованием объектного хранилища
Резервные копии могут:

Типы резервного копирования

Резервные копии бывают полными и инкрементными. Полная резервная копия — это полная копия данных, тогда как инкрементная резервная копия содержит изменения, внесенные в данные после последней полной резервной копии. Преимущество полных резервных копий в том, что это простой, независимый (от других резервных копий) и надежный способ восстановления. Однако их создание может занимать много времени и требовать много места. Инкрементные резервные копии, напротив, более эффективны как по времени, так и по занимаемому месту, но для восстановления данных необходимо, чтобы были доступны все резервные копии. В зависимости от ваших потребностей можно использовать:
  • Полные резервные копии для небольших баз данных или критически важных данных.
  • Инкрементные резервные копии для более крупных баз данных или если резервное копирование нужно выполнять часто и с минимальными затратами.
  • Оба типа, например еженедельные полные резервные копии и ежедневные инкрементные резервные копии.

Синхронное и асинхронное резервное копирование

Команды BACKUP и RESTORE также можно пометить как ASYNC. В этом случае команда резервного копирования сразу возвращает управление, а сам процесс выполняется в фоновом режиме. Если команды не помечены как ASYNC, процесс резервного копирования выполняется синхронно, и команда не завершится, пока резервное копирование не будет завершено.

Параллельные и последовательные резервные копии

По умолчанию ClickHouse позволяет выполнять резервное копирование и восстановление параллельно. Это означает, что вы можете одновременно запускать несколько операций резервного копирования или восстановления. Однако существуют настройки уровня сервера, которые позволяют запретить такое поведение. Если установить для этих настроек значение false, в кластере одновременно будет разрешено выполнять только одну операцию резервного копирования или восстановления. Это помогает избежать конкуренции за ресурсы или возможных конфликтов между операциями. Чтобы запретить параллельное резервное копирование/восстановление, можно использовать следующие настройки соответственно:
<clickhouse>
    <backups>
        <allow_concurrent_backups>false</allow_concurrent_backups>
        <allow_concurrent_restores>false</allow_concurrent_restores>
    </backups>
</clickhouse>
Значение по умолчанию для обоих параметров — true, поэтому по умолчанию параллельное резервное копирование и восстановление разрешены. Если в кластере для этих настроек задано значение false, в каждый момент времени в кластере может выполняться только одно резервное копирование или восстановление.

Сжатые и несжатые резервные копии

Резервные копии ClickHouse поддерживают сжатие с помощью параметров compression_method и compression_level. При создании резервной копии можно указать:
BACKUP TABLE test.table
  TO Disk('backups', 'filename.zip')
  SETTINGS compression_method='lzma', compression_level=3

Использование именованных коллекций

Именованные коллекции позволяют хранить пары ключ-значение (например, учетные данные S3, конечные точки и настройки), которые можно повторно использовать при операциях резервного копирования и восстановления. Они помогают:
  • Скрывать учетные данные от пользователей без прав администратора
  • Упрощать команды за счет централизованного хранения сложной конфигурации
  • Поддерживать согласованность между операциями
  • Избегать раскрытия учетных данных в журналах запросов
См. “именованные коллекции” для получения дополнительной информации.

Резервное копирование системных таблиц, таблиц логов и таблиц управления доступом

Системные таблицы также можно включать в процессы резервного копирования и восстановления, но необходимость этого зависит от вашего конкретного сценария использования. Системные таблицы, в которых хранятся исторические данные, например таблицы с суффиксом _log (например, query_log, part_log), можно включать в резервные копии и восстанавливать так же, как и любые другие таблицы. Если ваш сценарий использования предполагает анализ исторических данных — например, использование query_log для отслеживания производительности запросов или отладки проблем, — эти таблицы рекомендуется включить в стратегию резервного копирования. Однако, если исторические данные из этих таблиц не нужны, их можно исключить, чтобы сэкономить место в хранилище резервных копий. Системные таблицы, связанные с управлением доступом, такие как users, roles, row_policies, settings_profiles и quotas, особым образом обрабатываются при резервном копировании и восстановлении. Когда эти таблицы включаются в резервную копию, их содержимое экспортируется в специальный файл accessXX.txt, который содержит эквивалентные SQL-операторы для создания и настройки сущностей доступа. При восстановлении процесс восстановления интерпретирует эти файлы и повторно применяет SQL-команды, чтобы воссоздать пользователей, роли и другие конфигурации. Эта возможность гарантирует, что конфигурацию управления доступом кластера ClickHouse можно сохранить в резервной копии и восстановить как часть общей конфигурации кластера. Эта функциональность работает только для конфигураций, управляемых с помощью SQL-команд (обозначаемых как “система управления доступом и учётными записями на основе SQL”). Конфигурации доступа, определённые в файлах конфигурации сервера ClickHouse (например, users.xml), не включаются в резервные копии и не могут быть восстановлены этим методом.

Общий синтаксис

-- основные команды
BACKUP | RESTORE 
--- что включить в резервную копию/восстановить (или исключить)
TABLE [db.]table_name           [AS [db.]table_name_in_backup] |
DICTIONARY [db.]dictionary_name [AS [db.]name_in_backup] |
DATABASE database_name          [AS database_name_in_backup] |
TEMPORARY TABLE table_name      [AS table_name_in_backup] |
VIEW view_name                  [AS view_name_in_backup] |
[EXCEPT TABLES ...] |
ALL [EXCEPT {TABLES|DATABASES}...] } [,...]
--- 
[ON CLUSTER 'cluster_name']
--- куда сохранять резервную копию или откуда восстанавливать
TO|FROM 
File('<path>/<filename>') | 
Disk('<disk_name>', '<path>/') | 
S3('<S3 endpoint>/<path>', '<Access key ID>', '<Secret access key>', '<extra_credentials>') |
AzureBlobStorage('<connection string>/<url>', '<container>', '<path>', '<account name>', '<account key>')
--- дополнительные настройки
[SETTINGS ...]
[ASYNC]
См. “сводку команд”, где приведены более подробные сведения о каждой команде.

Сводка команд

Подробное описание каждой из перечисленных выше команд приведено ниже:
CommandDescription
BACKUPСоздаёт резервную копию указанных объектов
RESTOREВосстанавливает объекты из резервной копии
TABLE [db.]table_name [AS [db.]table_name_in_backup]Создаёт резервную копию или восстанавливает конкретную таблицу (её можно переименовать)
[PARTITION[S] partition_expr [,...]]Создаёт резервную копию или восстанавливает только указанные партиции таблицы
DICTIONARY [db.]dictionary_name [AS [db.]name_in_backup]Создаёт резервную копию или восстанавливает объект словаря
DATABASE database_name [AS database_name_in_backup]Создаёт резервную копию или восстанавливает базу данных целиком (её можно переименовать)
TEMPORARY TABLE table_name [AS table_name_in_backup]Создаёт резервную копию или восстанавливает временную таблицу (её можно переименовать)
VIEW view_name [AS view_name_in_backup]Создаёт резервную копию или восстанавливает представление (его можно переименовать)
[EXCEPT TABLES ...]Исключает определённые таблицы при резервном копировании базы данных
ALLСоздаёт резервную копию или восстанавливает всё (все базы данных, таблицы и т. д.). До версии 23.4 ClickHouse ALL можно было использовать только с командой RESTORE.
[EXCEPT {TABLES|DATABASES}...]Исключает определённые таблицы или базы данных при использовании ALL
[ON CLUSTER 'cluster_name']Выполняет резервное копирование или восстановление на всём кластере ClickHouse
TO|FROMНаправление: TO — для пункта назначения резервной копии, FROM — для источника восстановления
File('<path>/<filename>')Сохраняет в локальную файловую систему или восстанавливает из неё
Disk('<disk_name>', '<path>/')Сохраняет на настроенный диск или восстанавливает с него
S3('<S3 endpoint>/<path>', '<Access key ID>', '<Secret access key>')Сохраняет в Amazon S3 или S3-совместимое хранилище либо восстанавливает из них
[SETTINGS ...]Ниже приведён полный список настроек
[ASYNC]Запускает операцию асинхронно (сразу возвращает ID, который можно отслеживать)

Настройки

Общие настройки резервного копирования и восстановления
ПараметрОписаниеЗначение по умолчанию
idИдентификатор операции резервного копирования или восстановления; если не указан, используется случайно сгенерированный UUID. Если операция с таким идентификатором уже выполняется, генерируется исключение.
compression_methodУказывает метод сжатия для резервной копии. См. раздел “кодеки сжатия столбцов”
compression_levelУказывает уровень сжатия резервной копии
passwordПароль для архива резервной копии. Поддерживается только для архивов ZIP (.zip, .zipx).
base_backupПункт назначения базовой резервной копии, используемой при создании инкрементных резервных копий. Например: Disk('backups', '1.zip')
use_same_password_for_base_backupДолжен ли архив базовой резервной копии наследовать пароль из запроса.
structure_onlyЕсли включено, выполняется только резервное копирование или восстановление операторов CREATE без фактических данных таблицы.
storage_policyПолитика хранения для восстанавливаемых таблиц. См. “использование нескольких блочных устройств для хранения данных. Применимо только к команде RESTORE. Только для таблиц с движком из семейства MergeTree.
allow_non_empty_tablesПозволяет команде RESTORE TABLE вставлять данные в непустые таблицы. Это приведет к смешению уже имеющихся в таблице данных с данными, извлеченными из резервной копии. Поэтому этот параметр может вызвать дублирование данных в таблице, используйте его с осторожностью.0
backup_restore_keeper_max_retriesМаксимальное число повторных попыток для операций [Zoo]Keeper в ходе операции BACKUP или RESTORE. Значение должно быть достаточно большим, чтобы вся операция не завершилась сбоем из-за временного сбоя [Zoo]Keeper.1000
backup_restore_keeper_retry_initial_backoff_msНачальный тайм-аут задержки для операций [Zoo]Keeper во время BACKUP или RESTORE100
backup_restore_keeper_retry_max_backoff_msМаксимальный тайм-аут задержки для операций [Zoo]Keeper во время BACKUP или RESTORE5000
backup_restore_failure_after_host_disconnected_for_secondsЕсли в ходе операции BACKUP ON CLUSTER или RESTORE ON CLUSTER хост не пересоздаёт свой эфемерный узел ‘alive’ в ZooKeeper в течение указанного времени, то всё резервное копирование или восстановление считается завершившимся с ошибкой. Это значение должно превышать любое разумное время, необходимое хосту для повторного подключения к ZooKeeper после сбоя. Ноль означает отсутствие ограничения.3600
backup_restore_keeper_max_retries_while_initializingМаксимальное количество повторных попыток для операций [Zoo]Keeper при инициализации операции BACKUP ON CLUSTER или RESTORE ON CLUSTER.20
backup_restore_keeper_max_retries_while_handling_errorМаксимальное число повторных попыток для операций в [Zoo]Keeper при обработке ошибки в операции BACKUP ON CLUSTER или RESTORE ON CLUSTER.20
backup_restore_finish_timeout_after_error_secСколько времени инициатор должен ждать, пока остальные узлы отреагируют на узел ‘error’ и прекратят работу в рамках текущей операции BACKUP ON CLUSTER или RESTORE ON CLUSTER.180
backup_restore_keeper_value_max_sizeМаксимальный размер данных узла [Zoo]Keeper во время BACKUP1048576
backup_restore_batch_size_for_keeper_multiМаксимальный размер батча для мультизапроса к [Zoo]Keeper при резервном копировании или восстановлении1000
backup_restore_batch_size_for_keeper_multireadМаксимальный размер батча для запроса multiread к [Zoo]Keeper при резервном копировании или восстановлении10000
backup_restore_keeper_fault_injection_probabilityПриблизительная вероятность сбоя запроса к Keeper во время резервного копирования или восстановления. Допустимое значение — в интервале [0.0f, 1.0f]0
backup_restore_keeper_fault_injection_seed0 — для случайного начального значения генератора случайных чисел, в противном случае — значение настройки0
backup_restore_s3_retry_attemptsНастройка для Aws::Client::RetryStrategy; Aws::Client сам выполняет повторные попытки, 0 означает отсутствие повторных попыток. Применяется только при резервном копировании и восстановлении.1000
max_backup_bandwidthМаксимальная скорость чтения в байтах в секунду для конкретной резервной копии на сервере. Ноль означает отсутствие ограничений.0
max_backups_io_thread_pool_sizeClickHouse использует потоки из пула потоков ввода-вывода резервных копий для выполнения операций ввода-вывода резервных копий в S3. max_backups_io_thread_pool_size ограничивает максимальное число потоков в этом пуле.1000
max_backups_io_thread_pool_free_sizeЕсли число бездействующих потоков в пуле потоков ввода-вывода Backups превышает max_backup_io_thread_pool_free_size, ClickHouse освободит ресурсы, занимаемые бездействующими потоками, и уменьшит размер пула. При необходимости потоки могут быть созданы повторно.0
backups_io_thread_pool_queue_sizeМаксимальное количество задач, которые можно поставить в очередь в пуле потоков ввода-вывода Backups. Из-за текущей логики резервного копирования в S3 рекомендуется не ограничивать эту очередь. Примечание: значение 0 (по умолчанию) означает отсутствие ограничений.0
backup_threadsМаксимальное количество потоков для выполнения запросов BACKUP.
max_backup_bandwidth_for_serverМаксимальная скорость чтения в байтах в секунду для всех резервных копий на сервере. Ноль означает отсутствие ограничений.0
shutdown_wait_backups_and_restoresЕсли задано значение true, ClickHouse будет ждать завершения выполняющихся резервных копий и операций восстановления перед завершением работы.1
Настройки для S3
ПараметрОписаниеЗначение по умолчанию
use_same_s3_credentials_for_base_backupИспользовать ли для базовой резервной копии в S3 те же учётные данные, что и в запросе. Работает только с S3.
s3_storage_classКласс хранения, используемый для резервной копии в S3. Например: STANDARD
Настройки для Azure
НастройкаОписаниеЗначение по умолчанию
azure_attempt_to_create_containerПри использовании Azure Blob Storage: пытаться ли создать указанный контейнер, если он не существует.true

Администрирование и устранение неполадок

Команда backup возвращает id и status, и этот id можно использовать, чтобы узнать статус резервной копии. Это особенно полезно для отслеживания хода выполнения длительных резервных копий ASYNC. В примере ниже показана ошибка, возникшая при попытке перезаписать существующий файл резервной копии:
BACKUP TABLE helloworld.my_first_table TO Disk('backups', '1.zip') ASYNC
┌─id───────────────────────────────────┬─status──────────┐
│ 7678b0b3-f519-4e6e-811f-5a0781a4eb52 │ CREATING_BACKUP │
└──────────────────────────────────────┴─────────────────┘

1 row in set. Elapsed: 0.001 sec.
SELECT
*
FROM system.backups
WHERE id='7678b0b3-f519-4e6e-811f-5a0781a4eb52'
FORMAT Vertical
Row 1:
──────
id:                7678b0b3-f519-4e6e-811f-5a0781a4eb52
name:              Disk('backups', '1.zip')
status:            BACKUP_FAILED
num_files:         0
uncompressed_size: 0
compressed_size:   0
error:             Code: 598. DB::Exception: Backup Disk('backups', '1.zip') already exists. (BACKUP_ALREADY_EXISTS) (version 22.8.2.11 (official build))
start_time:        2022-08-30 09:21:46
end_time:          2022-08-30 09:21:46

1 row in set. Elapsed: 0.002 sec.
Наряду с таблицей system.backups, все операции резервного копирования и восстановления также отслеживаются в системной таблице журнала system.backup_log:
SELECT *
FROM system.backup_log
WHERE id = '7678b0b3-f519-4e6e-811f-5a0781a4eb52'
ORDER BY event_time_microseconds ASC
FORMAT Vertical
Row 1:
──────
event_date:              2023-08-18
event_time_microseconds: 2023-08-18 11:13:43.097414
id:                      7678b0b3-f519-4e6e-811f-5a0781a4eb52
name:                    Disk('backups', '1.zip')
status:                  CREATING_BACKUP
error:
start_time:              2023-08-18 11:13:43
end_time:                1970-01-01 03:00:00
num_files:               0
total_size:              0
num_entries:             0
uncompressed_size:       0
compressed_size:         0
files_read:              0
bytes_read:              0

Row 2:
──────
event_date:              2023-08-18
event_time_microseconds: 2023-08-18 11:13:43.174782
id:                      7678b0b3-f519-4e6e-811f-5a0781a4eb52
name:                    Disk('backups', '1.zip')
status:                  BACKUP_FAILED
error:                   Code: 598. DB::Exception: Backup Disk('backups', '1.zip') already exists. (BACKUP_ALREADY_EXISTS) (version 23.8.1.1)
start_time:              2023-08-18 11:13:43
end_time:                2023-08-18 11:13:43
num_files:               0
total_size:              0
num_entries:             0
uncompressed_size:       0
compressed_size:         0
files_read:              0
bytes_read:              0

2 rows in set. Elapsed: 0.075 sec.
Последнее изменение 10 июня 2026 г.