Резервное копирование ClickHouse без Backup Wrapper

В данном разделе описано, как производить резервное копирование СУБД ClickHouse с помощью утилиты clickhouse-backup.

Дополнительно с возможностями утилиты clickhouse-backup вы можете ознакомиться в официальной документации.
Все действия необходимо производить на физическом сервере или виртуальной машине, на которых развернута база данных PostgreSQL.

Требования

  • Актуальная версия базы данных ClickHouse.

  • S3-совместимое хранилище для хранения резервных копий, например: MinIO, AWS S3, Yandex Object Storage.

Установка и настройка утилиты clickhouse-backup

Установка утилиты состоит из следующих этапов:

Установка утилиты clickhouse-backup

Чтобы установить утилиту clickhouse-backup:

  1. Скачайте и разархивируйте дистрибутив программы Backup Wrapper, выполнив команды:

    wget https://files.rvision.ru/platform/6dfaa56c92a665a855a9/backup-wrapper-1.0.0.tar.gz
    tar -xzvf backup-wrapper-1.0.0.tar.gz
    cd backup-wrapper-1.0.0
    В архиве программы Backup Wrapper содержится бинарный файл актуальной версии утилиты clickhouse-backup. Рекомендуется использовать данный вариант установки.
  2. Установите утилиту clickhouse-backup, выполнив команды:

    mv clickhouse-backup /usr/local/bin/
    chmod +x /usr/local/bin/clickhouse-backup

Также вы можете установить утилиту clickhouse-backup из официального источника, выполнив команды:

curl -L https://github.com/Altinity/clickhouse-backup/releases/download/<version>/clickhouse-backup-linux-amd64.tar.gz | tar xz
mv clickhouse-backup /usr/local/bin/
chmod +x /usr/local/bin/clickhouse-backup

Здесь:

  • <version> — версия утилиты clickhouse-backup, например, v2.6.5.

Настройка конфигурации clickhouse-backup

Чтобы настроить конфигурацию clickhouse-backup:

  1. Создайте файл config.yml в директории /etc/clickhouse-backup/ со следующим содержимым:

    general:
      disable_progress_bar: true
      backups_to_keep_local: 0
      backups_to_keep_remote: 0
      remote_storage: s3
    
    clickhouse:
      host: localhost
      port: 9000
      username: <username>
      password: "<password>"
      skip_tables:
        - system.*
        - INFORMATION_SCHEMA.*
    
    s3:
      access_key: "<access_key>"
      secret_key: "<secret_key>"
      bucket: "backups"
      endpoint: "<aws_endpoint>"
      region: "<aws_region>"
      path: "clickhouse/prod"
      force_path_style: true
      compression_format: tar
      compression_level: 1

    Здесь:

    • <username> — имя пользователя для работы с резервными копиями.

    • <password> — пароль пользователя для работы с резервными копиями.

    • <access_key> — идентификатор ключа доступа к S3-совместимому хранилищу.

    • <secret_key> — секретный ключ доступа к S3-совместимому хранилищу.

    • <aws_endpoint> — URL-адрес для подключения к S3-совместимому хранилищу, например, http://minio:9000.

    • <aws_region> — код региона, в котором развернуты и выполняются ваши сервисы и функции AWS, например, ru-central1-a.

  2. Измените права доступа к файлу config.yml, выполнив команду:

    chmod 600 /etc/clickhouse-backup/config.yml

Резервное копирование ClickHouse

Чтобы настроить резервное копирование:

  1. Создайте файл ch-backup.sh в директории usr/local/bin/ со следующим содержимым:

    #!/bin/bash
    set -euo pipefail
    
    LOG="/var/log/ch-backup.log"
    exec >> "$LOG" 2>&1
    
    echo "=== $(date '+%Y-%m-%d %H:%M:%S') Starting backup ==="
    
    BACKUP_NAME="backup-$(date +%Y-%m-%dT%H-%M-%S)"
    DAY_OF_WEEK=$(date +%u)  # 1=Mon, 7=Sun
    
    # Определяем тип бэкапа.
    if [ "$DAY_OF_WEEK" -eq 1 ]; then
        echo "Creating FULL backup: $BACKUP_NAME"
        clickhouse-backup create_remote "$BACKUP_NAME"
    else
        # Находим последнюю полную резервную копию (без --diff-from-remote в metadata).
        LAST_FULL=$(clickhouse-backup list remote --json 2>/dev/null | \
            jq -r '[.[] | select(.required == "")] | sort_by(.creation_date) | last | .name // empty')
    
        if [ -z "$LAST_FULL" ]; then
            echo "No FULL backup found, creating FULL: $BACKUP_NAME"
            clickhouse-backup create_remote "$BACKUP_NAME"
        else
            echo "Creating DIFF backup from $LAST_FULL: $BACKUP_NAME"
            clickhouse-backup create_remote "$BACKUP_NAME" --diff-from-remote="$LAST_FULL"
        fi
    fi
    
    echo "=== $(date '+%Y-%m-%d %H:%M:%S') Backup completed ==="
  2. Измените права доступа к файлу ch-backup.sh, выполнив команду:

    chmod +x /usr/local/bin/ch-backup.sh
  3. Настройте планировщик Cron для автоматизации резервного копирования, выполнив команду:

    echo '<cron_expression> root /usr/local/bin/ch-backup.sh' | sudo tee /etc/cron.d/ch-backup

    Здесь:

    • <cron_expression> — cron-выражение, определяющее расписание запусков clickhouse-backup. Например, 0 3 * * * — резервные копии будут создаваться ежедневно в 03:00.

      Чтобы составить cron-выражение, можно воспользоваться генератором, например, crontab.guru.

Вы можете проверить список созданных резервных копий, выполнив команду:

clickhouse-backup list remote

Восстановление из резервной копии

Восстановление из резервной копии описано в разделе Восстановление из резервных копий.

Была ли полезна эта страница?

Обратная связь