云数据库 ClickHouse 企业版集群间的数据迁移

更新时间:
复制为 MD 格式

本文介绍在云数据库 ClickHouse 企业版集群之间进行数据迁移的方法。该方法利用remote函数,通过执行一个带有嵌套SELECTINSERT INTO语句,即可实现高效、直接的数据复制,完成数据迁移。

适用场景

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

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

操作步骤

步骤一:配置源集群权限并获取表结构

  1. 创建只读用户,用于数据迁移时查询源集群数据。

    CREATE USER exporter
    IDENTIFIED WITH SHA256_PASSWORD BY 'password-here'
    SETTINGS readonly = 1;
  2. 授予特定数据库表的查询权限。

    GRANT SELECT ON test_db.test_tb TO exporter;
  3. 获取源表结构。

    SELECT create_table_query
    FROM system.tables
    WHERE database = 'test_db' AND TABLE = 'test_tb'

步骤二:在目标集群上创建表结构

  1. 创建数据库。

    CREATE DATABASE test_db
  2. 使用步骤一中获取的源表结构(CREATE TABLE语句),在目标数据库上创建表。

    CREATE TABLE test_db.test_tb ...

步骤三:设置白名单

数据迁移过程中,源集群和目标集群必须允许互相连接,需完成以下设置:

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

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

说明

您可以通过SELECT * FROM system.clusters;查看云数据库 ClickHouse 企业版集群的IP地址。

步骤四:执行数据迁移

执行以下SQL,通过remote函数从源集群中读取数据并插入到目标表中。

INSERT INTO test_db.test_tb 
SELECT * 
FROM remote(
  'source-hostname:9000', -- 源集群的访问地址和端口
  'test_db',              -- 源数据库名称
  'test_tb',              -- 源表名称
  'exporter',             -- 用户名
  'password-here'         -- 用户密码
);

步骤五:(可选)安全配置与环境清理

  1. 为目标集群建立IP访问列表。

    数据迁移完成后,如需将目标集群作为新的生产环境对外提供服务,需设置白名单

  2. 删除源集群的只读用户。

    DROP USER exporter;
  3. 在源集群的白名单设置中,删除本次迁移添加的目标集群IP地址。