Как скопировать данные с одного кластера на другой, т.е. скопировать в базе все метаданные таблиц и данные.
Для копирования
всех метаданных таблиц и данных с одного кластера 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.
Комментарии
Отправить комментарий