ClickHouseNotes

第 21 章:备份恢复

zjc 于 2026-01-21 发布

这是《ClickHouse 零基础实战指南》的独立章节版。本章从概念、实操和生产排查三个视角展开,代码块保留了原书可直接运行的版本。 副本处理节点故障,备份处理误删、逻辑错误、集群级故障和合规留存。两者不能互相替代。

21.1 需要备份的内容

内容 说明
表结构 CREATE TABLE、视图、字典、权限
数据 part 分区数据文件
配置文件 config、users、存储策略
集群拓扑 remote_servers、宏、Keeper 配置
任务定义 Kafka 表、物化视图、定时任务
恢复手册 操作步骤和联系人

21.2 备份策略

策略 适合
分区 FREEZE 单机或小规模自管
clickhouse-backup 常用工具链
对象存储快照 云环境或冷备
远程集群复制 灾备环境
元数据加数据目录 自定义恢复

备份级别:

全量:每周或每周期
增量:新分区、新 part
元数据:高频或每次变更

21.3 FREEZE

冻结分区:

ALTER TABLE analytics.events_local
FREEZE PARTITION '202608';

指定备份名称:

ALTER TABLE analytics.events_local
FREEZE PARTITION '202608' WITH NAME 'daily_20260825';

冻结不是备份完成。还需要把冻结目录同步到独立存储:

rsync -a /var/lib/clickhouse/shadow/daily_20260825/ \
  backup-host:/backup/clickhouse/daily_20260825/

21.4 恢复分区

准备恢复表结构后,将备份 part 放入 detached 目录,再 ATTACH。

ALTER TABLE analytics.events_local
ATTACH PART 'part_name';

也可以使用 clickhouse-backup 等工具恢复完整表。关键校验:

SELECT count() FROM analytics.events_local;

SELECT event_date, count(), sum(amount)
FROM analytics.events_local
GROUP BY event_date;

21.5 元数据备份

导出建表语句:

SELECT database, table, create_table_query
FROM system.tables
WHERE database = 'analytics';

导出权限:

SELECT * FROM system.users;
SELECT * FROM system.roles;
SELECT * FROM system.grants;

具体系统表字段因版本而异。权限也可以通过访问控制目录备份,但恢复前要确认版本兼容。

21.6 clickhouse-backup

常用流程:

clickhouse-backup create daily_20260825
clickhouse-backup upload daily_20260825
clickhouse-backup list remote
clickhouse-backup download daily_20260825
clickhouse-backup restore daily_20260825

工具版本必须与 ClickHouse 版本和部署方式匹配。生产使用前要在测试环境验证:

  1. 大分区备份耗时;
  2. 对线上 IO 影响;
  3. 对象存储凭据;
  4. 恢复速度;
  5. 权限和配置恢复;
  6. 集群表恢复语义。

21.7 分布式集群恢复

本地表和 Distributed 表要分别处理:

1. 恢复 Keeper 或确认新 Keeper
2. 恢复 ClickHouse 配置和宏
3. 恢复本地表结构
4. 恢复各分片本地数据
5. 恢复分布式表定义
6. 校验行数和指标
7. 恢复写入链路

如果分片数量或路由变化,需要重新规划数据分布,不能直接恢复到不一致拓扑。

21.8 Kafka 链路恢复

Kafka 引擎表恢复前要确认:

  1. topic 保留期;
  2. consumer group 位点;
  3. 物化视图是否重建;
  4. 数据边界;
  5. 重复消费处理;
  6. 死信队列。

常见选择:

方案 说明
从备份时间点继续 需要位点可恢复
从 Kafka earliest 重放 可能重复
从上游补数 需要幂等
接受缺失 通常只适合可丢数据

21.9 恢复演练

备份必须定期演练:

1. 搭建隔离环境
2. 恢复元数据
3. 恢复数据
4. 校验行数和指纹
5. 执行核心报表
6. 记录耗时
7. 更新恢复手册
8. 检查权限和配置

21.10 故障场景

故障 恢复来源
单副本磁盘损坏 健康副本
误删分区 备份
错误 UPDATE 备份或上游重放
元数据损坏 元数据备份
集群级故障 灾备环境
依赖组件故障 Kafka 或上游补数

本章小结

备份要覆盖表结构、数据、配置、权限和恢复步骤。FREEZE 适合理解原理,生产常用工具和对象存储体系化处理。备份的价值由恢复演练证明,没有演练过的备份不能视为可用。

思考题

  1. 为什么副本不能替代备份?
  2. FREEZE 后还需要做什么?
  3. 分布式集群恢复有哪些步骤?
  4. Kafka 链路如何处理重放和重复?
  5. 如何验证恢复后的数据正确性?