Настройка утилиты для архивирования и восстановления исторических событий
|
Полное резервное копирование базы данных ClickHouse описано в следующих разделах: Не рекомендуется настраивать резервное копирование исторических событий, если вы настроили резервное копирование по инструкциям выше. |
Для архивирования и восстановления исторических событий используется утилита clickhouse-backup. Чтобы установить и настроить ее в вашей инсталляции ClickHouse, выполните действия, указанные ниже.
| Все команды в инструкции необходимо выполнять от имени пользователя root. |
-
Откройте в браузере список релизов clickhouse-backup на GitHub.
-
Чтобы выбрать пакет релиза для установки, определите архитектуру и семейство ОС узла, где установлена СУБД ClickHouse.
-
Выполните команду для вывода архитектуры:
uname -mПример вывода командыuname -mx86_64
-
Выполните команду для вывода файла информации об ОС:
cat /etc/os-releaseПример вывода командыcat /etc/os-releaseNAME="RED OS" VERSION="MUROM (7.3.2)" PLATFORM_ID="platform:el7" ID="redos" ID_LIKE="rhel centos fedora" VERSION_ID="7.3.2" PRETTY_NAME="RED OS MUROM (7.3.2)" ANSI_COLOR="0;31" CPE_NAME="cpe:/o:redos:redos:7" HOME_URL="http://red-soft.ru/ru/main_products.html#redos" BUG_REPORT_URL="http://redos-support.red-soft.ru" EDITION="Standard"
Если параметр
ID_LIKEимеет значениеrhel centos fedora, вам нужно скачать файл clickhouse-backup с расширением.rpm, а еслиubuntu— с расширением.deb.
Согласно вышеуказанному примеру, для ОС с параметром ID_LIKE="rhel centos fedora"и архитектуройx86_64нужно скачать пакет релиза clickhouse-backupclickhouse-backup-2.6.41-1.x86_64.rpm. -
-
Скачайте необходимый пакет релиза и скопируйте его на узел, на котором установлена СУБД ClickHouse.
-
Установите пакет с помощью менеджера пакетов, доступного на узле, например:
-
Debian
-
РЕД ОС
dpkg -i <package_name>Здесь:
-
<package-name>— имя пакета, например,clickhouse-backup_2.6.41_amd64.deb.
dnf install -y <package_name>Здесь:
-
<package-name>— имя пакета, например,clickhouse-backup-2.6.41-1.x86_64.rpm.
-
-
Убедитесь, что утилита clickhouse-backup успешно установлена, с помощью следующей команды:
clickhouse-backup --versionПример вывода версии clickhouse-backupVersion: 2.6.41 Git Commit: b52aa4fc973f0025707e09dce2f275257f068ff1 Build Date: 2025-12-02
-
Создайте пользователя ClickHouse, от имени которого будет работать clickhouse-backup. Для этого:
-
Подключитесь к консольному клиенту ClickHouse, выполнив следующую команду:
clickhouse-client -
Создайте пользователя для clickhouse-backup, выполнив следующий запрос:
CREATE USER <backup_user> IDENTIFIED WITH plaintext_password BY '<backup_password>';Здесь и далее:
-
<backup_user>— имя пользователя для clickhouse-backup. -
<backup_password>— пароль пользователя для clickhouse-backup.
-
-
Выдайте пользователю
<backup_user>необходимые права для корректной работы clickhouse-backup, выполнив следующий запрос:GRANT SELECT, INSERT, ALTER, DROP, CREATE TABLE, BACKUP, SHOW ON *.* TO <backup_user>; GRANT SYSTEM ON *.* TO <backup_user>; -
Проверьте, что пользователь
<backup_user>обладает необходимыми правами, с помощью следующего запроса:SHOW GRANTS FOR <backup_user>;Результат выполнения запроса должен содержать следующую строку:
GRANT SHOW, SELECT, INSERT, ALTER, CREATE TABLE, DROP, BACKUP, SYSTEM ON *.* TO <backup_user>
-
-
Настройте директорию для хранения архивов исторических событий.
Далее в инструкции используется директория /opt/clickhouse/backup, однако при необходимости вы можете ее изменить.-
Создайте директорию для архивов исторических событий и выдайте права на работу с ней пользователю и группе
clickhouse:mkdir -p /opt/clickhouse/backup chown clickhouse:clickhouse /opt/clickhouse/backup chmod 755 /opt/clickhouse/backup -
Для обеспечения доступа ClickHouse к разделу на диске, в котором будут создаваться архивы событий, создайте конфигурационный файл
/etc/clickhouse-server/config.d/backup_disk.xmlсо следующим содержимым:<clickhouse> <storage_configuration> <disks> <backups> <type>local</type> <path>/opt/clickhouse/backup/</path> </backups> </disks> </storage_configuration> <backups> <allowed_disk>backups</allowed_disk> <allowed_path>/opt/clickhouse/backup/</allowed_path> </backups> </clickhouse> -
Для применения конфигурационного файла перезагрузите службы ClickHouse:
systemctl restart clickhouse-* -
Когда службы ClickHouse будут перезапущены, убедитесь, что в логах перезапуска отображается информация о прочтении файла
/etc/clickhouse-server/config.d/backup_disk.xml. Для этого выполните следующую команду:systemctl status clickhouse-*Пример лога с информацией о прочтении файла
/etc/clickhouse-server/config.d/backup_disk.xmlclickhouse-server.service- ClickHouse Server (analytic DBMS for big data) Loaded: loaded (/usr/lib/systemd/system/clickhouse-server.service; enabled; vendor preset: disabled) Active: active (running) since Fri 2025-11-28 13:55:06 UTC: 3 days ago Main PID: 385936 (clickhouse-serv) Tasks: 963 (limit: 14304) Memory: 8.6G CPU: 2d 49min 11.507s CGroup: /system.slice/clickhouse-server.service ├── 385933 clickhouse-watchdog "" ** ** ** ** *""" --config=/etc/clickhouse-server/config.xml --pid-file=/run/clickhouse-server/clickhouse-server.pid └── 385936 /usr/bin/clickhouse-server --config=/etc/clickhouse-server/config.xml --pid-file=/run/clickhouse-server/clickhouse-server.pid dec 01 13:55:02 clc04.evo.local systemd[1]: Starting ClickHouse Server (analytic DBMS for big data)... dec 01 13:55:02 clc04.evo.local clickhouse-server [385933]: Processing configuration file '/etc/clickhouse-server/config.xml'. dec 01 13:55:02 clc04.evo.local clickhouse-server [385933]: Merging configuration file '/etc/clickhouse-server/config.d/backup_disk.xml'. dec 01 13:55:02 clc04.evo.local clickhouse-server [385933]: Logging warning to /var/log/clickhouse-server/clickhouse-server.log dec 01 13:55:02 clc04.evo.local clickhouse-server [385933]: Logging errors to /var/log/clickhouse-server/clickhouse-server.err.log dec 01 13:55:02 clc04.evo.local systemd[1]: clickhouse-server.service: Supervising process 385936 which is not our child. We'll most likely not notice when it exits. dec 01 13:55:06 clc04.evo.local systemd[1]: Started ClickHouse Server (analytic DBMS for big data).
-
-
Создайте конфигурационный файл
/etc/clickhouse-backup/config.yml, содержащий настройки утилиты clickhouse-backup:general: remote_storage: none backups_to_keep_local: <backups_to_keep_local> log_level: info clickhouse: username: <backup_user> password: <backup_password> host: localhost port: 9000 disk_mapping: backups: /opt/clickhouse/backup/ skip_tables: - system.* - INFORMATION_SCHEMA.* - information_schema.* timeout: <timeout> use_embedded_backup_restore: true embedded_backup_disk: "backups" debug: falseЗдесь:
-
<backups_to_keep_local>— максимальное количество архивов событий, хранимых на диске. Целое число. Следует настроить его в зависимости от размера доступного дискового пространства. -
<backup_user>— имя пользователя для clickhouse-backup. -
<backup_password>— пароль пользователя для clickhouse-backup. -
<timeout>— максимальное допустимое время на создание архива, после чего процесс архивирования исторических событий будет досрочно остановлен. Указывается в часах, например,24h.
-
-
Создайте скрипт архивирования исторических событий
/usr/local/bin/archive_events.sh:#!/bin/bash # archive_events.sh - архивация партиций таблиц default.EventStorage_*_local старше N дней и удаление их из ClickHouse. # # Использование: ./archive_events.sh [DAYS]. # DAYS - события старше скольких дней нужно архивировать (по умолчанию 7). # # Требования: bash, clickhouse-client, clickhouse-backup. set -euo pipefail # Перенаправление stdout и stderr в лог-файл. LOG_DIR=/opt/clickhouse/log LOG_FILE="$LOG_DIR/archive_events.log" mkdir -p "$LOG_DIR" chown clickhouse:clickhouse "$LOG_DIR" chmod 0755 "$LOG_DIR" touch "$LOG_FILE" chown clickhouse:clickhouse "$LOG_FILE" chmod 0644 "$LOG_FILE" exec >>"$LOG_FILE" 2>&1 # Пути к утилитам clickhouse-backup и clickhouse-client. CHB_BIN=/usr/bin/clickhouse-backup CH_CLIENT=/usr/bin/clickhouse-client # Вызов справки по ключу --help. if [[ "${1:-}" =~ ^(-h|--help)$ ]]; then cat <<'EOF' Использование: ./archive_events.sh [DAYS]. DAYS - события старше скольких дней нужно архивировать (по умолчанию 7). EOF exit 0 fi RETENTION_DAYS="${1:-7}" # Паттерн таблиц и путь к конфигурационному файлу. TABLE_PATTERN='default.EventStorage_*_local' CHB_CFG='/etc/clickhouse-backup/config.yml' # Проверка наличия утилиты clickhouse-backup. if ! command -v "$CHB_BIN" &>/dev/null; then echo "ERROR: clickhouse-backup не найден по $CHB_BIN" >&2 exit 1 fi # Проверка наличия утилиты clickhouse-client. if ! command -v "$CH_CLIENT" &>/dev/null; then echo "ERROR: clickhouse-client не найден по $CH_CLIENT" >&2 exit 1 fi # Чтение учетных данных из конфигурационного файла. read -r CHB_USER CHB_PASS CHB_HOST CHB_PORT < <( awk '/^\s*username:/ {u=$2} /^\s*password:/ {p=$2} /^\s*host:/ {h=$2} /^\s*port:/ {po=$2} END { print u, p, h, po }' "$CHB_CFG" ) # Проверка, что учетные данные успешно получены. if [[ -z "$CHB_USER" || -z "$CHB_PASS" || -z "$CHB_HOST" || -z "$CHB_PORT" ]]; then echo "ERROR: не удалось прочитать username/password/host/port из $CHB_CFG" >&2 exit 1 fi # Проверка наличия и выбор кластера ClickHouse. По умолчанию - default. CLUSTER=$("$CH_CLIENT" \ --host="$CHB_HOST" --port="$CHB_PORT" \ --user="$CHB_USER" --password="$CHB_PASS" \ --query="SELECT any(cluster) FROM system.clusters FORMAT TSV") CLUSTER="${CLUSTER:-default}" # Вычисление пороговой даты. CUTOFF=$(date -d "-${RETENTION_DAYS} days" +%Y%m%d) # Сбор списка партиций. mapfile -t PARTS < <( "$CH_CLIENT" \ --host="$CHB_HOST" --port="$CHB_PORT" \ --user="$CHB_USER" --password="$CHB_PASS" \ --query=" SELECT DISTINCT partition FROM system.parts WHERE active AND database='default' AND table LIKE 'EventStorage_%_local' AND partition <= '$CUTOFF' ORDER BY partition FORMAT TSV" ) if [ "${#PARTS[@]}" -eq 0 ]; then echo "Нет партиций ≤ $CUTOFF для архивации, процесс отменен." exit 0 fi # Формирование CSV-файла и имени архива с перечислением партиций. { IFS=',' PARTS_CSV="${PARTS[*]}" } PARTS_UNDERSCORED="${PARTS_CSV//,/_}" BACKUP_NAME="archive_events_${PARTS_UNDERSCORED}" echo "→ Архивация партиций [$PARTS_CSV] в архив '$BACKUP_NAME'…" "$CHB_BIN" create \ --config "$CHB_CFG" \ --tables="$TABLE_PATTERN" \ --partitions="$PARTS_CSV" \ "$BACKUP_NAME" PARTS_SQL=$(printf "'%s'," "${PARTS[@]}") PARTS_SQL=${PARTS_SQL%,} echo "→ Удаление партиций из ClickHouse (кластер '$CLUSTER')…" # Сбор списка таблиц, из которых надо удалить партиции. mapfile -t TABLES < <( "$CH_CLIENT" \ --host="$CHB_HOST" --port="$CHB_PORT" \ --user="$CHB_USER" --password="$CHB_PASS" \ --query=" SELECT DISTINCT concat(database, '.', table) FROM system.parts WHERE active AND database='default' AND table LIKE 'EventStorage_%_local' AND partition IN (${PARTS_SQL}) FORMAT TSV" ) for tbl in "${TABLES[@]}"; do for part in "${PARTS[@]}"; do echo " • ALTER TABLE $tbl ON CLUSTER '$CLUSTER' DROP PARTITION '$part'" "$CH_CLIENT" \ --host="$CHB_HOST" --port="$CHB_PORT" \ --user="$CHB_USER" --password="$CHB_PASS" \ --query="ALTER TABLE $tbl ON CLUSTER '$CLUSTER' DROP PARTITION '$part'" done done echo "Готово. Архив: $BACKUP_NAME, удалены партиции ≤ $CUTOFF." -
Сделайте скрипт исполняемым и выдайте на него права пользователю и группе clickhouse:
chown clickhouse:clickhouse /usr/local/bin/archive_events.sh chmod 750 /usr/local/bin/archive_events.sh -
Перейдите к разделу Работа с утилитой для архивирования исторических событий.
Была ли полезна эта страница?