[转帖]使用 BR 命令行备份恢复

使用,br,命令行,备份,恢复 · 浏览次数 : 0

小编点评

**增量恢复** **方法一:通过 Placement rules 的隔离** ``` # 设置 PD 的 Placement rules echo "config set enable-placement-rules true" | pd-ctl编辑恢复节点 TiKV 的配置文件 # 设置一些恢复节点的 labels server labels = { exclusive = "restore" } # 启动恢复节点的 TiKV echo "server start restore" | pd-ctl执行恢复节点的配置文件 ``` **方法二:通过 Placement rules 的隔离并指定在线参数** ``` # 设置 PD 的 Placement rules echo "config set enable-placement-rules true" | pd-ctl编辑恢复节点 TiKV 的配置文件 # 设置一些恢复节点的 labels server labels = { exclusive = "restore" } # 设置一些 online 参数 echo "server set enable-online-replication true" | pd-ctl执行恢复节点的配置文件 # 启动恢复节点的 TiKV echo "server start online" | pd-ctl执行恢复节点的配置文件 ``` **在线恢复** **方法一:通过 Placement rules 的隔离** ``` # 设置 PD 的 Placement rules echo "config set enable-placement-rules true" | pd-ctl编辑恢复节点 TiKV 的配置文件 # 设置一些恢复节点的 labels server labels = { exclusive = "restore" } # 启动在线恢复节点的 TiKV echo "server start online" | pd-ctl执行恢复节点的配置文件 ``` **方法二:通过 Placement rules 的隔离并指定在线参数** ``` # 设置 PD 的 Placement rules echo "config set enable-placement-rules true" | pd-ctl编辑恢复节点 TiKV 的配置文件 # 设置一些恢复节点的 labels server labels = { exclusive = "restore" } # 设置一些 online 参数 echo "server set enable-online-replication true" | pd-ctl执行恢复节点的配置文件 # 启动在线恢复节点的 TiKV echo "server start online" | pd-ctl执行恢复节点的配置文件 ```

正文

 


title: 使用 BR 命令行进行备份恢复 summary: 了解如何使用 BR 命令行进行集群数据备份和恢复。

使用 BR 命令行进行备份恢复

本文介绍如何 BR 命令行进行 TiDB 集群数据的备份和恢复。

在阅读本文前,请确保你已通读备份与恢复工具 BR 简介,尤其是使用限制最佳实践这两节。

BR 命令行描述

一条 br 命令是由子命令、选项和参数组成的。子命令即不带 - 或者 -- 的字符。选项即以 - 或者 -- 开头的字符。参数即子命令或选项字符后紧跟的、并传递给命令和选项的字符。

以下是一条完整的 br 命令行:

br backup full --pd "${PDIP}:2379" -s "local:///tmp/backup"

命令行各部分的解释如下:

  • backupbr 的子命令
  • fullbackup 的子命令
  • -s 或 --storage:备份保存的路径
  • "local:///tmp/backup"-s 的参数,保存的路径为各个 TiKV 节点本地磁盘的 /tmp/backup
  • --pd:PD 服务地址
  • "${PDIP}:2379"--pd 的参数

注意:

在使用 local storage 的时候,备份数据会分散在各个节点的本地文件系统中。

不建议在生产环境中备份到本地磁盘,因为在日后恢复的时候,必须手动聚集这些数据才能完成恢复工作(见恢复集群数据)。

聚集这些备份数据可能会造成数据冗余和运维上的麻烦,而且在不聚集这些数据便直接恢复的时候会遇到颇为迷惑的 SST file not found 报错。

建议在各个节点挂载 NFS 网盘,或者直接备份到 S3 对象存储中。

命令和子命令

BR 由多层命令组成。目前,BR 包含 backuprestore 和 version 三个子命令:

  • br backup 用于备份 TiDB 集群
  • br restore 用于恢复 TiDB 集群

以上三个子命令可能还包含这些子命令:

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

常用选项

  • --pd:用于连接的选项,表示 PD 服务地址,例如 "${PDIP}:2379"
  • -h/--help:获取所有命令和子命令的使用帮助。例如 br backup --help
  • -V (或 --version):检查 BR 版本。
  • --ca:指定 PEM 格式的受信任 CA 的证书文件路径。
  • --cert:指定 PEM 格式的 SSL 证书文件路径。
  • --key:指定 PEM 格式的 SSL 证书密钥文件路径。
  • --status-addr:BR 向 Prometheus 提供统计数据的监听地址。

使用 BR 命令行备份集群数据

使用 br backup 命令来备份集群数据。可选择添加 full 或 table 子命令来指定备份的范围:全部集群数据或单张表的数据。

备份全部集群数据

要备份全部集群数据,可使用 br backup full 命令。该命令的使用帮助可以通过 br backup full -h 或 br backup full --help 来获取。

用例:将所有集群数据备份到各个 TiKV 节点的 /tmp/backup 路径,同时也会将备份的元信息文件 backupmeta 写到该路径下。

注意:

  • 经测试,在全速备份的情况下,如果备份盘和服务盘不同,在线备份会让只读线上服务的 QPS 下降 15%~25% 左右。如果希望降低影响,请参考 --ratelimit 进行限速。

  • 假如备份盘和服务盘相同,备份将会和服务争夺 I/O 资源,这可能会让只读线上服务的 QPS 骤降一半以上。请尽量禁止将在线服务的数据备份到 TiKV 的数据盘。

  1. br backup full \
  2. --pd "${PDIP}:2379" \
  3. --storage "local:///tmp/backup" \
  4. --ratelimit 120 \
  5. --log-file backupfull.log

以上命令中,--ratelimit 选项限制了每个 TiKV 执行备份任务的速度上限(单位 MiB/s)。--log-file 选项指定把 BR 的 log 写到 backupfull.log 文件中。

备份期间有进度条在终端中显示。当进度条前进到 100% 时,说明备份已完成。在完成备份后,BR 为了确保数据安全性,还会校验备份数据。进度条效果如下:

  1. br backup full \
  2. --pd "${PDIP}:2379" \
  3. --storage "local:///tmp/backup" \
  4. --ratelimit 120 \
  5. --log-file backupfull.log
  6. Full Backup <---------/................................................> 17.12%.

备份单个数据库的数据

要备份集群中指定单个数据库的数据,可使用 br backup db 命令。同样可通过 br backup db -h 或 br backup db --help 来获取子命令 db 的使用帮助。

用例:将数据库 test 备份到各个 TiKV 节点的 /tmp/backup 路径,同时也会将备份的元信息文件 backupmeta 写到该路径下。

  1. br backup db \
  2. --pd "${PDIP}:2379" \
  3. --db test \
  4. --storage "local:///tmp/backup" \
  5. --ratelimit 120 \
  6. --log-file backuptable.log

db 子命令的选项为 --db,用来指定数据库名。其他选项的含义与备份全部集群数据相同。

备份期间有进度条在终端中显示。当进度条前进到 100% 时,说明备份已完成。在完成备份后,BR 为了确保数据安全性,还会校验备份数据。

备份单张表的数据

要备份集群中指定单张表的数据,可使用 br backup table 命令。同样可通过 br backup table -h 或 br backup table --help 来获取子命令 table 的使用帮助。

用例:将表 test.usertable 备份到各个 TiKV 节点的 /tmp/backup 路径,同时也会将备份的元信息文件 backupmeta 写到该路径下。

  1. br backup table \
  2. --pd "${PDIP}:2379" \
  3. --db test \
  4. --table usertable \
  5. --storage "local:///tmp/backup" \
  6. --ratelimit 120 \
  7. --log-file backuptable.log

table 子命令有 --db 和 --table 两个选项,分别用来指定数据库名和表名。其他选项的含义与备份全部集群数据相同。

备份期间有进度条在终端中显示。当进度条前进到 100% 时,说明备份已完成。在完成备份后,BR 为了确保数据安全性,还会校验备份数据。

使用表库过滤功能备份多张表的数据

如果你需要以更复杂的过滤条件来备份多个表,执行 br backup full 命令,并使用 --filter 或 -f 来指定表库过滤规则。

用例:以下命令将所有 db*.tbl* 形式的表格数据备份到每个 TiKV 节点上的 /tmp/backup 路径,并将 backupmeta 文件写入该路径。

  1. br backup full \
  2. --pd "${PDIP}:2379" \
  3. --filter 'db*.tbl*' \
  4. --storage "local:///tmp/backup" \
  5. --ratelimit 120 \
  6. --log-file backupfull.log

备份数据到 Amazon S3 后端存储

如果备份的存储并不是在本地,而是在 Amazon 的 S3 后端存储,那么需要在 storage 子命令中指定 S3 的存储路径,并且赋予 BR 节点和 TiKV 节点访问 Amazon S3 的权限。

这里可以参照 AWS 官方文档在指定的 Region 区域中创建一个 S3 桶 Bucket,如果有需要,还可以参照 AWS 官方文档 在 Bucket 中创建一个文件夹 Folder

将有权限访问该 S3 后端存储的账号的 SecretKey 和 AccessKey 作为环境变量传入 BR 节点,并且通过 BR 将权限传给 TiKV 节点。

  1. export AWS_ACCESS_KEY_ID=${AccessKey}
  2. export AWS_SECRET_ACCESS_KEY=${SecretKey}

在进行 BR 备份时,显示指定参数 --s3.region 和 --send-credentials-to-tikv--s3.region 表示 S3 存储所在的区域,--send-credentials-to-tikv 表示将 S3 的访问权限传递给 TiKV 节点。

  1. br backup full \
  2. --pd "${PDIP}:2379" \
  3. --storage "s3://${Bucket}/${Folder}" \
  4. --s3.region "${region}" \
  5. --send-credentials-to-tikv=true \
  6. --log-file backuptable.log

增量备份

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

注意增量备份有以下限制:

  • 增量备份需要与前一次全量备份在不同的路径下
  • GC safepoint 必须在 lastbackupts 之前
  1. br backup full\
  2. --pd ${PDIP}:2379 \
  3. -s local:///home/tidb/backupdata/incr \
  4. --lastbackupts ${LAST_BACKUP_TS}

以上命令会备份 (LAST_BACKUP_TS, current PD timestamp] 之间的增量数据。

你可以使用 validate 指令获取上一次备份的时间戳,示例如下:

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

示例备份的增量数据记录 (LAST_BACKUP_TS, current PD timestamp] 之间的数据变更,以及这段时间内的 DDL。在恢复的时候,BR 会先把所有 DDL 恢复,而后才会恢复数据。

Raw KV 备份(实验性功能)

警告:

Raw KV 备份功能还在实验中,没有经过完备的测试。暂时请避免在生产环境中使用该功能。

在某些使用场景下,TiKV 可能会独立于 TiDB 运行。考虑到这点,BR 也提供跳过 TiDB 层,直接备份 TiKV 中数据的功能:

  1. br backup raw --pd $PD_ADDR \
  2. -s "local://$BACKUP_DIR" \
  3. --start 31 \
  4. --end 3130303030303030 \
  5. --format hex \
  6. --cf default

以上命令会备份 default CF 上 [0x31, 0x3130303030303030) 之间的所有键到 $BACKUP_DIR 去。

这里,--start 和 --end 的参数会先依照 --format 指定的方式解码,再被送到 TiKV 上去,目前支持以下解码方式:

  • “raw”:不进行任何操作,将输入的字符串直接编码为二进制格式的键。
  • “hex”:将输入的字符串视作十六进制数字。这是默认的编码方式。
  • “escape”:对输入的字符串进行转义之后,再编码为二进制格式。

使用 BR 命令行恢复集群数据

使用 br restore 命令来恢复备份数据。可选择添加 fulldb 或 table 子命令来指定恢复操作的范围:全部集群数据、某个数据库或某张数据表。

注意:

如果使用本地存储,在恢复前必须将所有备份的 SST 文件复制到各个 TiKV 节点上 --storage 指定的目录下。

即使每个 TiKV 节点最后只需要读取部分 SST 文件,这些节点也需要有所有 SST 文件的完全访问权限。原因如下:

  • 数据被复制到了多个 Peer 中。在读取 SST 文件时,这些文件必须要存在于所有 Peer 中。这与数据的备份不同,在备份时,只需从单个节点读取。
  • 在数据恢复的时候,每个 Peer 分布的位置是随机的,事先并不知道哪个节点将读取哪个文件。

使用共享存储可以避免这些情况。例如,在本地路径上安装 NFS,或使用 S3。利用这些网络存储,各个节点都可以自动读取每个 SST 文件,此时上述注意事项不再适用。

恢复全部备份数据

要将全部备份数据恢复到集群中来,可使用 br restore full 命令。该命令的使用帮助可以通过 br restore full -h 或 br restore full --help 来获取。

用例:将 /tmp/backup 路径中的全部备份数据恢复到集群中。

  1. br restore full \
  2. --pd "${PDIP}:2379" \
  3. --storage "local:///tmp/backup" \
  4. --ratelimit 128 \
  5. --log-file restorefull.log

以上命令中,--ratelimit 选项限制了每个 TiKV 执行恢复任务的速度上限(单位 MiB/s)。--log-file 选项指定把 BR 的 log 写到 restorefull.log 文件中。

恢复期间还有进度条会在终端中显示,当进度条前进到 100% 时,说明恢复已完成。在完成恢复后,BR 为了确保数据安全性,还会校验恢复数据。进度条效果如下:

  1. br restore full \
  2. --pd "${PDIP}:2379" \
  3. --storage "local:///tmp/backup" \
  4. --log-file restorefull.log
  5. Full Restore <---------/...............................................> 17.12%.

恢复单个数据库的数据

要将备份数据中的某个数据库恢复到集群中,可以使用 br restore db 命令。该命令的使用帮助可以通过 br restore db -h 或 br restore db --help 来获取。

用例:将 /tmp/backup 路径中备份数据中的某个数据库恢复到集群中。

  1. br restore db \
  2. --pd "${PDIP}:2379" \
  3. --db "test" \
  4. --storage "local:///tmp/backup" \
  5. --log-file restorefull.log

以上命令中 --db 选项指定了需要恢复的数据库名字。其余选项的含义与恢复全部备份数据相同。

恢复单张表的数据

要将备份数据中的某张数据表恢复到集群中,可以使用 br restore table 命令。该命令的使用帮助可通过 br restore table -h 或 br restore table --help 来获取。

用例:将 /tmp/backup 路径下的备份数据中的某个数据表恢复到集群中。

  1. br restore table \
  2. --pd "${PDIP}:2379" \
  3. --db "test" \
  4. --table "usertable" \
  5. --storage "local:///tmp/backup" \
  6. --log-file restorefull.log

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

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

用例:以下命令将备份在 /tmp/backup 路径的表的子集恢复到集群中。

  1. br restore full \
  2. --pd "${PDIP}:2379" \
  3. --filter 'db*.tbl*' \
  4. --storage "local:///tmp/backup" \
  5. --log-file restorefull.log

从 Amazon S3 后端存储恢复数据

如果需要恢复的数据并不是存储在本地,而是在 Amazon 的 S3 后端,那么需要在 storage 子命令中指定 S3 的存储路径,并且赋予 BR 节点和 TiKV 节点访问 Amazon S3 的权限。

将有权限访问该 S3 后端存储的账号的 SecretKey 和 AccessKey 作为环境变量传入 BR 节点,并且通过 BR 将权限传给 TiKV 节点。

  1. export AWS_ACCESS_KEY_ID=${AccessKey}
  2. export AWS_SECRET_ACCESS_KEY=${SecretKey}

在进行 BR 恢复时,显示指定参数 --s3.region 和 --send-credentials-to-tikv--s3.region 表示 S3 存储所在的区域,--send-credentials-to-tikv 表示将 S3 的访问权限传递给 TiKV 节点。--storage参数中的 Bucket 和 Folder 分别代表需要恢复的数据所在的 S3 存储桶和文件夹。

  1. br restore full \
  2. --pd "${PDIP}:2379" \
  3. --storage "s3://${Bucket}/${Folder}" \
  4. --s3.region "${region}" \
  5. --send-credentials-to-tikv=true \
  6. --log-file restorefull.log

以上命令中 --table 选项指定了需要恢复的表名。其余选项的含义与恢复单个数据库相同。

增量恢复

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

Raw KV 恢复(实验性功能)

警告:

Raw KV 恢复功能还在实验中,没有经过完备的测试。暂时请避免在生产环境中使用该功能。

和 Raw KV 备份相似地,恢复 Raw KV 的命令如下:

  1. br restore raw --pd $PD_ADDR \
  2. -s "local://$BACKUP_DIR" \
  3. --start 31 \
  4. --end 3130303030303030 \
  5. --format hex \
  6. --cf default

以上命令会将范围在 [0x31, 0x3130303030303030) 的已备份键恢复到 TiKV 集群中。这里键的编码方式和备份时相同。

在线恢复(实验性功能)

警告:

在线恢复功能还在实验中,没有经过完备的测试,同时还依赖 PD 的不稳定特性 Placement Rules。暂时请避免在生产环境中使用该功能。

在恢复的时候,写入过多的数据会影响在线集群的性能。为了尽量避免影响线上业务,BR 支持通过 Placement rules 隔离资源。让下载、导入 SST 的工作仅仅在指定的几个节点(下称“恢复节点”)上进行,具体操作如下:

  1. 配置 PD,启动 Placement rules:

    1. echo "config set enable-placement-rules true" | pd-ctl
  2. 编辑恢复节点 TiKV 的配置文件,在 server 一项中指定:

    1. [server]
    2. labels = { exclusive = "restore" }
  3. 启动恢复节点的 TiKV,使用 BR 恢复备份的文件,和非在线恢复相比,这里只需要加上 --online 标志即可:

    1. br restore full \
    2. -s "local://$BACKUP_DIR" \
    3. --pd $PD_ADDR \
    4. --online

与[转帖]使用 BR 命令行备份恢复相似的内容:

[转帖]使用 BR 命令行备份恢复

TiDB试用 来源:TiDB 浏览 404 扫码 分享 2021-04-20 20:49:42 使用 BR 命令行进行备份恢复 BR 命令行描述 命令和子命令 常用选项 使用 BR 命令行备份集群数据 备份全部集群数据 备份单个数据库的数据 备份单张表的数据 使用表库过滤功能备份多张表的数据 备份数

[转帖]TIDB - 使用BR工具进行数据热备份与恢复

一、BR工具 BR 全称为 Backup & Restore,是 TiDB 分布式备份恢复的命令行工具,用于对 TiDB 集群进行数据备份和恢复。BR 只支持在 TiDB v3.1 及以上版本使用。 在前面的章节中,我们介绍了dumpling将数据导出的方式,也可以作为一种备份的方式,并且导出的数据

[转帖]TIDB - 使用BR工具进行数据热备份与恢复

一、BR工具 BR 全称为 Backup & Restore,是 TiDB 分布式备份恢复的命令行工具,用于对 TiDB 集群进行数据备份和恢复。BR 只支持在 TiDB v3.1 及以上版本使用。 在前面的章节中,我们介绍了dumpling将数据导出的方式,也可以作为一种备份的方式,并且导出的数据

[转帖]如何使用 minio 进行 BR 备份

https://tidb.net/blog/ada69456#5.%20%E4%BD%BF%E7%94%A8%20minio%20%E8%BF%9B%E8%A1%8C%20BR%20%E5%A4%87%E4%BB%BD%E7%9A%84%E6%9D%83%E9%99%90%E8%AF%B4%E6%9

[转帖]br备份时排除某个库

作者: qhd2004 原文来源: https://tidb.net/blog/2a88149e 生产环境中我们使用br来备份数据库,但是有时候可能需要排除某个库,比如,skywalking后台库(实际中是skywalking暂时放在tidb中,后面会转到es,并且skywalking的数据对我们来

[转帖]br 备份时排除某个库

https://tidb.net/book/tidb-monthly/2023/2023-02/usercase/excluded-a-storeroom-during-br-backup 生产环境中我们使用br来备份数据库,但是有时候可能需要排除某个库,比如,skywalking后台库(实际中是s

[转帖]docker报错:报错br-xxxx 之Docker-Compose 自动创建的网桥与局域网络冲突

https://www.dianjilingqu.com/653590.html 故障描述: 当我使用docker-compose的方式部署内网的harbor时。它自动创建了一个bridge网桥,与内网的一个网段(172.18.0.1/16)发生冲突,docker 默认的网络模式是bridge ,默

[转帖]br备份时排除某个库

https://tidb.net/blog/2a88149e?utm_source=tidb-community&utm_medium=referral&utm_campaign=repost#br%E6%8E%92%E9%99%A4%E8%A7%84%E5%88%99 在br文档中有使用 --fi

[转帖]tidb backup

https://docs.pingcap.com/zh/tidb/v4.0/sql-statement-restore BACKUP 语句使用的引擎与 BR 相同,但备份过程是由 TiDB 本身驱动,而非单独的 BR 工具。BR 工具的优势和警告也适用于 BACKUP 语句。 执行 BACKUP 需

[转帖]tidb RESTORE

https://docs.pingcap.com/zh/tidb/v4.0/sql-statement-restore RESTORE 语句用于执行分布式恢复,把 BACKUP 语句生成的备份文件恢复到 TiDB 集群中。 RESTORE 语句使用的引擎与 BR 相同,但恢复过程是由 TiDB 本身