clickhouse 数据迁移方案(基于上篇改进)
上篇文章地址:
https://blog.csdn.net/m0_57679053/article/details/155989439?fromshare=blogdetail&sharetype=blogdetail&sharerId=155989439&sharerefer=PC&sharesource=m0_57679053&sharefrom=from_link
CK 数据迁移方案(基于 clickhouse-backup)
TIP:实际操作之前务必将此文档完整阅读一遍,以防误操作导致数据迁移失败或不完整
一、迁移核心流程
整体迁移分为两大核心步骤,所有操作需严格遵循 “先备份再导入” 的顺序,多分片、多副本场景需确保每个节点同步执行对应操作:
- 第一步:从源 CK 集群备份数据(含配置准备、数据备份、备份校验)
- 第二步:将备份数据导入目标 CK 集群(含备份文件传输、目标集群准备、数据恢复、一致性验证)
二、第一步:从源 CK 集群备份数据
1. 安装 clickhouse-backup 工具
-
适用场景:若源集群为多分片、多副本结构,所有节点必须分别安装,不可只在单个节点操作;单节点场景仅需在目标节点安装。
-
操作步骤:
-
将
clickhouse-backup-1.5.2-1.x86_64.rpm安装包上传到每个源 CK 节点的指定目录(如/opt/clickhouse-backup/)。 -
登录每个源 CK 节点,执行安装命令:
sudo yum localinstall -y /opt/clickhouse-backup/clickhouse-backup-1.5.2-1.x86_64.rpm
-
-
安装验证:每个节点分别执行以下命令,确认安装成功:
clickhouse-backup --version -
成功标准:输出版本信息(Version: 1.5.2、Git Commit: f67d23fd3b775f887683d3d3fdea1b1500419987、Build Date: 2022-08-08),示例如下:
[root@apptest ~]# clickhouse-backup --version Version: 1.5.2 Git Commit: f67d23fd3b775f887683d3d3fdea1b1500419987 Build Date: 2022-08-08
2. 配置 clickhouse-backup
-
操作范围:源集群所有节点需分别配置,确保每个节点的备份参数与自身环境匹配。
-
操作步骤:
-
登录目标节点,进入默认配置文件路径:
cd /etc/clickhouse-backup/ -
新建并编辑配置文件
vi config.yml -
拷贝基础配置模板(需根据现场实际环境修改,关键参数示例如下):
clickhouse: host: "localhost" # 源端 CK 地址(本地默认 localhost) port: 9000 # TCP 端口 user: "default" # 有备份权限的用户(建议 admin) password: "default" # 密码(若有) data_path: "/data/server/clickhouse/data/" # 源端数据目录(与 CK 配置一致) metadata_path: "/data/server/clickhouse/data/metadata/" # 源端元数据目录
-
3. 磁盘空间要求
-
备份前必须检查每个源 CK 节点的
备份存储目录(默认/data/backup)可用空间,要求:
- 可用空间 ≥ 当前节点目标数据库数据总量的 1.5 倍(预留冗余,避免备份中断)。
-
空间查询命令
# 查看备份存储目录可用空间 df -h /data/backup # 查看目标数据库数据总量(以test_migration为例) clickhouse-client -q "SELECT formatReadableSize(sum(bytes)) AS total_data_size FROM system.parts WHERE database = 'test_migration'" -
示例:若某节点
test_migration数据库总数据量为 100GB,该节点/data/backup目录需预留至少 150GB 可用空间。
4. 执行数据备份
-
操作范围:源集群所有节点需分别执行备份命令,建议统一备份文件名(便于后续同步)。
-
操作步骤:
-
登录目标节点,执行备份命令(备份文件名为full_backup_20251113,可按需修改):
clickhouse-backup create full_backup_20251113 -
等待备份完成:命令执行过程中会输出日志,显示备份进度,无报错则备份成功。
-
-
备份文件路径:默认存储在
/data/backup/目录下,备份文件名为full_backup_20251113(目录形式)。
5. 备份结果校验
-
操作范围:源集群所有节点需分别校验,确保备份文件完整。
-
校验步骤:
-
查看备份列表,确认备份存在:
clickhouse-backup list
-
成功标准:输出备份文件名、大小、创建时间及存储类型(local),示例如下:
[root@apptest ~]# clickhouse-backup list 2025/11/14 16:20:51.561526 info SELECT value FROM `system`.`build_options` where name='VERSION_INTEGER' 2025/11/14 16:20:51.569090 info SELECT * FROM system.disks; full_backup_20251114 537.52MiB 14/11/2025 01:55:02 local [root@apptest ~]#
-
检查备份文件结构,确保包含 3 个核心文件 / 目录:
# 进入备份文件目录 cd /data/backup/full_backup_20251113/ # 查看目录内容 ls
-
必需文件:
metadata目录(元数据)
metadata.json文件(元数据配置)
shadow目录(影子表数据),示例如下:
[root@apptest full_backup_20251113]# ls metadata metadata.json shadow [root@apptest full_backup_20251113]# -
异常处理:若缺少任一文件 / 目录,需重新执行备份命令。
-
三、第二步:将备份数据导入目标 CK 集群
1. 备份文件跨集群传输
- 核心要求:源集群每个节点的备份文件,需严格按 “分片 - 副本 - 节点” 一对一映射拷贝至目标集群对应节点,不可交叉传输(避免分片数据错乱)。
- 前提准备:提前梳理源集群与目标集群的拓扑映射关系,建议用表格记录(示例如下):
| 源集群信息 | 目标集群对应信息 | 备份文件传输路径 |
|---|---|---|
| 分片 1 - 副本 1(IP:10.0.0.1) | 分片 1 - 副本 1(IP:10.0.0.11) | 10.0.0.1:/data/backup/ → 10.0.0.11:/data/backup/ |
| 分片 2 - 副本 2(IP:10.0.0.2) | 分片 2 - 副本 2(IP:10.0.0.12) | 10.0.0.2:/data/backup/ → 10.0.0.12:/data/backup/ |
| 分片 3 - 副本 3(IP:10.0.0.3) | 分片 3 - 副本 3(IP:10.0.0.13) | 10.0.0.3:/data/backup/ → 10.0.0.13:/data/backup/ |
-
传输工具:推荐使用
scp(简单)或rsync(支持断点续传,大文件优先)。 -
操作步骤:(以scp为例,从源节点向目标节点传输):
-
登录源集群目标节点(如 10.0.0.1),执行传输命令:
# 传输备份文件目录至目标集群对应节点 scp -r /data/backup/full_backup_20251113/ root@10.0.0.11:/data/backup/ -
输入目标节点(10.0.0.11)的 root 密码,等待传输完成(大文件需耐心等待)。
-
-
传输校验:目标集群每个节点需确认备份文件完整:
# 目标节点执行,检查备份文件结构 ls /data/backup/full_backup_20251113/- 标准:包含
metadata、metadata.json、shadow三个核心文件 / 目录,且文件大小与源节点一致。
- 标准:包含
2. 目标 CK 集群环境准备
(1)安装 clickhouse-backup 工具
-
操作范围:目标集群所有节点(含所有分片、所有副本)需分别安装,步骤与源集群一致。
-
操作步骤:
-
将
clickhouse-backup-1.5.2-1.x86_64.rpm安装包上传到每个目标节点的/opt/clickhouse-backup/目录。 -
执行安装命令:
sudo yum localinstall -y /opt/clickhouse-backup/clickhouse-backup-1.5.2-1.x86_64.rpm -
验证安装:
clickhouse-backup --version
- 成功标准:与源集群安装验证结果一致。
-
(2)配置 clickhouse-backup
- 操作范围:目标集群所有节点需分别配置,配置文件路径及核心参数与源集群一致,但需注意:
clickhouse.host:若目标节点 IP 与源节点不同,需设为目标节点本地 IP 或localhost。clickhouse.port:若目标节点 port 与源节点不同,需设为目标节点port。
- 操作步骤:参考 “第一步 - 2. 配置 clickhouse-backup”,确保每个目标节点的
config.yml参数匹配自身环境。
(3)清理目标集群目标目录
-
操作目的:清空目标集群节点的原有数据目录,避免与恢复数据冲突。
-
操作范围:目标集群所有节点需分别执行。
-
操作步骤:
-
停止 clickhouse 服务:
sudo systemctl stop clickhouse-server.service -
清空数据、元数据及存储目录(路径需与目标集群实际部署路径一致,默认如下):
sudo rm -rf /data/server/clickhouse/data/data/* sudo rm -rf /data/server/clickhouse/data/metadata/* sudo rm -rf /data/server/clickhouse/data/store/* -
重启 clickhouse 服务:
sudo systemctl start clickhouse-server.service
- 服务校验:执行
sudo systemctl status clickhouse-server.service,确保服务状态为 “active (running)”。
-
(4)磁盘空间要求
-
目标集群每个节点需检查
数据存储目录(默认/data/server/clickhouse/data/)的可用空间,要求:
- 可用空间 ≥ 对应源节点备份文件大小的 1.5 倍(预留恢复过程中的临时文件空间)。
-
空间查询命令
# 查看数据存储目录可用空间 df -h /data/server/clickhouse/data/ # 查看备份文件大小 du -sh /data/backup/full_backup_20251113/ -
示例:若源节点备份文件大小为 500MiB,目标节点
/data/server/clickhouse/data/目录需预留至少 750MiB 可用空间。
3. 执行数据恢复
-
操作范围:目标集群所有节点需分别执行恢复命令,所有节点恢复完成后统一重启服务。
-
操作步骤:
-
登录目标集群目标节点,执行恢复命令(–rm参数用于清理恢复过程中的冲突临时文件):
clickhouse-backup restore full_backup_20251113 --rm -
等待恢复完成:命令执行无报错则恢复成功(大文件需耐心等待)。
-
所有目标节点恢复完成后,统一重启 clickhouse 服务(确保数据加载生效):
sudo systemctl restart clickhouse-server.service
- 服务校验:执行
sudo systemctl status clickhouse-server.service,确保服务正常运行。
-
4. 数据一致性验证
-
验证目的:确认目标集群数据与源集群完全一致(数据量、分片分布均匹配)。
-
操作范围:在目标集群任意节点执行查询(或在源集群、目标集群分别执行,对比结果)。
-
验证命令:
-
校验指定数据库表的数据总大小(以test_migration.local_data为例):
SELECT formatReadableSize(sum(bytes)) AS total_size FROM system.parts WHERE database = 'test_migration' AND table = 'local_data'; -
校验分布式表各分片的数据量(以test_migration.dist_data为例):
SELECT _shard_num, count() AS shard_data_count FROM test_migration.dist_data GROUP BY _shard_num ORDER BY _shard_num;
-
-
验证标准:目标集群查询结果与源集群完全一致(总大小相同、各分片数据量匹配)。
-
异常处理:若结果不一致,需检查备份文件传输完整性、恢复命令执行日志,必要时重新执行恢复操作。
四、关键注意事项
- 多分片 / 多副本操作原则:所有步骤(安装工具、配置、备份、恢复)必须在每个节点单独执行,不可遗漏任一节点(避免部分节点无数据)。
- 备份文件唯一性:同一集群内的备份文件名建议统一(如
full_backup_20251113),便于跨节点同步和后续追溯。 - 服务状态管控:
- 备份时:确保 clickhouse 服务正常运行(不可停止)。
- 恢复前:必须停止 clickhouse 服务(避免目录占用,导致清理失败)。
- 恢复后:统一重启服务(确保数据加载生效)。
- 权限问题:操作过程中若出现 “权限不足” 报错,需添加
sudo执行命令(确保以 root 权限操作)。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)