К основному контенту

Как скопировать данные с одного кластера ClickHouse на другой?

Как скопировать данные с одного кластера на другой, т.е. скопировать в базе все метаданные таблиц и данные.

Для копирования всех метаданных таблиц и данных с одного кластера ClickHouse на другой можно использовать несколько подходов. Вот основные способы:


1. Использование BACKUP и RESTORE (с версии 22.3)

Если у вас достаточно новая версия ClickHouse, самый удобный способ — это BACKUP и RESTORE.

Создание бэкапа на первом кластере:

BACKUP DATABASE database TO Disk('backup_disk', 'database_backup');

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

BACKUP ALL DATABASES TO Disk('backup_disk', 'full_backup');

Перенос бэкапа на новый кластер

Скопируйте файлы бэкапа (например, с /var/lib/clickhouse/disks/backup_disk/database_backup/) на новый сервер.

Восстановление на втором кластере:

RESTORE DATABASE database FROM Disk('backup_disk', 'database_backup');

или

RESTORE ALL DATABASES FROM Disk('backup_disk', 'full_backup');

💡 Плюсы:

  • Простота.
  • Полностью переносит структуру и данные.
  • Быстрое восстановление.

💡 Минусы:

  • Доступно с версии 22.3.
  • Может потребовать настройки Disk('backup_disk').

2. С помощью CREATE + INSERT SELECT

Если нужно вручную перенести структуру и данные, можно экспортировать структуру и импортировать на новом кластере.

Шаг 1: Экспорт структуры таблиц

На исходном кластере:

clickhouse-client --host=source_host --database=database --query="SHOW CREATE TABLE table\G" > structure.sql

Проделайте это для всех таблиц или используйте скрипт для экспорта всей базы.

Шаг 2: Создание таблиц на новом кластере

Скопируйте structure.sql на новый сервер и выполните:

clickhouse-client --host=destination_host --database=database < structure.sql

Шаг 3: Копирование данных

Можно использовать INSERT SELECT:

INSERT INTO destination_host.database.table SELECT * FROM source_host.database.table;

Или передать данные через файлы:

clickhouse-client --host=source_host --query="SELECT * FROM database.table FORMAT Native" > data.native

clickhouse-client --host=destination_host --query="INSERT INTO database.table FORMAT Native" < data.native

💡 Плюсы:

  • Подходит для всех версий ClickHouse.
  • Гибкость: можно фильтровать данные или менять их структуру.

💡 Минусы:

  • Долгое копирование при больших объёмах данных.
  • Не переносит настройки и репликацию.

3. Копирование через файловую систему (для MergeTree)

Если используется MergeTree, можно просто скопировать файлы данных.

Шаг 1: Остановите ClickHouse

systemctl stop clickhouse-server

Шаг 2: Скопируйте файлы базы

rsync -avz /var/lib/clickhouse/store/ destination_host:/var/lib/clickhouse/store/

Шаг 3: Запустите ClickHouse

systemctl start clickhouse-server

💡 Плюсы:

  • Самый быстрый метод для больших данных.

💡 Минусы:

  • Нужно отключать сервер.
  • Не работает для ReplicatedMergeTree (понадобится пересинхронизация).

Какой метод выбрать?

Метод

Подходит для

Простота

Скорость

Поддержка

BACKUP/RESTORE

Любые данные

Легко

Быстро

ClickHouse 22.3+

CREATE + INSERT

Любые данные

🔧 Сложно

🐢 Медленно

Любая версия

rsync (файлы)

MergeTree

Риск данных

Быстро

Любая версия

Если у вас ClickHouse 22.3+, лучше использовать BACKUP/RESTORE.
Если версия старая, но нет репликации —
rsync.
Если данные реплицируемые, то лучше CREATE + INSERT.

 

Ошибки

ACKUP DATABASE database TO Disk('backup_disk', 'databases_backup'); BACKUP DATABASE database TO Disk('backup_disk', 'database_backup') Query id: 62ffc729-2059-41ba-92b9-e18ec2c36d34 0 rows in set. Elapsed: 0.010 sec. Received exception from server (version 22.2.2): Code: 479. DB::Exception: Received from localhost:9000. DB::Exception: Unknown disk backup_disk. (UNKNOWN_DISK)

Ошибка: Unknown disk backup_disk (UNKNOWN_DISK)

ClickHouse не знает о диске backup_disk, потому что он не настроен в конфигурации config.xml.


Решение: добавить backup_disk в ClickHouse

1️⃣ Откройте конфигурационный файл ClickHouse

nano /etc/clickhouse-server/config.xml

2️⃣ Добавьте диск backup_disk в секцию <storage_configuration>
Найдите блок <storage_configuration> и добавьте в него новый диск:

<yandex> <storage_configuration> <disks> <backup_disk> <path>/var/lib/clickhouse/backup/</path> </backup_disk> </disks> </storage_configuration> </yandex>

Это указывает ClickHouse, что backup_disk хранится в /var/lib/clickhouse/backup/.

3️⃣ Создайте папку для бэкапов и дайте права ClickHouse

mkdir -p /var/lib/clickhouse/backup/ chown -R clickhouse:clickhouse /var/lib/clickhouse/backup/ chmod 755 /var/lib/clickhouse/backup/

4️⃣ Перезапустите ClickHouse, чтобы применить изменения

systemctl restart clickhouse-server

5️⃣ Проверьте, что диск появился
Выполните команду в ClickHouse:

SELECT name, path FROM system.disks;

Должен появиться диск backup_disk с путём /var/lib/clickhouse/backup/.

6️⃣ Теперь можно выполнить бэкап

BACKUP DATABASE database TO Disk('backup_disk', 'database_backup');

Альтернативный вариант без изменения config.xml

Если у вас нет прав на изменение конфигурации, можно сделать бэкап в локальную папку:

BACKUP DATABASE datebase TO File('/var/lib/clickhouse/backup/database_backup');

Затем просто скопируйте файлы на другой сервер.

Комментарии

Популярные сообщения из этого блога

Настройка и подключение IPSec в Windows

Настройка IPSec на Windows включает в себя создание правил безопасности и фильтров для защиты сетевого трафика. Ниже — пошаговое руководство. Включение службы IPSec Перед настройкой убедитесь, что служба IPSec Policy Agent запущена: Нажмите Win + R , введите services.msc и нажмите Enter . Найдите IPsec Policy Agent . Если она не работает, нажмите ПКМ → Свойства . Установите Тип запуска: Автоматически , затем нажмите Запустить . Настройка политики IPSec через «Локальную политику безопасности» Нажмите Win + R , введите secpol.msc , нажмите Enter . Перейдите в Политики IP-безопасности в локальном компьютере . В правом окне нажмите Создать политику IP-безопасности → Далее . Укажите имя политики (например, "IPSec VPN"), снимите флажок Активировать правило по умолчанию , нажмите Далее . Нажмите Добавить , чтобы создать правило. Транспортный или туннельный режим : Если IPSec для защищенной локальной сети – выберите Транспортный режим . Если IPSec для VPN – выберите Туннельн...

Как найти и изменить репозитарии для CentOS 8

В CentOS 8 официальные репозитории (BaseOS, AppStream и Extras) управляются с помощью dnf и файлов конфигурации в /etc/yum.repos.d/ . Вот как их найти и изменить: 1. Просмотр текущих репозиториев dnf repolist Если нужно увидеть подробную информацию: dnf repolist all 2. Изменение репозиториев Файлы конфигурации репозиториев находятся в /etc/yum.repos.d/ . Например, основной репозиторий может быть в файле CentOS-AppStream.repo . Открыть его можно так: nano /etc/yum.repos.d/CentOS-AppStream.repo Внутри можно изменить: enabled=1 → включает репозиторий enabled=0 → отключает репозиторий baseurl= или mirrorlist= → задать новый источник пакетов 3. Замена недоступных репозиториев CentOS 8 достиг конца поддержки , и официальные зеркала больше не работают. Вместо них можно подключить Vault или AlmaLinux/Rocky Linux : Использование архивного репозитория CentOS Vault Создайте резервную копию старых .repo файлов: mkdir /root/repo-backup && mv /etc/yum.repos.d/*.repo /root/repo-backu...

Что такое Redfish API? Развертывание серверов через Redfish API: подробное руководство с примерами

Введение в Redfish API Redfish API — это стандартный интерфейс управления серверами, разработанный DMTF (Distributed Management Task Force). Он предоставляет RESTful API для взаимодействия с серверными системами, включая включение/выключение, мониторинг состояния и развертывание операционной системы. Этот API позволяет автоматизировать управление серверами без необходимости физического доступа или использования устаревших интерфейсов, таких как IPMI. Требования Прежде чем приступить к работе, необходимо подготовить следующее: Сервер с поддержкой Redfish (например, HPE iLO, Dell iDRAC, Lenovo XClarity, Cisco UCS и др.). Доступ к Redfish API через сеть. Учетные данные для аутентификации. Инструмент для работы с API (cURL, Postman, Python с библиотекой requests ). Подключение и аутентификация Для взаимодействия с Redfish API используется стандартный HTTP-запрос с аутентификацией по логину и паролю. Например, для проверки работоспособности интерфейса можно выполнить GET-запрос ...