文档

从自建ClickHouse向企业版迁移

更新时间:

本文介绍如何将自建ClickHouse服务器迁移到云数据库ClickHouse企业版集群,以及云数据库ClickHouse企业版集群之间迁移操作。Remote函数在SELECTINSERT查询中用于允许访问自建ClickHouse服务器,这使得迁移表只需要编写一个带有嵌套SELECTINSERT INTO查询即可。

将自建ClickHouse服务器迁移到云数据库ClickHouse企业版集群,以及云数据库ClickHouse企业版集群之间迁移操作的示意图如下:

image.png

从自建ClickHouse向企业版迁移

image.png

说明

不管您的源表是否存在分片或者副本,在云数据库ClickHouse企业版集群上,您只需创建一个目标表(您可以在该表中省略Engine参数,它将自动成为ReplicatedMergeTree表),云数据库ClickHouse企业版集群将自动负责垂直和水平扩展。您无需考虑如何复制和分片。

在本示例中,自建ClickHouse服务器是源集群,云数据库ClickHouse企业版集群是目标集群。

操作概述

从自建ClickHouse向云数据库ClickHouse企业版集群迁移的流程如下:

  1. 在源集群中添加一个只读用户。

  2. 在目标集群上复制源表结构。

  3. 如果源ClickHouse服务器支持从外部网络访问时,您可以将源集群数据读取至目标集群;如果源ClickHouse服务器不支持从外部网络访问时,您可以将源集群数据推送至目标集群。

  4. (可选)在目标集群上将源集群的IP地址删除。

  5. 从源集群中删除只读用户。

操作步骤

本示例介绍如何从自建ClickHouse集群迁移一个表到云数据ClickHouse企业版集群。

  1. 在自建ClickHouse集群上执行以下操作(源表中已有数据):

    1. 增加一个只读用户到表db.table中。

      CREATE USER exporter
      IDENTIFIED WITH SHA256_PASSWORD BY 'password-here'
      SETTINGS readonly = 1;
      GRANT SELECT ON db.table TO exporter;
    2. 复制源表结构。

      SELECT create_table_query
      FROM system.tables
      WHERE database = 'db' and table = 'table'
  2. 在目标云数据库ClickHouse企业版集群上执行以下操作:

    1. 创建数据库。

      CREATE DATABASE db
    2. 使用源数据表的CREATE TABLE语句来创建目标数据表。

      说明

      在运行CREATE TABLE语句时,将ENGINE更改为ReplicatedMergeTree,但是不能包含任何参数,因为云数据库ClickHouse企业版集群始终会复制表并提供正确的参数。ORDER BYPRIMARY KEYPARTITION BYSAMPLE BYTTLSETTINGS子句定义了表的结构和元数据信息,请保留这些子句,以确保表在目标云数据库ClickHouse企业版集群中正确地创建。

      CREATE TABLE db.table ...
    3. 使用Remote函数读取数据或推送数据。

      说明

      如果源ClickHouse服务器不可从外部网络访问,您可以选择将数据推送而不是读取,因为Remote函数适用于选择和插入操作。

      • 使用Remote函数从自建ClickHouse集群的源表中读取数据。

      image.png

      INSERT INTO db.table SELECT * FROM
      remote('source-hostname:9000', db, table, 'exporter', 'password-here')
      • 使用Remote函数将数据推送到云数据库ClickHouse企业版集群中。image.png

        说明

        为了使Remote函数能够连接到您的云数据库ClickHouse企业版集群上,您需要将源ClickHouse服务器的IP地址添加到云数据库ClickHouse的白名单中。具体操作,请参见设置白名单

        INSERT INTO FUNCTION
        remote('HOSTNAME.clickhouse.cloud:9000', 'db.table',
        'default', 'PASS') SELECT * FROM db.table

云数据库ClickHouse企业版之间进行迁移

image.png

在云数据库ClickHouse企业版集群之间迁移数据的使用场景如下:

  • 从还原的备份中迁移数据。

  • 从开发服务复制数据到预发服务(或从预发到生产)。

本示例中有两个云数据库ClickHouse企业版集群,它们将被称为源集群和目标集群。数据将从源拉到目标。您也可以选择推送数据,因为这里只使用了只读用户,所以仅展示读取数据的方式。image.png

操作概述

在云数据库ClickHouse企业版之间迁移的流程如下:

  1. 确定一个云数据库ClickHouse企业版集群作为源集群,另一个作为目标集群。

  2. 在源集群上添加一个只读用户。

  3. 在目标集群上复制源表结构。

  4. 暂时允许源集群的IP访问。

  5. 从源集群到目标集群复制数据。

  6. 在目标集群上重新建立IP访问列表。

  7. 从源服务中删除只读用户。

操作步骤

  1. 在源云数据库ClickHouse企业版集群执行以下操作:

    1. 增加一个只读用户表dt.table中。

      CREATE USER exporter
      IDENTIFIED WITH SHA256_PASSWORD BY 'password-here'
      SETTINGS readonly = 1;
      GRANT SELECT ON db.table TO exporter;
    2. 复制源表结构。

      SELECT create_table_query
      FROM system.tables
      WHERE database = 'db' and table = 'table'
  2. 在目标云数据库ClickHouse企业版集群复制表结构:

    1. 创建数据库。

      CREATE DATABASE db
    2. 使用源集群的CREATE TABLE语句,在目标数据库上创建表。

    CREATE TABLE db.table ...

    在目标集群上创建表,使用来自源集群的SELECT CREATE_TABLE_QUERY...的输出。

  3. 允许源上的远程操作。

    为了从源集群到目的集群地读取数据,源集群和目标集群必须允许互相连接。请执行以下操作:

    • 已将源集群的IP地址添加到目标集群的白名单中。

    • 已将目标集群的IP地址添加到源集群的白名单中。

    说明

    您可以通过select * from system.clusters;查看云数据库ClickHouse企业版集群的IP地址。修改白名单的具体操作,请参见设置白名单

  4. 把数据从源集群复制到目标集群。

    使用Remote函数从源云数据库ClickHouse企业版集群中读取数据。连接到目标集群,在目标云数据库ClickHouse企业版集群上运行以下命令验证数据:

    INSERT INTO db.table SELECT * FROM
    remote('source-hostname:9000', db, table, 'exporter', 'password-here')
  5. 在源集群上恢复访问列表。

    如果您之前导出了访问列表,那么您可以使用Share重新导入它,否则请重新添加条目到访问列表中。

  6. 删除只读的exporter用户。

    DROP USER exporter
  7. 删除源集群和目标集群的访问IP地址。具体操作,请参见设置白名单

  • 本页导读 (1)
文档反馈