Резервное копирование: BACKUP/RESTORE и clickhouse-backup
ClickHouse поддерживает два подхода к резервному копированию: нативный SQL-синтаксис BACKUP/RESTORE (доступен с 22.x) и внешний инструмент clickhouse-backup от Altinity. Нативный подход проще для базовых use-cases, clickhouse-backup добавляет шифрование, автоматизацию и более тонкий контроль над инкрементальными бэкапами.
Нативный SQL: BACKUP TABLE / DATABASE
Полный бэкап таблицы в S3
-- Полный бэкап таблицы в S3
BACKUP TABLE default.events TO S3(
'https://my-bucket.s3.amazonaws.com/backups/events_full_2026_04_17',
'access_key',
'secret_key'
);
В примерах используются placeholder-значения 'access_key' и 'secret_key'. В production используйте Named Collections (Модуль 11) или IAM-роли для хранения S3-учётных данных — не встраивайте реальные ключи в SQL-запросы, которые попадут в system.query_log.
Полный бэкап базы данных
-- Бэкап всей базы данных
BACKUP DATABASE default TO S3(
'https://my-bucket.s3.amazonaws.com/backups/default_full_2026_04_17',
'access_key',
'secret_key'
);
Инкрементальный бэкап: SETTINGS base_backup
Ключевая возможность нативного BACKUP — инкрементальные бэкапы через SETTINGS base_backup. ClickHouse сравнивает части (parts) текущей таблицы с базовым бэкапом и копирует только изменения.
-- Инкрементальный бэкап (ссылается на базовый)
BACKUP DATABASE default TO S3(
'https://my-bucket.s3.amazonaws.com/backups/default_incr_2026_04_17_12h',
'access_key',
'secret_key'
)
SETTINGS base_backup = S3(
'https://my-bucket.s3.amazonaws.com/backups/default_full_2026_04_17',
'access_key',
'secret_key'
);
SETTINGS base_backup = S3(...) ссылается на предыдущий полный бэкап. ClickHouse автоматически определяет изменённые части и копирует только их. Инкрементальный бэкап содержит ссылки на неизменённые части из базового — при восстановлении достаточно указать инкрементальный, базовый подтянется автоматически.
RESTORE: восстановление
Восстановление таблицы
-- Восстановить таблицу из бэкапа
RESTORE TABLE default.events FROM S3(
'https://my-bucket.s3.amazonaws.com/backups/events_full_2026_04_17',
'access_key',
'secret_key'
);
Восстановление базы данных с исключениями
-- Восстановить базу, исключив RBAC-таблицы
RESTORE DATABASE default FROM S3(
'https://my-bucket.s3.amazonaws.com/backups/default_incr_2026_04_17_12h',
'access_key',
'secret_key'
)
SETTINGS
allow_non_empty_tables = true;
При восстановлении на production-сервер всегда исключайте RBAC-таблицы (system.users, system.roles, system.grants, system.row_policies, system.quotas), чтобы не перезаписать текущих пользователей и настройки доступа. Для точечного контроля восстанавливайте отдельные таблицы вместо всей базы.
Инкрементальный RESTORE: бэкап-цепочка
-- При восстановлении из инкрементального бэкапа
-- ClickHouse автоматически разрешает всю цепочку до базового
RESTORE DATABASE default FROM S3(
'https://my-bucket.s3.amazonaws.com/backups/default_incr_2026_04_17_12h',
'access_key',
'secret_key'
);
Проверка статуса восстановления (асинхронный режим):
SELECT status, error FROM system.backups WHERE id = '...'
FORMAT PrettyCompact;
clickhouse-backup (Altinity)
clickhouse-backup — внешний инструмент от Altinity. Поддерживает S3/GCS/Azure хранилища, инкрементальные бэкапы на уровне Delta-частей, GPG-шифрование, KMS-ключи для S3.
Основные команды
# Создать полный бэкап
clickhouse-backup create --storage s3 full_backup_2026_04_17
# Создать инкрементальный (указать базовый)
clickhouse-backup create --diff-from-remote full_backup_2026_04_17 \
--storage s3 incr_backup_2026_04_17_12h
# Загрузить бэкап в S3
clickhouse-backup upload full_backup_2026_04_17
# Восстановить с S3
clickhouse-backup download full_backup_2026_04_17
clickhouse-backup restore full_backup_2026_04_17
Шифрование (GPG)
# /etc/clickhouse-backup/config.yml (фрагмент)
s3:
bucket: my-clickhouse-backups
region: us-east-1
access_key: 'access_key'
secret_key: 'secret_key'
compression_format: tar
compression_level: 1
general:
remote_storage: s3
# GPG шифрование через симметричный ключ
backups_to_keep_remote: 7
# Включить шифрование через переменную среды:
# CLICKHOUSE_BACKUP_GPG_PASSWORD=secure_passphrase
Сравнение подходов
| Критерий | Нативный SQL BACKUP | clickhouse-backup (Altinity) |
|---|---|---|
| Синтаксис | SQL (BACKUP/RESTORE) | CLI (create/upload/download/restore) |
| Инкрементальный | SETTINGS base_backup=S3(...) | --diff-from-remote |
| Шифрование | Пароль через SETTINGS password='...' (ZIP) | GPG / KMS bucket key |
| Автоматизация | Через SQL + планировщик | Встроенная cron-поддержка |
| Объекты хранения | S3, AzureBlobStorage, локальный диск | S3, GCS, Azure, SFTP |
| Репликация | Не учитывает; бэкапит данные как есть | Бэкапит с любой реплики |
| Зависимости | Встроен в ClickHouse | Отдельная бинарный файл |
| Лучший выбор для | Простые бэкапы, однократные операции | Production-автоматизация, шифрование, scheduled jobs |
Ключевые выводы
- Нативный
BACKUP ... TO S3()доступен с ClickHouse 22.x и не требует внешних инструментов. Подходит для простых бэкапов и ad-hoc операций. SETTINGS base_backup = S3(...)активирует инкрементальный режим: ClickHouse копирует только изменённые MergeTree-части относительно базового бэкапа, значительно сокращая объём.- При восстановлении на production не восстанавливайте целиком базу данных — это перезапишет RBAC-таблицы (
system.users,system.roles). Восстанавливайте отдельные таблицы с данными. clickhouse-backupпредпочтителен для production-автоматизации: поддерживает GPG/KMS-шифрование, cron-расписание и более тонкий контроль над Delta-инкрементальными бэкапами.- Никогда не встраивайте реальные S3-ключи в SQL-запросы: они попадают в
system.query_log. Используйте Named Collections или IAM Instance Profile.