暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

TiDB 备份与恢复:BR 工具的深入应用与实战解析

原创 jiayou 2024-06-02
2574

TiDB 备份与恢复:BR 工具的深入应用与实战解析

一、TiDB 备份恢复工具 BR 简介

BR 全称为 Backup & Restore, 是TiDB分布式备份恢复的命令行工具, 用于对TiDB集群进行数据备份和恢复。

基于 Raft 协议和合理的部署拓扑规划,TiDB 实现了集群的高可用,当集群中少数节点挂掉时,集群依然能对外提供服务。在此基础上,为了更进一步保证用户数据的安全,TiDB 还提供了集群的备份与恢复 (Backup & Restore, BR) 功能,作为数据安全的最后一道防线,使得集群能够免于严重的自然灾害,提供业务误操作“复原”的能力。

TiDB BR 支持两种类型的备份。 全量备份包含集群某个时间点的全量数据,日志备份包含业务写入在 TiDB 产生的数据变更记录。推荐这两种备份方式一起使用:

  • 开启日志备份:运行 br log start 命令来启动日志备份任务,任务会在每个 TiKV 节点上持续运行,以小批量的形式定期将 TiDB 变更数据备份到指定存储中。
  • 定期执行快照(全量)备份:运行 br backup full 命令来备份集群快照到备份存储,例如在每天零点进行集群快照备份。

TiDB BR 备份的恢复:

  • 如果你只有全量备份数据,或者想恢复某个确定的全量备份,那么可以使用 br restore 恢复指定的全量备份。
  • 如果你按照以上推荐的的方式进行备份,那么你可以使用 br restore point 恢复到备份保留期内任意时间点。

二、备份恢复工具 BR 整体架构

快照(全量)数据备份和恢复的架构:

BR architecture

集群快照数据备份的流程如下:

snapshot backup process design

完整的备份交互流程描述如下:

1.BR 接收备份命令 br backup full。

  • 获得备份快照点 (backup ts) 和备份存储地址。

2.BR 调度备份数据。

  • Pause GC:配置 TiDB GC,防止要备份的数据被 TiDB GC 机制回收。
  • Fetch TiKV and Region info:访问 PD,获取所有 TiKV 节点访问地址以及数据的 Region 分布信息。
  • Request TiKV to back up data:创建备份请求,发送给 TiKV 节点,备份请求包含 backup ts、需要备份的 region、备份存储地址。

3.TiKV 接受备份请求,初始化 backup worker。

4.TiKV 备份数据。

  • Scan KVs:backup worker 从 Region (only leader) 读取 backup ts 对应的数据。
  • Generate SST:backup worker 将读取到的数据保存到 SST 文件,存储在内存中。
  • Upload SST:backup worker 上传 SST 文件到备份存储中。

5.BR 从各个 TiKV 获取备份结果。

  • 如果局部数据因为 Region 变动而备份失败,比如 TiKV 节点故障,BR 将重试这些数据的备份。
  • 如果任意数据被判断为不可重试的备份失败,则备份任务失败。
  • 全部数据备份成功后,则在最后完成元信息备份。

6.BR 备份元信息。

  • Back up schemas:备份 table schema,同时计算 table data checksum。
  • Upload metadata:生成 backup metadata,并上传到备份存储。backup metadata 包含 backup ts、表和对应的备份文件、data checksum 和 file checksum 等信息。

恢复集群快照备份数据的流程如下:

snapshot restore process design

完整的恢复交互流程描述如下:

1.BR 接收恢复命令 br restore。

  • 获得快照备份数据存储地址、要恢复的 database 或 table。
  • 检查要恢复的 table 是否存在及是否符合要求。

2.BR 调度恢复数据。

  • Pause Region schedule:请求 PD 在恢复期间关闭自动 Region schedule。
  • Restore schema:读取备份数据的 schema、恢复的 database 和 table(注意新建表的 table ID 与备份数据可能不一样)。
  • Split & scatter Region:BR 基于备份数据信息,请求 PD 分配 Region (split Region),并调度 Region 均匀分布到存储节点上 (scatter Region)。每个 Region 都有明确的数据范围 [start key, end key)。
  • Request TiKV to restore data:根据 PD 分配的 Region 结果,发送恢复请求到对应的 TiKV 节点,恢复请求包含要恢复的备份数据及 rewrite 规则。

3.TiKV 接受恢复请求,初始化 restore worker。

  • restore worker 计算恢复数据需要读取的备份数据。

4.TiKV 恢复数据。

  • Download SST:restore worker 从备份存储中下载相应的备份数据到本地。
  • Rewrite KVs:restore worker 根据新建表 table ID,对备份数据 kv 进行重写,即将原有的 kv 编码中的 table ID 替换为新创建的 table ID。对 index ID,restore worker 也进行相同处理。
  • Ingest SST:restore worker 将处理好的 SST 文件 ingest 到 RocksDB 中。
  • Report restore result:restore worker 返回恢复结果给 BR。

5.BR 从各个 TiKV 获取恢复结果。

  • 如果局部数据恢复因为 RegionNotFound 或 EpochNotMatch 等原因失败,比如 TiKV 节点故障,BR 重试恢复这些数据。
  • 如果存在备份数据不可重试的恢复失败,则恢复任务失败。
  • 全部备份都恢复成功后,则整个恢复任务成功。

日志备份和 PITR ( Point-in-time recovery)的架构:

日志备份的流程如下:

BR log backup process design

系统组件和关键概念:

  • local metadata:表示单 TiKV 节点备份下来的数据元信息,主要包括:local checkpoint ts、global checkpoint ts、备份文件信息。
  • local checkpoint ts (in local metadata):表示这个 TiKV 中所有小于 local checkpoint ts 的日志数据已经备份到目标存储。
  • global checkpoint ts:表示所有 TiKV 中小于 global checkpoint ts 的日志数据已经备份到目标存储。它由运行在 TiDB 中的 Coordinator 模块收集所有 TiKV 的 local checkpoint ts 计算所得,然后上报给 PD。
  • TiDB Coordinator 组件:TiDB 集群的某个节点会被选举为 Coordinator,负责收集和计算整个日志备份任务的进度 (global checkpoint ts)。该组件设计上无状态,在其故障后可以从存活的 TiDB 节点中重新选出一个节点作为 Coordinator。
  • TiKV log observer 组件:运行在 TiDB 集群的每个 TiKV 节点,负责从 TiKV 读取和备份日志数据。TiKV 节点故障的话,该节点负责备份数据范围,在 Region 重新选举后,会被其他 TiKV 节点负责,这些节点会从 global checkpoint ts 重新备份故障范围的数据。

完整的备份交互流程描述如下:

1.BR 接收备份命令 br log start。

  • 解析获取日志备份任务的 checkpoint ts(日志备份起始位置)、备份存储地址。
  • Register log backup task:在 PD 注册日志备份任务 (log backup task)。
  • 2.TiKV 监控日志备份任务的创建与更新。
  • Fetch log backup task:每个 TiKV 节点的 log backup observer 监听 PD 中日志备份任务的创建与更新,然后备份该节点上在备份范围内的数据。

3.TiKV log backup observer 持续地备份 KV 变更日志。

  • Read kv change data:读取 kv 数据变更,然后保存到自定义格式的备份文件中。
  • Fetch global checkpoint ts:定期从 PD 查询 global checkpoint ts。
  • Generate local metadata:定期生成 local metadata(包含 local checkpoint ts、global checkpoint ts、备份文件信息)。
  • Upload log data & metadata:定期将日志备份数据和 local metadata 上传到备份存储中。
  • Configure GC:请求 PD 阻止未备份的数据(大于 local checkpoint ts)被 TiDB GC 机制回收掉。

4.TiDB Coordinator 监控日志备份进度。

  • Watch backup progress:轮询所有 TiKV 节点,获取各个 Region 的备份进度 (Region checkpoint ts)。
  • Report global checkpoint ts:根据各个 Region checkpoint ts,计算整个日志备份任务的进度 (global checkpoint ts),然后上报给 PD。

5.PD 持久化日志备份任务状态。可以通过 br log status 查询。

PITR 的流程如下:

Point-in-time recovery process design

完整的 PITR 交互流程描述如下:

1.BR 接收恢复命令 br restore point。

  • 解析获取全量备份数据地址、日志备份数据地址、恢复到的时间点。
  • 查询备份数据中恢复数据对象(database 或 table),并检查要恢复的表是否存在并符合要求。

2.BR 恢复全量备份。

3.BR 恢复日志备份。

  • Read backup data:读取日志备份数据,计算需要恢复的日志备份数据。
  • Fetch Region info:访问 PD,获取所有 Region 和 KV range 的对应关系。
  • Request TiKV to restore data:创建日志恢复请求,发送到对应的 TiKV,日志恢复请求包含要恢复的日志备份数据信息。

4.TiKV 接受 BR 的恢复请求,初始化 log restore worker。

  • log restore worker 获取需要恢复的日志备份数据。

5.TiKV 恢复日志备份数据。

  • Download KVs:log restore worker 根据日志恢复请求中要恢复的备份数据,从备份存储中下载相应的备份数据到本地。
  • Rewrite KVs:log restore worker 根据恢复集群表的 table ID 对备份数据的 kv 进行重写 —— 将原有的 kv 编码中的 table ID 替换为新创建的 table ID。对 index ID,log restore worker 也进行相同的处理。
  • Apply KVs:log restore worker 将处理好的 kv 通过 raft 接口写入 store (RocksDB) 中。
  • Report restore result:log restore worker 返回恢复结果给 BR。

6.BR 从各个 TiKV 获取恢复结果。

  • 如果局部数据恢复因为 RegionNotFound 或 EpochNotMatch 等原因失败,比如 TiKV 节点故障,BR 重试恢复这些数据。
  • 如果存在备份数据不可重试的恢复失败,则恢复任务失败。
  • 全部备份数据都恢复成功后,则恢复任务成功。

三、备份恢复工具 BR 原理

BR做的事情,简单来说,就是通过一个PD地址,找到所有的tikv-server,扫描TiKV的数据得到全局一致性的快照,存储下来;恢复也是通过一个PD地址,将备份快照恢复到TiKV中。

特点:热备份、物理备份、增量备份和恢复、数据对象备份和恢复(非全库)、远程备份、备份数据加密。

四、备份恢复工具 BR 的适用场景

  • 应用场景
  • 常规的一致性备份恢复
  • 大规模数据迁移并有时间限制
  • 只能恢复到TiDB数据库中
  • 备份输出文件
  • SST文件
  • backupmeta文件
  • backup.lock文件

五、Backup & Restore (BR) 数据迁移工具新特性

  • 备份自动调节

为了减少备份任务对在线集群的影响,从 TiDB v5.4.0 起,引入了自动调节功能,此功能默认开启。在集群资源占用率较高的情况下,备份功能可以通过该功能自动限制备份使用的资源,从而减少对集群的影响。

  • 批量建表

使用 Backup & Restore (BR) 执行数据恢复任务时,BR 会先在目标 TiDB 集群上创建库和表,然后再把已备份的数据恢复到表中。TiDB v6.0.0 之前,在数据恢复阶段创建表时,BR 采用了串行执行的方案。然而,当需要恢复的数据中带有大量的表(约 50000 张)时,该方案会在创建表上消耗较多时间。

为了加快创建表的速度,以减少数据恢复的时间,TiDB 在 v6.0.0 中引入了批量建表功能,此功能默认开启。

  • 断点备份

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

为了尽可能继续上一次的备份,从 TiDB v6.5.0 起,备份恢复特性引入了断点备份的功能。该功能可以在备份意外中断后保留上一次备份的大部分进度。

  • 断点恢复

快照恢复或日志恢复会因为一些可恢复性错误导致提前结束,例如硬盘空间占满、节点宕机等等一些突发情况。在 TiDB v7.1.0 之前,在错误被处理之后,之前恢复的进度会作废,你需要重新进行恢复。对大规模集群来说,会造成大量额外成本。

为了尽可能继续上一次的恢复,从 TiDB v7.1.0 起,备份恢复特性引入了断点恢复的功能。该功能可以在意外中断后保留上一次恢复的大部分进度。

使用场景

通过对大数据量的 TiDB 集群进行数据备份和恢复,实现数据迁移

上游

TiDB

下游(输出文件)

SST,backup.meta 文件,backup.lock 文件

主要优势

适用于向另一个TiDB迁移数据。

支持数据冷备份到外部存储,可以用于灾备恢复。

使用限制

BR 恢复到 TiCDC / Drainer 的上游集群时,恢复数据无法由 TiCDC / Drainer 同步到下游。

BR 只支持在 mysql.tidb 表中 new_collation_enabled 开关值相同的集群之间进行操作

六、备份恢复工具 BR 的使用限制

1.无法恢复字符集 charset=GBK 的表到 v5.4.0 之前的 TiDB 集群

2.备份与恢复的兼容性问题

  • 聚簇索引(tidb_enable_clustered_index)
  • New collation(new_collations_enabled_on_first_bootstra)排序
  • 全局临时表(BR v5.3.0及以上才支持)
  • 版本兼容问题(check-requirements)

3.BR恢复的数据无法通过TiCDC或TiDB Binlog同步到下游

七、备份恢复工具 BR 的部署与使用

1、BR 的部署要求

  • 推荐运行在 CPU:8 核,内存 16 GB 以上的节点上
  • 在业务低峰时执行备份操作
  • 不推荐向正在提供服务的生产集群执行恢复
  • 不推荐多个BR备份和恢复任务并行运行
  • BR 默认会分别在备份、恢复完成后进行数据校验

--备份时关闭校验(--checksum=false),只在恢复时开启校验

  • 推荐使用支持 S3/GCS/Azure Blob Storage 协议的存储系统保存备份数据

2、BR 的最佳实践

  • 推荐在业务低峰时执行备份操作。
  • 恢复期间对在线业务影响很大,建议低峰期或者限速(rate-limit) 执行恢复。
  • BR 备份最好串行执行。
  • BR 恢复最好串行执行。
  • 推荐在-s指定的备份路径上挂载一个共享存储。
  • 在使用共享存储时,推荐使用高吞吐的存储硬件

3、BR 的部署

方法一、使用TiUP 执行tiup install br 命令

查看已安装的组件

查看能安装的组件

查看能安装的br版本

安装br组件

查看安装的信息

方法二、tidb-commun ity-toolkit安装包

下载相关toolkit工具包并配置环境变量

  1. 解压工具包

2.配置环境变量

$vi .bash_profile

添加如下:

export PATH=/home/tidb/.tiup/bin:$PATH:/usr/local/mysql/mysql-8.0/bin:/home/tidb/tidb-community-toolkit-v7.5.1-linux-amd64

$source .bash_profile

3.查看br命令行工具版本信息

4、BR 的使用命令

1.通过 SQL 语句

  • TiDB 支持使用SQL 语句 BACKUP 和RESTORE 进行备份恢复。
  • 如果要查看备份恢复的进度,可以使用SHOW BACKUPS|RESTORES 语句。

2.通过命令行工具

TiDB 支持使用BR 命令行工具进行备份恢复。

br 由多层命令组成。目前,br 包含的主要命令有:

  • br backup:用于备份 TiDB 集群的全量数据。
  • br log:用于启动和管理日志备份任务。
  • br restore:用于恢复备份数据到 TiDB 集群。

br backup 和 br restore 还包含这些子命令:

  • full:用于备份或恢复整个备份数据。
  • db:用于备份或恢复集群中的指定数据库。
  • table:用于备份或恢复集群指定数据库中的单张表。

常用选项

  • --pd:PD 访问地址选项,例如 "${PD_IP}:2379"。
  • -s 或 --storage:备份数据的存储地址选项。TiDB备份恢复支持以Amazon S3、Google Cloud Storage (GCS)、Azure Blob Storage及NFS为备份存储。关于URI格式的详细信息,请参考外部存储服务的 URI 格式
  • --ca:指定 PEM 格式的受信任 CA 的证书文件路径。
  • --cert:指定 PEM 格式的 SSL 证书文件路径。
  • --key:指定 PEM 格式的 SSL 证书密钥文件路径。
  • --status-addr:向 Prometheus 提供统计数据的监听地址。
  • --concurrency:备份或恢复阶段的任务并发数。
  • --compression:备份生成文件的压缩算法,支持 lz4、snappy、zstd,默认 zstd(多数情况下无须修改)。如何选择不同的压缩算法,可以参考文档
  • --compression-level:备份选择的压缩算法对应的压缩级别,zstd 默认为 3。大多数情况下无需设置。
  • --backupts:快照对应的物理时间点,格式可以是 TSO 或者时间戳,例如 400036290571534337 或者 2018-05-11 01:42:23。如果该快照的数据被垃圾回收 (GC) 了,那么 br backup 命令会报错并退出。如果你没有指定该参数,那么 br 会选取备份开始的时间点所对应的快照。

5、BR 备份恢复案例

备份到本地盘创建相关目录及属组权限(TiKV节点操作)

#mkdir -p /home/tidb/backupdata/

#chown tidb:tidb /home/tidb/backupdata/

#chmod 777 /home/tidb/backupdata/

#ls -ltr /home/tidb/

1.进行集群快照备份恢复(全库)

快照备份是集群全量备份的一种实现。它基于 TiDB 的多版本并发控制 (MVCC) 实现,将指定快照包含的所有数据备份到目标存储中。备份下来的数据大小约等于集群(压缩后的)单副本数据大小。备份完成之后,你可以在一个空集群或不存在数据冲突(相同 schema 或 table)的集群执行快照备份恢复,将集群恢复到快照备份时的数据状态,同时恢复功能会依据集群副本设置恢复出多副本。

除了基础的备份和恢复功能,快照备份和恢复还提供以下功能:

  • 备份指定时间点的快照数据
  • 恢复指定数据库或表的数据

关于TiDB 日志备份与 PITR 使用

全量备份包含集群某个时间点的全量数据,但是不包含其他时间点的更新数据,而 TiDB 日志备份能够将业务写入 TiDB 的数据记录及时备份到指定存储中。如果你需要灵活的选择恢复的时间点,即实现 Point-in-time recovery (PITR),可以开启日志备份,并定期执行快照(全量)备份

详细的使用指南https://docs.pingcap.com/zh/tidb/v7.5/br-pitr-guide

集群快照(全库)备份

执行 tiup br backup full 命令,可以备份 TiDB 最新的或者指定时间点的快照数据。执行 tiup br backup full --help 可获取该命令的使用帮助。

tiup br backup full \

--pd "${PD_IP}:2379" \

--backupts '2022-09-08 13:30:00' \

--storage "s3://${backup_collection_addr}/snapshot-${date}?access-key=${access-key}&secret-access-key=${secret-access-key}" \

--ratelimit 128 \

--log-file backupfull.log

备注:

--pd 随意一个PD节点IP都可以

--backupts:快照对应的物理时间点。如果该快照的数据已经被 GC,那么 tiup br backup 命令会报错退出;如果没有指定该参数,br 命令行工具会选取备份开始的时间点所对应的快照。

--storage "s3://${backup_collection_addr}/snapshot-${date}?access-key=${access-key}&secret-access-key=${secret-access-key}" \ 共享存储备份目录

--storage "local:///home/tidb/backupdata"\ 每个TiKV节点都存在相关目录(没有需要创建)并且要有读写权限777

--ratelimit 表示每个TiKV 执行备份数据任务的速度上限,单位为 MiB/s。

--log-file 表示在您当前操作命令节点的路径下生成全库备份日志,同时也会自动创建/tmp/backup目录放置备份的源数据信息(二进制)和锁定数据的信息。

注意:

BR 工具已支持自适应 GC,会自动将 backupTS(默认是最新的 PD timestamp)注册到 PD 的 safePoint,保证 TiDB 的 GC Safe Point 在备份期间不会向前移动,即可避免手动设置 GC。

备份期间终端会显示进度条,效果如下。当进度条达到 100% 时,表示备份完成。

查询快照备份的时间点信息

出于管理备份数的需要,如果你需要查看某个快照备份对应的快照物理时间点,可以执行下面的命令:

tiup br validate decode --field="end-version" \

--storage "s3://backup-101/snapshot-202209081330?access-key=${access-key}&secret-access-key=${secret-access-key}" | tail -n1

关于备份文件

快照备份会产生如下类型文件:

  • SST 文件:存储 TiKV 备份下来的数据信息。单个 SST 文件大小等于 TiKV Region 的大小。
  • backupmeta 文件:存储本次备份的元信息,包括备份文件数、备份文件的 Key 区间、备份文件大小和备份文件 Hash (sha256) 值。
  • backup.lock 文件:用于防止多次备份到同一目录。

SST 文件会根据 storeID 划分子目录。目录结构如下:

集群快照(全库)恢复

br restore full \

--pd"${PDIP}:2379" \

--storage "local:///home/tidb/backupdata" \

--ratelimit 128 \

--log-file restorefull. log

备注:备份到本地的时候每个TiKV只备份自己节点的数据,恢复的时候需要全部的数据,因此需要汇聚全部数据到该目录下。使用scp命令传输。共享存储不需要。

注意

如果没有挂载 NFS 到 br 工具或 TiKV 节点,或者使用了支持 S3、GCS 或 Azure Blob Storage 协议的远端存储,那么 br 工具备份的数据会在各个 TiKV 节点生成。注意这不是推荐的 br 工具使用方式,因为备份数据会分散在各个节点的本地文件系统中,聚集这些备份数据可能会造成数据冗余和运维上的麻烦,而且在不聚集这些数据便直接恢复的时候会遇到 SST file not found 报错。

恢复期间终端会显示进度条,效果如下。当进度条达到 100% 时,表示恢复完成。在完成恢复后,br 工具为了确保数据安全性,还会校验恢复数据。

登录数据库前后对比如下图:

恢复单个数据库的数据

要将备份数据中的某个数据库恢复到集群中,可以使用 br restore db 命令。以下示例只恢复 test 库的数据:

tiup br restore db --pd "${PD_IP}:2379" \

--db "test" \

--storage "s3://backup-101/snapshot-202209081330?access-key=${access-key}&secret-access-key=${secret-access-key}"

登录数据库前后对比如下图:

恢复单张表的数据

要将备份数据中的某张数据表恢复到集群中,可以使用 br restore table 命令。以下示例只恢复 test.usertable 表的数据:

tiup br restore table --pd "${PD_IP}:2379" \

--db "test" \

--table "usertable" \

--storage "s3://backup-101/snapshot-202209081330?access-key=${access-key}&secret-access-key=${secret-access-key}"

使用表库过滤功能恢复部分数据

要通过复杂的过滤条件恢复多个表,可以使用 br restore full 命令,并用 --filter 或 -f 指定表库过滤的条件。以下示例恢复符合 db*.tbl* 条件的表的数据:

tiup br restore full --pd "${PD_IP}:2379" \

--filter 'db*.tbl*' \

--storage "s3://backup-101/snapshot-202209081330?access-key=${access-key}&secret-access-key=${secret-access-key}"

登录数据库前后对比如下图:

恢复 mysql 数据库下的表

备注:自 br v5.1.0 开始,快照备份会备份 mysql schema 下的系统表数据,而不会默认恢复这些数据。自 br v6.2.0 开始,在设置 --with-sys-table 下,恢复数据时将同时恢复部分系统表相关数据。

详细见链接:https://docs.pingcap.com/zh/tidb/v7.5/br-snapshot-guide

2. 进行单库备份恢复

单库备份

br backup db \

--pd "${PDIP}:2379" \

--db test \

--storage "local:///home/tidb/backupdata"

--ratelimit 128 \

--log-file backup_db. log

单库恢复

br restore db \

--pd "${PDIP}:2379" \

--db "test" I

--storage "local:///home/tidb/backupdata"

--log-file restore_db. log

3. 进行单表备份恢复

单表备份

br backup table \

--pd "${PDIP}:2379" \

--db test \

--table usertable \

--storage "local:///home/tidb/backupdata" \

--ratelimit 120 \

--log-file backup_table. log

单表恢复

如果你需要用复杂的过滤条件来恢复多个表,执行br restore full命令,并用--filter或-f指定使用表库过滤。

br restore table \

--pd "${PDIP}:2379" \

--db "test" \

--table "usertable" \

--storage "local:///home/tidb/backupdata" \

--log-file restore_table. log

4. 进行多表备份恢复

多张表备份

br backup full \

--pd "${PDIP}:2379" \

--filter ‘db*.tbl*’ \

--storage "local:///home/tidb/backupdata" \

--ratelimit 128 \

--log-file backupfull. log

备注:br backup full 表示全部

--filter ‘db*.tbl*’ 表示过来db开头的数据库中tbl开头的表

多张表恢复

br restore full \

--pd "${PDIP}:2379" \

--filter ‘db*.tbl*’ \

--storage "local:///home/tidb/backupdata" \

--log-file restorefull. log

5. 进行增量备份与恢复

增量备份

首次增量备份必须有全量备份,设置上一次的备份目录(首次为全量备份目录)

LAST_BACKUP_TS=`br validate decode --field="end-version" -s local:///home/tidb/backupdata| tail -n1`

备份增量,只需要在备份的时候指定上一次的备份时间戳--lastbackupts即可。

br backup full\

--pd ${PDIP}:2379 \

-storage “local:///home/tidb/backupdata/incr”\

--lastbackupts ${LAST_BACKUP_TS}

备注:区分开全量备份目录为local:///home/tidb/backupdata,增量备份目录为local:///home/tidb/backupdata/incr

差异增量备份,累计增量备份,区别是每次都和增量比还是和全量比。

增量恢复

增量恢复的方法和使用BR 进行全量恢复的方法并无差别。需要注意,恢复增量数据的时候,需要保证备份时指定的 lastbackupts 之前备份的数据已经全部恢复到目标集群。

首先恢复全量备份上面案例有

全库恢复

br restore full \

--pd"${PDIP}:2379" \

--storage " local:///home/tidb/backupdata " \

--ratelimit 128 \

--log-file restorefull. log

备注:备份到本地的时候每个TiKV只备份自己节点的数据,恢复的时候需要全部的数据,因此需要汇聚全部数据到该目录下。使用scp命令传输。

再次恢复增量备份

br restore full\

--pd ${PDIP}:2379 \

-storage “local:///home/tidb/backupdata/incr”\

--ratelimit 128 \

--log-file restore_incr. log

6、BR 备份恢复性能与影响

快照备份的性能与影响

TiDB 备份功能对集群性能(事务延迟和 QPS)有一定的影响,但是可以通过调整备份的线程数 backup.num-threads,以及增加集群配置,来降低备份对集群性能的影响。

你可以通过如下方案手动控制备份对集群性能带来的影响。但是,这两种方案在减少备份对集群的影响的同时,也会降低备份任务的速度。

  • 使用 --ratelimit 参数对备份任务进行限速。请注意,这个参数限制的是把备份文件存储到外部存储的速度。计算备份文件的大小时,请以备份日志中的 backup data size(after compressed) 为准。设置 --ratelimit 后,为了避免任务数过多导致限速失效,br 的 concurrency 参数会自动调整为 1。
  • 调节 TiKV 配置项 backup.num-threads,限制备份任务使用的工作线程数量。内部测试数据表明,当备份的线程数量不大于 8、集群总 CPU 利用率不超过 60% 时,备份任务对集群(无论读写负载)几乎没有影响。
  • 通过限制备份的线程数量可以降低备份对集群性能的影响,但是这会影响到备份的性能,以上的多次备份测试结果显示,单 TiKV 存储节点上备份速度和备份线程数量呈正比。在线程数量较少的时候,备份速度约为 20 MiB/线程数。例如,单 TiKV 节点 5 个备份线程可达到 100 MiB/s 的备份速度。

快照恢复的性能与影响

  • TiDB 恢复的时候会尽可能打满 TiKV CPU、磁盘 IO、网络带宽等资源,所以推荐在空的集群上执行备份数据的恢复,避免对正在运行的业务产生影响。
  • 备份数据的恢复速度与集群配置、部署、运行的业务都有比较大的关系。在内部多场景仿真测试中,单 TiKV 存储节点上备份数据恢复速度能够达到 100 MiB/s。在不同用户场景下,快照恢复的性能和影响应以实际测试结论为准。

八、问题总结

问题一、恢复时提示需要drop existing databases and tables

解决办法:

恢复之前删掉之前库

问题二、恢复时提示节点目录、文件不存在

解决办法:

本地备份时需要重建相同的目录属组和权限;恢复需要完整的备份文件。因此生产环境推荐使用支持 S3/GCS/Azure Blob Storage 协议的存储系统保存备份数据

问题三、BR 恢复特定时间单表单库,需要全库恢复,无法做到精准恢复

解决办法:

考虑别的备份恢复方式,或者等待BR下一版本实现。

最后修改时间:2024-06-02 07:39:34
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论