0
0
1
0
博客/.../

体验下br恢复时候的断点续传功能

 lmdb  发表于  2025-10-31

在 TiDB 中,BR(Backup & Restore)工具支持断点续传功能,主要用于在备份或恢复过程中因网络中断、节点故障等意外情况中断后,能够从断点处继续操作,避免重新执行整个流程,提高效率。

从 TiDB v7.1.0 起,备份恢复特性引入了断点恢复的功能

以下是关于 BR 断点续传的关键信息:

1. 断点续传的支持场景

BR 的断点续传主要针对 备份(br backup恢复(br restore 操作,具体支持的场景包括:

  • 全量备份 / 恢复
  • 增量备份 / 恢复(基于 SST 文件的增量同步)
  • 单表 / 多表备份 / 恢复
  • 分区表备份 / 恢复

测试案例,在pingcap库中保留fund 表,然后对pingcap库做全库br restore操作,提示 "Full Restore failed summary"

MySQL [pingcap]> delete from fund where f_id = 3;
Query OK, 1 row affected (0.02 sec)

MySQL [pingcap]> select *  from fund;
+-----------------+------+-----------+----------+------------+-----------+
| f_name          | f_id | f_type    | f_amount | risk_level | f_manager |
+-----------------+------+-----------+----------+------------+-----------+
| 股票            |    1 | 股票型    |    10000 | 高         |         1 |
| 投资            |    2 | 债券型    |    10000 | 中         |         2 |
| 沪深300指数     |    4 | 指数型    |    10000 | 中         |         4 |
+-----------------+------+-----------+----------+------------+-----------+
3 rows in set (0.00 sec)

MySQL [pingcap]> exit
Bye
[tidb@tidb01 pingcap]$ 
[tidb@tidb01 pingcap]$ 
[tidb@tidb01 pingcap]$ 
[tidb@tidb01 pingcap]$ 
[tidb@tidb01 pingcap]$ tiup br restore full \
>     --pd "192.168.2.73:2379" \
>     --filter 'pingcap.*'  \
> --ratelimit 128 \
>     -s "local:///tidb/backup/pingcap" \
>     --log-file /tidb/backup/pingcap/restore_pingcap_1023.log 
Starting component br: /home/tidb/.tiup/components/br/v8.5.2/br restore full --pd 192.168.2.73:2379 --filter pingcap.* --ratelimit 128 -s local:///tidb/backup/pingcap --log-file /tidb/backup/pingcap/restore_pingcap_1023.log
Detail BR log in /tidb/backup/pingcap/restore_pingcap_1023.log 
Full Restore <-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------> 100.00%
[2025/10/23 15:45:54.020 +08:00] [INFO] [collector.go:77] ["Full Restore failed summary"] [total-ranges=27] [ranges-succeed=27] [ranges-failed=0] [restore-ranges=14]
Error: failed to validate checksum: [BR:Restore:ErrRestoreChecksumMismatch]restore checksum mismatch

2. 断点续传的实现原理

在br恢复过程中因异常中断,会在数据库中产生一个新库,名字 "_TiDB_BR_Temporary_Snapshot_Restore_Checkpoint"

MySQL [(none)]> show databases;
+-------------------------------------------------+
| Database                                        |
+-------------------------------------------------+
| INFORMATION_SCHEMA                              |
| METRICS_SCHEMA                                  |
| PERFORMANCE_SCHEMA                              |
| __TiDB_BR_Temporary_Snapshot_Restore_Checkpoint |
| mysql                                           |
| pingcap                                         |
| sys                                             |
| test                                            |
+-------------------------------------------------+
8 rows in set (0.00 sec)

MySQL [(none)]> use "__TiDB_BR_Temporary_Snapshot_Restore_Checkpoint"
Database changed
MySQL [__TiDB_BR_Temporary_Snapshot_Restore_Checkpoint]> show tables;
+-----------------------------------------------------------+
| Tables_in___TiDB_BR_Temporary_Snapshot_Restore_Checkpoint |
+-----------------------------------------------------------+
| cpt_checksum                                              |
| cpt_data                                                  |
| cpt_metadata                                              |
+-----------------------------------------------------------+
3 rows in set (0.00 sec)

在 TiDB BR(Backup & Restore)工具中,__TiDB_BR_Temporary_Snapshot_Restore_Checkpoint 是一个临时内部表,主要用于在快照恢复(Snapshot Restore) 过程中记录恢复进度,支持断点续传功能。以下是关于该表的详细说明:

2.1 作用与功能

该表是 BR 在执行恢复操作时,自动在目标 TiDB 集群中创建的临时表,用于:

  • 记录恢复进度:存储已成功恢复的 KV 数据范围、SST 文件信息等 checkpoint(检查点)数据。
  • 支持断点续传:当恢复过程因网络中断、节点故障等原因中断后,重新执行恢复命令时,BR 会通过读取该表的记录,跳过已完成的部分,从断点继续恢复,避免重复处理。

2.2 表的特性

  • 临时性:仅在恢复过程中存在,恢复完成后会被 BR 自动删除(无论成功或失败,正常情况下都会清理)。
  • 内部性:由 BR 工具自动创建和维护,用户无需手动操作,也不建议直接修改该表的数据,否则可能导致恢复异常。
  • 存储位置:创建在目标 TiDB 集群的 mysql 系统数据库中,表名固定为 __TiDB_BR_Temporary_Snapshot_Restore_Checkpoint

2.3 与断点续传的关联

BR 的快照恢复断点续传依赖该表的记录:

  • 恢复开始时,BR 会创建该表并初始化进度信息。

  • 恢复过程中,BR 会定期将已完成的任务进度(如已导入的 SST 文件、KV 范围)写入该表。

  • 若恢复中断,重新执行恢复命令时,BR 会先检查该表是否存在:

    • 若存在,读取进度信息,跳过已完成部分,继续处理剩余数据。
    • 若不存在(如首次恢复、或上次恢复已清理),则从头开始恢复。

3. 使用方法

断点续传无需显式开启,只需在操作中断后,使用相同的命令参数重新执行备份或恢复命令即可。BR 会自动检测已完成的进度并从断点继续。

测试,我们drop table fund 后继续执行上一次的br restore 命令,提示"Full Restore success summary",同时因异常产生的保存断点信息的库消失

MySQL [pingcap]> drop table fund;
Query OK, 0 rows affected (0.40 sec)

MySQL [pingcap]> exit
Bye
[tidb@tidb01 pingcap]$ 
[tidb@tidb01 pingcap]$ tiup br restore full     --pd "192.168.2.73:2379"     --filter 'pingcap.*'  --ratelimit 128     -s "local:///tidb/backup/pingcap"     --log-file /tidb/backup/pingcap/restore_pingcap_1023.log 
Starting component br: /home/tidb/.tiup/components/br/v8.5.2/br restore full --pd 192.168.2.73:2379 --filter pingcap.* --ratelimit 128 -s local:///tidb/backup/pingcap --log-file /tidb/backup/pingcap/restore_pingcap_1023.log
Detail BR log in /tidb/backup/pingcap/restore_pingcap_1023.log 
Full Restore <-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------> 100.00%
[2025/10/23 15:53:09.706 +08:00] [INFO] [collector.go:77] ["Full Restore success summary"] [total-ranges=27] [ranges-succeed=27] [ranges-failed=0] [restore-ranges=14] [total-take=6.474246733s] [BackupTS=461688651129028609] [RestoreTS=461689582670839832] [total-kv=491] [skipped-kv-count-by-checkpoint=487] [total-kv-size=7.363MB] [average-speed=1.137MB/s] [skipped-kv-size-by-checkpoint=7.363MB] [restore-data-size(after-compressed)=1.61MB] [Size=1609744]
[tidb@tidb01 pingcap]$ 
Your MySQL connection id is 1189104598
Server version: 8.0.11-TiDB-v8.5.2 TiDB Server (Apache License 2.0) Enterprise Edition, MySQL 8.0 compatible

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQL [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| INFORMATION_SCHEMA |
| METRICS_SCHEMA     |
| PERFORMANCE_SCHEMA |
| mysql              |
| pingcap            |
| sys                |
| test               |
+--------------------+
7 rows in set (0.00 sec)

MySQL [(none)]> 

通过断点续传,BR 工具能有效应对备份 / 恢复过程中的意外中断,减少重复操作的时间成本,尤其适合大规模数据场景。

0
0
1
0

版权声明:本文为 TiDB 社区用户原创文章,遵循 CC BY-NC-SA 4.0 版权协议,转载请附上原文出处链接和本声明。

评论
暂无评论