Миграция данных в Managed Service for ClickHouse® средствами ClickHouse®
Вы можете перенести данные из вашего кластера ClickHouse® в кластер Managed Service for ClickHouse® при помощи:
- Встроенной функции
remote
. Этот способ подойдет для переноса отдельных таблиц. - Встроенных команд backup/restore и бакета Yandex Object Storage. Этот способ подойдет для переноса как отдельных таблиц, так и базы данных целиком.
Вы также можете перенести базу данных из кластера ClickHouse® в кластер Managed Service for ClickHouse® при помощи Data Transfer. О том, как это сделать, см. в практическом руководстве.
Перенос данных при помощи remote
При помощи remote
вы можете перенести отдельные таблицы из стороннего кластера ClickHouse®. Этот способ не требует установки ZooKeeper и дополнительных инструментов, а также обновления версии ClickHouse® кластера-источника.
Совет
Перед переносом данных рекомендуется остановить мержи в кластер-источник при помощи команд STOP MERGES
и STOP TTL MERGES
, а также отключить потребителей.
Чтобы перенести таблицу из стороннего кластера ClickHouse® в кластер Managed Service for ClickHouse®:
-
Подключитесь к кластеру, из которого вы хотите перенести данные.
-
Получите текст запроса для создания таблиц:
SELECT create_table_query FROM system.tables WHERE database = '<имя_БД,_которую_вы_хотите_перенести>';
Например, в вашей БД
db1
хранится таблицаtasks
со списком заданий. Ответ на запрос будет выглядеть так:CREATE TABLE db1.tasks (`task_id` Int32, `title` String, `start_date` Date, `due_date` Date, `priority` Int8 DEFAULT 3, `description` String) ENGINE = MergeTree PRIMARY KEY tuple(task_id) ORDER BY tuple(task_id) SETTINGS index_granularity = 8192;
-
Подключитесь к кластеру Managed Service for ClickHouse®, на который вы хотите перенести данные, и создайте на нем новую таблицу из полученного ранее текста запроса.
Если в кластере-источнике не использовались реплики, а в приемнике — используются, замените движок на Replicated-семейство.
Чтобы создать объект на всех хостах кластера-приемника, используйте в команде
CREATE
выражениеON CLUSTER
. -
В кластере-источнике выполните запрос:
INSERT INTO FUNCTION remoteSecure('<FQDN_хоста_кластера_Managed_Service_for_ClickHouse®>:9440', '<имя_БД_в_кластере-приемнике>.<имя_целевой_таблицы>', '<имя_пользователя_в_кластере-приемнике>', '<пароль_пользователя_в_кластере-приемнике>') SELECT * from <имя_БД>.<имя_таблицы>;
О том, как получить FQDN хоста, см. инструкцию.
-
В кластере-приемнике проверьте, что в БД появилась таблица из кластера-источника:
SHOW TABLES FROM <имя_базы_данных>;
-
Проверьте, что таблица содержит данные из таблицы кластера-источника:
SELECT * FROM <имя_БД>.<имя_таблицы>;
Подробнее об использовании функции remote
см. в документации ClickHouse®
Перенос данных при помощи команд backup/restore и бакета Object Storage
Важно
Для работы с командами backup/restore в стороннем кластере нужна версия ClickHouse® 22.10 или новее.
При помощи команд backup/restore и бакета Object Storage вы можете перенести из стороннего кластера ClickHouse® как отдельные таблицы, так и базу данных целиком. Для этого:
-
Создайте сервисный аккаунт с ролью
storage.editor
. -
Создайте статический ключ для сервисного аккаунта.
Сохраните идентификатор ключа и сам ключ: они понадобятся в следующих шагах.
-
Подключитесь к кластеру, из которого вы хотите перенести данные.
-
Выполните команду для сохранения резервной копии таблицы в бакет Object Storage:
BACKUP TABLE <имя_базы_данных>.<имя_таблицы> TO S3('<эндпоинт_бакета_Object_Storage>', '<идентификатор_статического_ключа_сервисного_аккаунта>', '<статический_ключ_сервисного_аккаунта>');
Если вы хотите перенести базу данных целиком, выполните команду:
BACKUP DATABASE <имя_базы_данных> TO S3('<эндпоинт_бакета_Object_Storage>', '<идентификатор_статического_ключа_сервисного_аккаунта>', '<статический_ключ_сервисного_аккаунта>');
-
Подключитесь к кластеру Managed Service for ClickHouse®, на который вы хотите перенести данные.
-
Выполните команду для восстановления таблицы из резервной копии:
RESTORE TABLE <имя_базы_данных>.<имя_таблицы> FROM S3('<эндпоинт_бакета_Object_Storage>', '<идентификатор_статического_ключа_сервисного_аккаунта>', 'статический_ключ_сервисного_аккаунта>');
Если вы хотите восстановить базу данных, используйте команду:
RESTORE DATABASE <имя_базы_данных> FROM S3('<эндпоинт_бакета_Object_Storage>', '<идентификатор_статического_ключа_сервисного_аккаунта>', 'статический_ключ_сервисного_аккаунта>');
-
Убедитесь, что восстановление из резервной копии прошло успешно:
-
Если вы восстанавливали таблицу, выполните команду:
SELECT * FROM <имя_базы_данных>.<имя_таблицы>;
-
Если вы восстанавливали базу данных, выполните команду:
SHOW DATABASES;
-
Подробнее об использовании команд backup/restore с S3-хранилищем см. в документации ClickHouse®