跳转到主要内容
本指南介绍如何将自管理 ClickHouse 服务器迁移到 ClickHouse Cloud,以及如何在 ClickHouse Cloud 服务之间进行迁移。 remoteSecure 函数可在 SELECTINSERT 查询中使用,以访问远程 ClickHouse 服务器,从而让表迁移变得像编写一条嵌入了 SELECTINSERT INTO 查询一样简单。

从自管理 ClickHouse 迁移到 ClickHouse Cloud

无论您的源表是否进行了分片和/或复制,在 ClickHouse Cloud 中,您只需创建目标表 (可以省略该表的 Engine 参数,系统会自动选择 SharedMergeTree 作为表引擎) , 而 ClickHouse Cloud 会自动处理纵向和横向扩缩容。 您无需自行考虑表该如何分片或复制。 在此示例中,自管理 ClickHouse server 是 源端,ClickHouse Cloud 服务是 目标端

概述

流程如下:
  1. 在源服务中添加一个只读用户
  2. 在目标服务上复制源表结构
  3. 根据源端的网络可达性,从源端将数据拉取到目标端,或从源端推送数据到目标端
  4. 从目标端的 IP Access List 中移除源服务器 (如适用)
  5. 从源服务中移除该只读用户

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

本示例将一个表从自管理的 ClickHouse 服务器迁移到 ClickHouse Cloud。
兼容性如果你发现自托管 ClickHouse 部署与 ClickHouse Cloud 服务之间的行为表现存在差异, 可能与兼容性设置有关。 在 Cloud 中,兼容性会在创建服务时设定,并且不会在服务级别更改,以确保即使服务升级,客户端的行为也保持一致。 如果你希望更改兼容性,可以通过 support 提交请求。

在源 ClickHouse 系统上 (即当前承载数据的系统)

  • 添加一个只读用户,使其能够读取源表 (本示例中为 db.table)
  • 复制表定义

在目标端 ClickHouse Cloud 系统中:

  • 创建目标数据库:
  • 使用源端的 CREATE TABLE 语句创建目标端。
执行 CREATE 语句时,将 ENGINE 改为不带任何参数的 ReplicatedMergeTree。ClickHouse Cloud 中的表始终会被复制,并会提供正确的参数。不过,仍需保留 ORDER BYPRIMARY KEYPARTITION BYSAMPLE BYTTLSETTINGS 子句。
  • 使用 remoteSecure 函数从自管理端拉取数据
如果源系统无法从外部网络访问,你可以改用推送数据而不是拉取数据,因为 remoteSecure 函数同时支持查询和插入。请参见下一个选项。
  • 使用 remoteSecure 函数将数据推送到 ClickHouse Cloud 服务
将远程系统添加到你的 ClickHouse Cloud 服务 IP Access List要使 remoteSecure 函数能够连接到你的 ClickHouse Cloud 服务,必须在 IP Access List 中允许远程系统的 IP 地址。展开此提示下方的 管理你的 IP Access List 以了解更多信息。
在 ClickHouse Cloud 服务列表中,选择要使用的服务,然后切换到 设置。如果 IP Access List 中没有包含需要连接到您的 ClickHouse Cloud 服务的远程系统 IP 地址或地址范围,可以通过 Add IPs 解决此问题:添加单个 IP 地址,或添加需要连接到您的 ClickHouse Cloud 服务的地址范围。按需修改表单,然后点击 保存

在 ClickHouse Cloud 服务之间迁移

下面是一些在 ClickHouse Cloud 服务之间迁移数据的常见场景:
  • 迁移从已恢复备份中得到的数据
  • 将数据从 Development 服务复制到暂存服务 (或从暂存服务复制到生产环境)
在本示例中,有两个 ClickHouse Cloud 服务,分别称为 source (源端) 和 destination (目标端) 。数据将从 source 拉取到 destination。虽然你也可以选择推送方式,但这里演示的是拉取方式,因为它使用只读用户。 迁移分为以下几个步骤:
  1. 确定其中一个 ClickHouse Cloud 服务作为 source,另一个作为 destination
  2. 在 source 服务中添加一个只读用户
  3. 在 destination 服务上复制 source 表结构
  4. 临时放开对 source 服务的 IP 访问限制
  5. 将数据从 source 复制到 destination
  6. 在 destination 上重新设置 IP Access List
  7. 从 source 服务中删除只读用户

向源服务添加只读用户

  • 添加一个对源表具有只读权限的用户 (本示例中为 db.table)
  • 复制表定义

在目标端服务上复制表结构

如果目标端上还没有该数据库,请先创建:
  • 创建目标端数据库:
  • 使用源端的 CREATE TABLE 语句,在目标端创建表。 在目标端,使用源端 select create_table_query... 的输出创建表:

允许远程访问源服务

要将数据从源端拉取到目标端,源服务必须允许连接。请临时禁用源服务上的“IP Access List”功能。
如果迁移完成后你还会继续使用源 ClickHouse Cloud 服务,请先将现有的 IP Access List 导出为 JSON 文件,再切换为允许从任意位置访问;这样在数据迁移完成后,你就可以重新导入该访问列表。
修改允许列表,临时允许从 Anywhere 访问。详情请参阅 IP Access List 文档。

将数据从源端复制到目标端

  • 使用 remoteSecure 函数从源 ClickHouse Cloud 服务拉取数据 连接到目标服务。在目标 ClickHouse Cloud 服务上运行以下命令:
  • 验证目标服务中的数据

在源端重新设置 IP Access List

如果你之前已导出该 IP Access List,则可以通过 共享 将其重新导入;否则,请将相应条目重新添加到 IP Access List 中。

删除只读的 exporter 用户

  • 将服务的 IP Access List 切换为限制访问
最后修改于 2026年6月12日