首页/数据/NoSQL 速查/BACKUP / RESTORE 备份命令
ClickHouse56 条

BACKUP / RESTORE 备份命令

ClickHouse 提供 SQL 级 BACKUP/RESTORE:目标可以是本地磁盘、文件或对象存储;支持整库、单表与增量(append 到同一备份路径),执行进度记录在 system.backups。

NoSQL 速查数据更新于 2026-10-13

SQL 级备份是什么

BACKUP 与 RESTORE 是语句形式的备份恢复:目标可以是本地磁盘、文件路径或对象存储,范围可以是整库、单表甚至指定分区,也可以把多次备份追加到同一目标形成增量链。任务进度记录在 system.backups 表里,用普通 SQL 就能查询状态。

与旧做法相比省了什么

在 BACKUP 语句出现之前,常见做法是先用 FREEZE 冻结分区,再拷贝硬链接并自行管理元数据;SQL 级备份把调度与状态记录交给服务端,恢复时也只需一条 RESTORE 语句。前提是备份目标磁盘要预先在存储配置里定义好,否则语句会因为找不到磁盘而失败。

基本信息

语法BACKUP TABLE db.t TO Disk('backups', 't.zip');RESTORE TABLE ... FROM ...
范围TABLE、DICTIONARY、DATABASE,可按 PARTITION 备份
增量把多次备份追加到同一目标形成增量链
进度system.backups 的 status、num_files、total_size、error
前提备份目标磁盘需在存储配置中预先定义

示例

示例
-- 备份单表到预定义磁盘
BACKUP TABLE analytics.events
TO Disk('backups', 'events-2024-07.zip');

-- 从备份恢复
RESTORE TABLE analytics.events
FROM Disk('backups', 'events-2024-07.zip');

-- 查看备份任务状态与体积
SELECT status, num_files, formatReadableSize(total_size) AS size, error
FROM system.backups
ORDER BY start_time DESC LIMIT 5;

典型使用场景

  • 迁移前整库备份:把库与表结构一起备份到对象存储
  • 单表保护:只备份核心业务表,压缩备份窗口
  • 分区级备份:历史大分区单独备份,避免每次全表重跑
  • 恢复演练:在测试环境用 RESTORE 验证备份真的可用
  • 审计排查:通过 system.backups 确认每天的备份是否成功

要素说明

要素含义注意
TO Disk(...)写入预定义磁盘磁盘需在存储配置中预先声明
PARTITION只备份指定分区适合历史分区归档
RESTORE从备份恢复目标表已存在时默认报错
system.backups任务与状态记录重点看 status 与 error
备份与恢复都占用 IO,大库备份放在低峰执行并监控磁盘水位;恢复到本地磁盘时还要预留足够临时空间,空间不足会让恢复中途失败。
恢复目标表已存在时默认报错,需要先删除或改名再恢复;直接在承载业务的生产表上做恢复操作风险很高,应先在测试环境验证流程。

易错点

  • 备份目标磁盘没有在存储配置里定义,备份语句会直接失败
  • 恢复目标表已存在时默认报错,先删除或改名再执行恢复,不要在生产表上试
  • 把备份与恢复安排在业务高峰期,会同时拖慢在线查询与写入
  • 只确认备份任务成功却不做恢复演练,真正需要时才发现备份不可用

数据来源与参考

  • ClickHouse Docs: BACKUP and RESTORE
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌