Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

br: backup checkpoint #12075

Merged
merged 11 commits into from
Dec 1, 2022
Merged
1 change: 1 addition & 0 deletions TOC.md
Original file line number Diff line number Diff line change
Expand Up @@ -150,6 +150,7 @@
- BR 特性
- [自动调节](/br/br-auto-tune.md)
- [批量建表](/br/br-batch-create-table.md)
- [断点备份](/br/br-checkpoint.md)
- [使用 Dumpling 和 TiDB Lightning 备份与恢复](/backup-and-restore-using-dumpling-lightning.md)
- [备份与恢复 RawKV](/br/rawkv-backup-and-restore.md)
- [增量备份与恢复](/br/br-incremental-guide.md)
Expand Down
40 changes: 40 additions & 0 deletions br/br-checkpoint.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
---
title: `br` 断点备份
Leavrth marked this conversation as resolved.
Show resolved Hide resolved
summary: 了解如何使用断点备份功能。在快照备份过程中,BR 可以定期记录已备份的分片,从而在重试备份时恢复到离上一次退出较近的阶段。
Leavrth marked this conversation as resolved.
Show resolved Hide resolved
---

# `br` 断点备份 <span class="version-mark">从 v6.5.0 版本开始引入</span>
Leavrth marked this conversation as resolved.
Show resolved Hide resolved

快照备份会因为一些可恢复性错误导致提前结束,例如硬盘空间占满、节点宕机等等一些突发情况。在 TiDB v6.5.0 之前,在错误被处理之后,之前备份的数据会被作废,你需要重新开始备份。对大规模集群来说,会造成大量不可忽视的额外成本。
Leavrth marked this conversation as resolved.
Show resolved Hide resolved

为了能够尽可能的继续上一次的备份,从 TiDB v6.5.0 起,备份恢复特性引入了断点备份的功能,此功能默认开启。开启该功能后,备份在意外退出后可以保留上一次备份的大部分进度。
Leavrth marked this conversation as resolved.
Show resolved Hide resolved

## 使用场景

如果你的 TiDB 集群规模很大,无法接受备份失败后需要重新备份的情况,那么,你可以开启断点备份功能。开启该功能后,br 工具会定期记录已备份的分片,使得在下一次重试备份时回到离上一次退出时较近的进度。
Leavrth marked this conversation as resolved.
Show resolved Hide resolved

## 使用限制

Leavrth marked this conversation as resolved.
Show resolved Hide resolved
在备份过程中,br 命令行工具会定期向 PD 更新备份 snapshot 的 `gc-safe-point`,从而避免在备份过程中数据被 GC。当 br 工具退出后,PD 中备份 snapshot 的 `gc-safe-point` 将无法及时更新。因此,在下一次重试备份前,数据有可能已经被 GC。

为了避免数据被 GC,当 br 工具没有指定具体的 `gcttl` 时,br 工具在默认情况下会让 `gc-safe-point` 保留大约 1 小时。如果你需要延长这个时间,可以设置参数 `gcttl`。

例如,设置 `gcttl` 为 15 小时来延长 `gc-safe-point` 的保留时间:
shichun-0415 marked this conversation as resolved.
Show resolved Hide resolved

```shell
br backup full \
--storage local:///br_data/ --pd "${PD_IP}:2379" \
--gcttl 54000
```

> **注意:**
>
> 快照备份结束后会将备份前创建的 `gc-safe-point` 删除,不需要手动删除。

## 实现原理

在快照备份过程中,br 工具将表编码成对应的键空间,并生成备份的 RPC 请求发送给所有 TiKV 节点。接收到备份请求后,TiKV 节点会选择请求范围内的数据进行备份。每当 TiKV 节点备份完一个 `region` 级别的数据,就会返回给 br 工具这段范围相关的备份信息。

通过记录这些返回的备份信息,br 工具能够及时获知已备份完成的键范围。断点备份功能会定期将这些新增的相关备份信息上传至外部存储中,从而持久化存储该备份任务已完成的键范围。

在重试备份时,br 工具会从外部存储读取已经备份的键范围,再与所需备份的键范围做比较,获得一个差集,从而得出断点备份还需要备份的键范围。