跳至主要内容
跳至主要内容
编辑此页

使用 remoteSecure 迁移自托管 ClickHouse 到 ClickHouse Cloud

本指南展示了如何从自托管 ClickHouse 服务器迁移到 ClickHouse Cloud,以及如何在 ClickHouse Cloud 服务之间迁移。remoteSecure 函数在 SELECTINSERT 查询中使用,以允许访问远程 ClickHouse 服务器,这使得迁移表就像编写带有嵌入式 SELECTINSERT INTO 查询一样简单。

从自托管 ClickHouse 迁移到 ClickHouse Cloud

无论您的源表是否分片和/或复制,在 ClickHouse Cloud 中,您只需要创建一个目标表(您可以省略此表的 Engine 参数,将自动选择 SharedMergeTree 作为表引擎),ClickHouse Cloud 将自动处理垂直和水平扩展。 您无需考虑如何复制和分片表。

在此示例中,自托管 ClickHouse 服务器是,ClickHouse Cloud 服务是目标

概述

流程如下

  1. 为源服务添加只读用户
  2. 在目标服务上复制源表结构
  3. 根据源的网络可用性,将数据从源拉取到目标,或将数据从源推送到目标
  4. 如果适用,从目标删除源服务器的 IP 访问列表
  5. 从源服务中删除只读用户

从一个系统到另一个系统的表迁移:

此示例将一个表从自托管 ClickHouse 服务器迁移到 ClickHouse Cloud。

兼容性

如果您注意到自托管 ClickHouse 部署和 ClickHouse Cloud 服务之间的行为差异,这可能与 兼容性设置 相关。 在 Cloud 中,兼容性是在创建服务时设置的,并且不会在服务级别更改,以确保即使服务升级,客户端也能获得一致的行为。 如果您希望更改兼容性,可以通过 支持 提出请求。

在源 ClickHouse 系统上(当前托管数据的系统)

  • 添加一个可以读取源表(在本例中为 db.table)的只读用户
CREATE USER exporter
IDENTIFIED WITH SHA256_PASSWORD BY 'password-here'
SETTINGS readonly = 1;
GRANT SELECT ON db.table TO exporter;
  • 复制表定义
SELECT create_table_query
FROM system.tables
WHERE database = 'db' AND table = 'table'

在目标 ClickHouse Cloud 系统上:

  • 创建目标数据库
CREATE DATABASE db
  • 使用源的 CREATE TABLE 语句创建目标。
提示

在运行 CREATE 语句时,将 ENGINE 更改为 ReplicatedMergeTree,不带任何参数。 ClickHouse Cloud 始终复制表并提供正确的参数。 但是,保留 ORDER BYPRIMARY KEYPARTITION BYSAMPLE BYTTLSETTINGS 子句。

CREATE TABLE db.table ...
  • 使用 remoteSecure 函数从自托管源拉取数据
INSERT INTO db.table SELECT * FROM
remoteSecure('source-hostname', db, table, 'exporter', 'password-here')
注意

如果源系统无法从外部网络访问,则可以推送数据而不是拉取数据,因为 remoteSecure 函数适用于 SELECT 和 INSERT。

  • 使用 remoteSecure 函数将数据推送到 ClickHouse Cloud 服务
将远程系统添加到 ClickHouse Cloud 服务的 IP 访问列表中

为了使 remoteSecure 函数连接到您的 ClickHouse Cloud 服务,远程系统的 IP 地址需要被 IP 访问列表允许。 展开 管理您的 IP 访问列表 以获取更多信息。

管理您的 IP 访问列表

从您的 ClickHouse Cloud 服务列表中选择您将使用的服务,并切换到 设置。 如果 IP 访问列表不包含需要连接到您的 ClickHouse Cloud 服务的远程系统的 IP 地址或范围,则可以使用 添加 IP 来解决问题

添加单个 IP 地址或需要连接到您的 ClickHouse Cloud 服务的地址范围。 根据需要修改表单,然后 保存

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

迁移 ClickHouse Cloud 服务之间的数据

迁移 ClickHouse Cloud 服务之间数据的一些示例用途

  • 从恢复的备份中迁移数据
  • 将数据从开发服务复制到暂存服务(或暂存到生产环境)

在此示例中,有两个 ClickHouse Cloud 服务,它们将分别称为目标。 数据将从源拉取到目标。 虽然您也可以推送,但显示拉取是因为它使用了只读用户。

迁移过程包括几个步骤

  1. 确定一个 ClickHouse Cloud 服务作为,另一个作为目标
  2. 为源服务添加只读用户
  3. 在目标服务上复制源表结构
  4. 临时允许对源服务的 IP 访问
  5. 将数据从源复制到目标
  6. 重新建立目标上的 IP 访问列表
  7. 从源服务中删除只读用户

为源服务添加只读用户

  • 添加一个可以读取源表(在本例中为 db.table)的只读用户

    CREATE USER exporter
    IDENTIFIED WITH SHA256_PASSWORD BY 'password-here'
    SETTINGS readonly = 1;
    
    GRANT SELECT ON db.table TO exporter;
    
  • 复制表定义

    select create_table_query
    from system.tables
    where database = 'db' and table = 'table'
    

在目标服务上复制表结构

在目标上创建数据库(如果尚不存在)

  • 创建目标数据库

    CREATE DATABASE db
    
  • 使用源的 CREATE TABLE 语句创建目标。

    在目标上使用源的 select create_table_query... 的输出创建表

    CREATE TABLE db.table ...
    

允许对源服务的远程访问

为了从源拉取数据到目标,源服务必须允许连接。 临时禁用源服务上的“IP 访问列表”功能。

提示

如果您将继续使用源 ClickHouse Cloud 服务,则在切换为允许从任何地方访问之前,将现有的 IP 访问列表导出到 JSON 文件;这将允许您在数据迁移后重新导入访问列表。

修改允许列表并临时允许从任何地方访问。 有关详细信息,请参阅 IP 访问列表 文档。

将数据从源复制到目标

  • 使用 remoteSecure 函数从源 ClickHouse Cloud 服务连接到目标。 在目标 ClickHouse Cloud 服务上运行此命令

    INSERT INTO db.table SELECT * FROM
    remoteSecure('source-hostname', db, table, 'exporter', 'password-here')
    
  • 验证目标服务中的数据

重新建立源上的 IP 访问列表

如果您之前导出了访问列表,则可以使用 共享 重新导入它,否则将您的条目重新添加到访问列表中。

删除只读 exporter 用户

DROP USER exporter
  • 切换服务 IP 访问列表以限制访问
    © . This site is unofficial and not affiliated with ClickHouse, Inc.