概述
- 使用
remoteSecure()函数直接拉取/推送数据。 - 通过云对象存储使用
BACKUP/RESTORE命令。
本迁移指南重点介绍前置条件BACKUP/RESTORE方案,并提供一个实用示例, 演示如何通过 S3 存储桶 将开源 ClickHouse 中的数据库或整个服务迁移到 Cloud。
- 已安装 Docker
- 已有一个 S3 存储桶 和 IAM 用户
- 能够创建一个新的 ClickHouse Cloud 服务
需要集群此备份方法需要一个 ClickHouse 集群,因为必须将表从
MergeTree 引擎转换为 ReplicatedMergeTree。
如果你运行的是单实例,请改为按照“使用 remoteSecure 在自管理 ClickHouse 与 ClickHouse Cloud 之间迁移”中的步骤操作。OSS 准备
- 将 examples 仓库 克隆到本地
- 在终端中,
cd到examples/docker-compose-recipes/recipes/cluster_2S_2R - 确保 Docker 正在运行,然后启动 ClickHouse 集群:
从 MergeTree 表迁移到 ReplicatedMergeTree 表
SharedMergeTree。
恢复备份时,ClickHouse 会自动将 ReplicatedMergeTree 表转换为 SharedMergeTree 表。
如果你运行的是集群,表很可能已经在使用 ReplicatedMergeTree 引擎。
如果不是,则需要先将所有 MergeTree 表转换为 ReplicatedMergeTree,然后再进行备份。
为演示如何将 MergeTree 表转换为 ReplicatedMergeTree,我们将先从一个 MergeTree 表开始,之后再将其转换为 ReplicatedMergeTree。
我们将按照 New York taxi data guide 的前两个步骤创建一个样本表,并向其中加载数据。
为方便起见,下面也附上了这两个步骤。
运行以下命令来创建一个新的 数据库,并将 S3 存储桶 中的数据插入到新表中:
DETACH。
ReplicatedMergeTree:
使用 ReplicatedMergeTree 的分布式表
ReplicatedMergeTree 表,并将 Distributed 表作为查询入口。
运行以下命令,在集群的所有节点上创建本地 ReplicatedMergeTree 表:
Distributed 表:
Cloud 准备
1
打开 Cloud Console
前往 https://console.clickhouse.cloud/2
创建新的服务
3
配置并创建服务
选择所需的区域和配置,然后点击Create service4
创建访问角色
打开 SQL 控制台设置 S3 访问
要从 S3 恢复备份,你需要在 ClickHouse Cloud 与 S3 存储桶 之间配置安全访问。- 按照”安全访问 S3 数据”中的步骤创建访问角色,并获取该角色的 ARN。
- 更新你在”如何创建 S3 存储桶 和 IAM 角色”中创建的 S3 存储桶 policy,加入上一步中的角色 ARN。
- IAM user (
docs-s3-user):允许你的自管理 ClickHouse 集群将备份写入 S3 - ClickHouse Cloud 角色 (
ClickHouseAccess-001):允许你的 Cloud 服务从 S3 恢复
进行备份 (在自管理部署中)
BUCKET_URL、KEY_ID 和 SECRET_KEY 替换为你自己的 AWS 凭证。
如果你还没有这些信息,可参考指南”如何创建 S3 存储桶 和 IAM role”
了解如何获取。
分片 1:
单节点部署如果你未使用分布式表,可以用一条命令备份整个数据库:
- 所有用户数据库和表
- 用户账户和密码
- 角色和权限
- 设置 profile
- 行策略
- 配额
- 用户自定义函数
TO S3() (适用于 AWS 和 GCP) 和 TO AzureBlobStorage() 语法。
对于非常大的数据库,可考虑使用 ASYNC 在后台执行备份:
恢复到 ClickHouse Cloud
ROLE_ARN 设置为
从“安全访问 S3 数据”获取的
值。在第二次恢复 (以及此后的每次恢复) 时使用 SETTINGS allow_non_empty_tables=true,
这样分片数据会追加到已恢复的表中,而不会因冲突而失败:
分片 1:
非分布式部署如果你未使用分布式表,可使用一条命令恢复数据库:
SharedMergeTree,因此旧的分布式表已不再需要。您可以将其删除,并替换为一个保留原始表名的视图,以便继续用于查询:
ReplicatedMergeTree 表将还原为 SharedMergeTree: