Skip to main content

Обзор

Существует два основных способа миграции данных из самоуправляемого ClickHouse (OSS) в ClickHouse Cloud:
  • С помощью функции remoteSecure(), при котором данные напрямую передаются или извлекаются.
  • С помощью команд BACKUP/RESTORE через облачное объектное хранилище
Это руководство по миграции посвящено подходу BACKUP/RESTORE и содержит практический пример миграции базы данных или целого сервиса из ClickHouse с открытым исходным кодом в Cloud через S3 бакет.
Предварительные требования Чтобы шаги из этого руководства было проще повторить и воспроизвести, мы будем использовать один из рецептов Docker Compose для кластера ClickHouse с двумя сегментами и двумя репликами.
Требуется кластерДля этого метода резервного копирования нужен кластер ClickHouse, поскольку таблицы необходимо преобразовать из движка MergeTree в ReplicatedMergeTree. Если у вас запущен один экземпляр, вместо этого выполните шаги из руководства “Миграция между самоуправляемым ClickHouse и ClickHouse Cloud с использованием remoteSecure”.

Подготовка OSS

Сначала поднимем кластер ClickHouse, используя конфигурацию Docker Compose из нашего репозитория examples. Если у вас уже запущен кластер ClickHouse, этот шаг можно пропустить.
  1. Клонируйте репозиторий examples на локальный компьютер
  2. В терминале перейдите в каталог examples/docker-compose-recipes/recipes/cluster_2S_2R
  3. Убедитесь, что Docker запущен, затем запустите кластер ClickHouse:
Вы увидите:
В новом окне терминала, открытом в корне папки, выполните следующую команду, чтобы подключиться к первому узлу кластера:

От таблицы MergeTree к таблице ReplicatedMergeTree

ClickHouse Cloud работает с SharedMergeTree. При восстановлении резервной копии ClickHouse автоматически преобразует таблицы с ReplicatedMergeTree в таблицы SharedMergeTree. Скорее всего, если вы используете кластер, ваши таблицы уже работают на движке ReplicatedMergeTree. Если нет, перед созданием резервной копии вам нужно будет преобразовать все таблицы MergeTree в ReplicatedMergeTree. Чтобы наглядно показать, как преобразовать таблицы MergeTree в ReplicatedMergeTree, мы начнем с таблицы MergeTree, а затем преобразуем ее в ReplicatedMergeTree. Мы выполним первые два шага из руководства по данным New York taxi, чтобы создать демонстрационную таблицу и загрузить в нее данные. Для удобства эти шаги приведены ниже. Выполните следующие команды, чтобы создать новую базу данных и загрузить данные из S3 бакета в новую таблицу:
Выполните следующую команду, чтобы отсоединить таблицу с помощью DETACH.
Затем подключите её как реплицируемую:
Наконец, восстановите метаданные реплики:
Проверьте, что она была преобразована в ReplicatedMergeTree:
Теперь вы готовы перейти к настройке своего сервиса ClickHouse Cloud для последующего восстановления резервной копии из вашего S3 бакета.

Distributed таблицы с ReplicatedMergeTree

Если в вашей конфигурации используются distributed таблицы между несколькими сегментами, вам потребуется локальная таблица ReplicatedMergeTree на каждом узле и таблица Distributed в качестве точки входа для запросов. Выполните следующую команду, чтобы создать локальную реплицируемую таблицу на всех узлах кластера:
Затем создайте на её основе таблицу Distributed:
Вставьте данные через distributed таблицу:

Подготовка ClickHouse Cloud

Вы будете восстанавливать данные в новый сервис ClickHouse Cloud. Чтобы создать новый сервис ClickHouse Cloud, выполните следующие шаги.
1

Откройте Cloud Console

Перейдите на https://console.clickhouse.cloud/
2

Создайте новый сервис

3

Настройте и создайте сервис

Выберите нужный регион и конфигурацию, затем нажмите Create service
4

Создайте роль доступа

Откройте SQL Console

Настройте доступ к S3

Чтобы восстановить резервную копию из S3, вам нужно настроить безопасный доступ между ClickHouse Cloud и вашим S3 бакетом.
  1. Выполните шаги из “Безопасный доступ к данным в S3”, чтобы создать роль доступа и получить ARN роли.
  2. Обновите политику S3 бакета, созданную на шаге “Как создать S3 бакет и роль IAM”, добавив ARN роли из предыдущего шага.
Обновлённая политика S3 бакета будет выглядеть примерно так:
Политика включает оба ARN:
  • пользователь IAM (docs-s3-user): позволяет вашему самоуправляемому кластеру ClickHouse создавать резервные копии в S3
  • роль ClickHouse Cloud (ClickHouseAccess-001): позволяет вашему сервису ClickHouse Cloud восстанавливать данные из S3

Создание резервной копии (в самоуправляемом развертывании)

Резервную копию каждого сегмента нужно создавать отдельно. Подключитесь к узлу в каждом сегменте и выполните команду резервного копирования, указав уникальный путь назначения для каждого сегмента. Замените BUCKET_URL, KEY_ID и SECRET_KEY своими учётными данными AWS. В руководстве “Как создать S3 бакет и роль IAM” показано, как получить их, если у вас их ещё нет. Сегмент 1:
Сегмент 2:
Если всё настроено правильно, вы увидите ответ, похожий на приведённый ниже, с уникальным идентификатором, присвоенным резервной копии, и её статусом.
Одноузловые развертыванияЕсли вы не используете distributed таблицы, вы можете создать резервную копию всей базы данных одной командой:
Если вы проверите свой ранее пустой S3 бакет, то увидите, что в нем появилось несколько папок: Если вы выполняете полную миграцию, то можете запустить следующую команду, чтобы создать резервную копию всего сервера:
Приведенная выше команда создает резервные копии:
  • Всех пользовательских баз данных и таблиц
  • Учетных записей пользователей и паролей
  • Ролей и разрешений
  • Профилей настроек
  • Политик доступа к строкам
  • Квот
  • Пользовательских функций
Если вы используете другого поставщика облачных услуг (CSP), можно использовать синтаксис TO S3() (как для AWS, так и для GCP) и TO AzureBlobStorage(). Для очень больших баз данных рассмотрите возможность использования ASYNC, чтобы выполнять резервное копирование в фоновом режиме:
Затем идентификатор резервной копии можно использовать для отслеживания прогресса резервного копирования:
Также можно создавать инкрементные резервные копии. Подробнее о резервном копировании см. в документации по backup and restore.

Восстановление в ClickHouse Cloud

Восстанавливайте резервную копию каждого сегмента по очереди в сервис ClickHouse Cloud. Установите ROLE_ARN в значение, полученное в разделе “Безопасный доступ к данным S3”. При втором (и каждом последующем) восстановлении используйте SETTINGS allow_non_empty_tables=true, чтобы данные сегмента добавлялись в уже восстановленные таблицы, а не возникала ошибка конфликта: Сегмент 1:
Сегмент 2:
не-распределённые развертыванияЕсли вы не используете distributed таблицы, восстановите базу данных одной командой:
Аналогичным образом можно выполнить полное восстановление сервиса:
После завершения восстановления убедитесь, что данные доступны в Cloud:
Поскольку ClickHouse Cloud использует SharedMergeTree внутренне, старая distributed таблица больше не нужна. Её можно удалить и заменить представлением, сохранив исходное имя таблицы для ваших запросов:
Нераспределённые таблицы ReplicatedMergeTree будут восстановлены как SharedMergeTree:
Последнее изменение 3 июля 2026 г.