Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

system.backups

描述

包含所有 BACKUPRESTORE 操作及其当前状态和其他属性的列表。请注意,该表不是持久化的,仅显示自上次服务器重启后执行的操作。

恢复操作的原子性

RESTORE 不是事务性操作,失败时不会回滚。对于每个表,所有选定的 parts 都会先复制完成,然后才会附加;但附加阶段本身并非事务性的——parts 会逐个对外可见。各个表彼此独立处理。

表之间彼此独立。 即使同一条命令中的另一个表随后失败,已完成恢复的表也会保留在原处:

RESTORE TABLE db.t0, TABLE db.t1
FROM S3('<endpoint>', '<access_key>', '<secret_key>')
SETTINGS
    allow_non_empty_tables = true;

如果此命令在 db.t0 已完全恢复、但 db.t1 尚未完成时失败,db.t0 仍会处于已恢复状态。

**PARTITIONS 子句不是提交边界。**它只用于选择要恢复表中的哪些 parts:

RESTORE TABLE db.t0 PARTITIONS '2026-06-01', '2026-06-02', '2026-06-03'
FROM S3('<endpoint>', '<access_key>', '<secret_key>')
SETTINGS
    allow_non_empty_tables = true;

表中所有选定的 parts 都会先被复制,只有在它们全部就绪后才会统一附加。因此,如果此命令在复制阶段失败——例如分区 2026-06-01 已完全复制,但 2026-06-022026-06-03 仍未完成——那么 2026-06-01 不会被提交,并且该表不会保留此次命令恢复的任何数据。复制阶段一旦完成并开始进入 attach 步骤后,parts 会逐个提交,因此如果在 attach 期间发生故障,表可能会处于部分恢复的状态,且无法回滚。

如果要让各个分区独立提交 (这样即使后续失败,已完成的分区也会保留下来,并且可以单独重试) ,请为每个分区分别运行一次 RESTORE,并在第一次之后使用 SETTINGS allow_non_empty_tables = true

Navigation