Learning Platform
Глоссарий Troubleshooting
Урок 15.05 · 30 мин
Продвинутый
backuprestoreBACKUP SQLclickhouse-backupS3incremental backupencryptionbase_backup

Резервное копирование: 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'
);
WARNING

В примерах используются 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'
);
TIP

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;
WARNING

При восстановлении на 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 BACKUPclickhouse-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

Ключевые выводы

  1. Нативный BACKUP ... TO S3() доступен с ClickHouse 22.x и не требует внешних инструментов. Подходит для простых бэкапов и ad-hoc операций.
  2. SETTINGS base_backup = S3(...) активирует инкрементальный режим: ClickHouse копирует только изменённые MergeTree-части относительно базового бэкапа, значительно сокращая объём.
  3. При восстановлении на production не восстанавливайте целиком базу данных — это перезапишет RBAC-таблицы (system.users, system.roles). Восстанавливайте отдельные таблицы с данными.
  4. clickhouse-backup предпочтителен для production-автоматизации: поддерживает GPG/KMS-шифрование, cron-расписание и более тонкий контроль над Delta-инкрементальными бэкапами.
  5. Никогда не встраивайте реальные S3-ключи в SQL-запросы: они попадают в system.query_log. Используйте Named Collections или IAM Instance Profile.
PITR в PostgreSQL: base backup, WAL archiving и point-in-time recovery Reliability в data systems: RTO, RPO и disaster recovery planning

Проверьте понимание

Результат: 0 из 0
Прикладной
Вопрос 1 из 3. Нужно создать инкрементальный SQL-бэкап таблицы `default.events`, ссылаясь на существующий полный бэкап по адресу `s3://bucket/backups/full_2026_04_10`. Какой правильный синтаксис?

Закончили урок?

Отметьте его как пройденный, чтобы отслеживать свой прогресс

Войдите чтобы оценить урок

Прогресс модуля
0 из 12