前言:为什么写这篇实操文?

作为 ClickHouse 用户,你是否遇到过这些崩溃场景?

  • 远程备份文件上传后,执行恢复命令提示 “backup not found”;
  • 解压备份 tar 包后,表结构和数据对应错乱;
  • 想只恢复单个表,却不小心覆盖了整个数据库;
  • 恢复过程中报权限错误、目录不一致等奇葩问题……

本文结合真实生产环境案例,手把手教你用clickhouse-backup工具完成远程备份恢复,从文件传输、解压到全量 / 单表恢复,附带避坑技巧和可直接复用的脚本,新手也能快速上手!

一、核心前提:远程备份文件上传(关键避坑点!)

恢复的第一步,是把远程服务器的备份文件完整迁移到本地 ClickHouse 服务器,目录名称一致性是成败关键

1. 上传命令(SCP 远程拷贝)

# 格式:scp -r 远程备份目录 本地服务器用户@IP:本地备份目录
scp -r webfunny_cloud_db_backup_2025-08-20T00-00-01/** root@你的服务器IP:/var/lib/clickhouse/backup/webfunny_cloud_db_backup_2025-08-20T00-00-01/

2. 致命坑点!目录名称必须完全一致

  • 远程备份文件夹名称:webfunny_cloud_db_backup_2025-08-20T00-00-01(含时间戳);
  • 本地目录必须同步创建同名文件夹:/var/lib/clickhouse/backup/webfunny_cloud_db_backup_2025-08-20T00-00-01/;
  • 错误后果:若名称不一致(比如少了时间戳、改了后缀),执行恢复命令会直接报:
  • error can't restore: backup 'xxx' is not found

3. 目录结构验证

上传后本地目录结构应如下(缺一不可):

/var/lib/clickhouse/backup/
└── webfunny_cloud_db_backup_2025-08-20T00-00-01/
    └── shadow/
        └── webfunny_cloud_db/  # 数据库名称对应的目录
            ├── table1.tar
            ├── table2.tar
            └── ...(所有表的压缩备份文件)

二、自动解压备份 tar 包(附万能脚本)

ClickHouse 备份文件默认是.tar压缩格式,必须先解压才能恢复,手动解压效率低还容易出错,直接用下面的脚本批量处理!

1. 解压脚本(可直接复制使用)

#!/bin/bash
# 功能:批量解压ClickHouse备份的tar文件,自动匹配目录结构
# 作者:技术实操派
# 适用场景:/var/lib/clickhouse/backup/备份目录/shadow/数据库名/ 下的tar文件

# 第一步:修改为你的备份目录(shadow下的数据库目录)
dir="/var/lib/clickhouse/backup/webfunny_cloud_db_backup_2025-08-20T00-00-01/shadow/webfunny_cloud_db/"

# 第二步:遍历所有.tar文件,自动创建对应目录并解压
for tar_file in $(find "$dir" -type f -name "*.tar"); do
  if [ -f "$tar_file" ]; then
    echo "正在解压:$tar_file..."
    # 提取tar文件名(去掉.tar后缀)
    result="${tar_file%.tar}"
    # 匹配ClickHouse默认目录结构(default_xxx → default/xxx)
    aw=$(echo "$tar_file" | awk -F 'default_' '{print $1}')
    a="default"
    # 创建解压目录(避免文件混乱)
    mkdir -p "$aw$a"
    # 解压到目标目录
    tar -xvf "$tar_file" -C "$aw$a"
    echo "$tar_file 解压完成!"
  else
    echo "警告:未找到文件 $tar_file"
  fi
done

echo "所有tar文件解压完毕!"

2. 脚本使用步骤

  1. 复制脚本到本地,命名为unzip_clickhouse_backup.sh;
  2. 修改dir变量为你的实际备份目录(重点核对数据库名和备份文件名);
  3. 赋予执行权限:chmod +x unzip_clickhouse_backup.sh;
  4. 执行脚本:./unzip_clickhouse_backup.sh;
  5. 验证:解压后会在shadow/webfunny_cloud_db/下生成对应表的目录,内含data.bin(数据文件)和schema.sql(结构文件)。

三、全量恢复:一键恢复整个数据库

解压完成后,用clickhouse-backup执行全量恢复,支持同时恢复表结构和数据。

1. 全量恢复命令

# 格式:clickhouse-backup restore 备份目录名称 -s -d --rm
clickhouse-backup restore webfunny_cloud_db_backup_2025-08-20T00-00-01 -s -d --rm

2. 参数说明(新手必看)

表格

参数

作用

-s

恢复表结构(schema)

-d

恢复表数据(data)

--rm

恢复前先删除目标数据库 / 表(避免数据冲突,谨慎使用!)

3. 恢复成功标识

执行命令后,终端输出类似如下内容,说明正在恢复(耐心等待,视数据量大小耗时不同):

2025/08/20 10:30:00 info starting restore backup 'webfunny_cloud_db_backup_2025-08-20T00-00-01'
2025/08/20 10:30:01 info restoring schema for database 'webfunny_cloud_db'
2025/08/20 10:30:05 info restoring data for table 'webfunny_cloud_db.event_20240430_192356218_72'

四、技术提效:Webfunny 全链路监控埋点平台,守护数据服务全生命周期

在 ClickHouse 数据库的日常运维中,除了做好备份恢复这类数据兜底工作,对数据库关联的业务系统做全链路的监控与埋点,更是从源头减少故障、提升问题排查效率的关键。而Webfunny - 全平台采集、监控、业务分析 | 全链路监控和埋点系统,正是为企业数字化业务保驾护航的一站式技术运维和业务分析平台。

Webfunny 支持全平台数据采集,覆盖 H5、PC/Web 前端、微信 / 支付宝小程序、Uni-app、Flutter、安卓、iOS、鸿蒙等全端场景,能实现亿级日志的高效处理,还提供源码定制与二开服务,满足企业个性化需求。其核心的前端监控模块可实现实时监控、智能告警,保障业务系统可用性与健康度;APM 后端监控能做到根因定位,实时动态生成全链路拓扑,深度分析代码级性能瓶颈,完美适配 ClickHouse 这类大数据存储场景下的高并发、海量数据监控需求。

同时,Webfunny 的埋点系统能全面收集用户交互和业务过程数据,结合事件分析、漏斗转化等多维分析模型,实现精细化用户运营,还支持私有化部署,全程数据存储于客户自有服务器,满足等保合规要求。目前已服务中国电科、中国中铁、中国联通、伊利、药明康德等央国企、ICT 企业、医疗、消费品、制造、金融等各行业头部客户,为其核心业务平台的稳定运行提供坚实保障。无论是 ClickHouse 数据库配套的业务系统监控,还是企业全链路的数字化分析,Webfunny 都能实现技术运维与业务分析的双重赋能。

五、进阶操作:单表恢复(精准操作,避免覆盖)

实际场景中常需要只恢复某个表(比如误删表数据),无需全量恢复,效率更高!

1. 单表恢复核心命令(3 种场景)

表格

恢复需求

命令

恢复表结构 + 数据

clickhouse-backup restore --table=数据库名.表名 备份目录名称

只恢复表数据

clickhouse-backup restore --data --table=数据库名.表名 备份目录名称

只恢复表结构

clickhouse-backup restore --schema --table=数据库名.表名 备份目录名称

2. 实操示例

# 示例1:恢复webfunny_cloud_db库的event_20240430_192356218_72表(结构+数据)
clickhouse-backup restore --table=webfunny_cloud_db.event_20240430_192356218_72 webfunny_cloud_db_backup_2025-08-20T00-00-01

# 示例2:只恢复上述表的数据(保留现有表结构)
clickhouse-backup restore --data --table=webfunny_cloud_db.event_20240430_192356218_72 webfunny_cloud_db_backup_2025-08-20T00-00-01

# 示例3:只恢复default库的users表结构
clickhouse-backup restore --schema --table=default.users webfunny_cloud_db_backup_2025-08-20T00-00-01

六、避坑指南(100% 遇到过的问题)

  1. 权限错误:执行命令时报permission denied,解决方案:
  2. chown -R clickhouse:clickhouse /var/lib/clickhouse/backup/(给 ClickHouse 用户目录权限);
  3. 备份目录找不到:除了名称一致,还要确保目录所有者是clickhouse,否则工具无法识别;
  4. 解压后数据错乱:不要手动修改 tar 文件名或解压目录,直接用脚本自动处理;
  5. 恢复后表数据为空:检查解压是否完整(每个 tar 文件对应一个表目录),且执行命令时指定了正确的备份目录名称;
  6. --rm 参数慎用:全量恢复时用--rm会删除现有数据库,建议先备份当前数据再执行。

总结

用clickhouse-backup恢复远程备份的核心逻辑:目录一致 + 正确解压 + 参数匹配。按照本文步骤,从文件上传到单表恢复,全程避坑,新手也能一次成功!

而在做好数据库备份恢复的基础上,搭配Webfunny - 全平台采集、监控、业务分析 | 全链路监控和埋点系统实现业务系统的全生命周期监控,能让技术运维工作更高效,从源头降低故障发生概率,为企业大数据业务的稳定运行筑牢双重防线。如果遇到 ClickHouse 备份恢复或系统监控的相关问题,欢迎在评论区留言讨论

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐