[转帖]使用 BR 命令行备份恢复
title: 使用 BR 命令行进行备份恢复 summary: 了解如何使用 BR 命令行进行集群数据备份和恢复。
使用 BR 命令行进行备份恢复
本文介绍如何 BR 命令行进行 TiDB 集群数据的备份和恢复。
在阅读本文前,请确保你已通读备份与恢复工具 BR 简介,尤其是使用限制和最佳实践这两节。
BR 命令行描述
一条 br 命令是由子命令、选项和参数组成的。子命令即不带 - 或者 -- 的字符。选项即以 - 或者 -- 开头的字符。参数即子命令或选项字符后紧跟的、并传递给命令和选项的字符。
以下是一条完整的 br 命令行:
br backup full --pd "${PDIP}:2379" -s "local:///tmp/backup"
命令行各部分的解释如下:
backup:br的子命令full:backup的子命令-s或--storage:备份保存的路径"local:///tmp/backup":-s的参数,保存的路径为各个 TiKV 节点本地磁盘的/tmp/backup--pd:PD 服务地址"${PDIP}:2379":--pd的参数
注意:
在使用
localstorage 的时候,备份数据会分散在各个节点的本地文件系统中。不建议在生产环境中备份到本地磁盘,因为在日后恢复的时候,必须手动聚集这些数据才能完成恢复工作(见恢复集群数据)。
聚集这些备份数据可能会造成数据冗余和运维上的麻烦,而且在不聚集这些数据便直接恢复的时候会遇到颇为迷惑的
SST file not found报错。建议在各个节点挂载 NFS 网盘,或者直接备份到
S3对象存储中。
命令和子命令
BR 由多层命令组成。目前,BR 包含 backup、restore 和 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 的数据盘。
br backup full \--pd "${PDIP}:2379" \--storage "local:///tmp/backup" \--ratelimit 120 \--log-file backupfull.log
以上命令中,--ratelimit 选项限制了每个 TiKV 执行备份任务的速度上限(单位 MiB/s)。--log-file 选项指定把 BR 的 log 写到 backupfull.log 文件中。
备份期间有进度条在终端中显示。当进度条前进到 100% 时,说明备份已完成。在完成备份后,BR 为了确保数据安全性,还会校验备份数据。进度条效果如下:
br backup full \--pd "${PDIP}:2379" \--storage "local:///tmp/backup" \--ratelimit 120 \--log-file backupfull.logFull Backup <---------/................................................> 17.12%.
备份单个数据库的数据
要备份集群中指定单个数据库的数据,可使用 br backup db 命令。同样可通过 br backup db -h 或 br backup db --help 来获取子命令 db 的使用帮助。
用例:将数据库 test 备份到各个 TiKV 节点的 /tmp/backup 路径,同时也会将备份的元信息文件 backupmeta 写到该路径下。
br backup db \--pd "${PDIP}:2379" \--db test \--storage "local:///tmp/backup" \--ratelimit 120 \--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 写到该路径下。
br backup table \--pd "${PDIP}:2379" \--db test \--table usertable \--storage "local:///tmp/backup" \--ratelimit 120 \--log-file backuptable.log
table 子命令有 --db 和 --table 两个选项,分别用来指定数据库名和表名。其他选项的含义与备份全部集群数据相同。
备份期间有进度条在终端中显示。当进度条前进到 100% 时,说明备份已完成。在完成备份后,BR 为了确保数据安全性,还会校验备份数据。
使用表库过滤功能备份多张表的数据
如果你需要以更复杂的过滤条件来备份多个表,执行 br backup full 命令,并使用 --filter 或 -f 来指定表库过滤规则。
用例:以下命令将所有 db*.tbl* 形式的表格数据备份到每个 TiKV 节点上的 /tmp/backup 路径,并将 backupmeta 文件写入该路径。
br backup full \--pd "${PDIP}:2379" \--filter 'db*.tbl*' \--storage "local:///tmp/backup" \--ratelimit 120 \--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 节点。
export AWS_ACCESS_KEY_ID=${AccessKey}export AWS_SECRET_ACCESS_KEY=${SecretKey}
在进行 BR 备份时,显示指定参数 --s3.region 和 --send-credentials-to-tikv, --s3.region 表示 S3 存储所在的区域,--send-credentials-to-tikv 表示将 S3 的访问权限传递给 TiKV 节点。
br backup full \--pd "${PDIP}:2379" \--storage "s3://${Bucket}/${Folder}" \--s3.region "${region}" \--send-credentials-to-tikv=true \--log-file backuptable.log
增量备份
如果想要备份增量,只需要在备份的时候指定上一次的备份时间戳 --lastbackupts 即可。
注意增量备份有以下限制:
- 增量备份需要与前一次全量备份在不同的路径下
- GC safepoint 必须在
lastbackupts之前
br backup full\--pd ${PDIP}:2379 \-s local:///home/tidb/backupdata/incr \--lastbackupts ${LAST_BACKUP_TS}
以上命令会备份 (LAST_BACKUP_TS, current PD timestamp] 之间的增量数据。
你可以使用 validate 指令获取上一次备份的时间戳,示例如下:
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 中数据的功能:
br backup raw --pd $PD_ADDR \-s "local://$BACKUP_DIR" \--start 31 \--end 3130303030303030 \--format hex \--cf default
以上命令会备份 default CF 上 [0x31, 0x3130303030303030) 之间的所有键到 $BACKUP_DIR 去。
这里,--start 和 --end 的参数会先依照 --format 指定的方式解码,再被送到 TiKV 上去,目前支持以下解码方式:
- “raw”:不进行任何操作,将输入的字符串直接编码为二进制格式的键。
- “hex”:将输入的字符串视作十六进制数字。这是默认的编码方式。
- “escape”:对输入的字符串进行转义之后,再编码为二进制格式。
使用 BR 命令行恢复集群数据
使用 br restore 命令来恢复备份数据。可选择添加 full、db 或 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 路径中的全部备份数据恢复到集群中。
br restore full \--pd "${PDIP}:2379" \--storage "local:///tmp/backup" \--ratelimit 128 \--log-file restorefull.log
以上命令中,--ratelimit 选项限制了每个 TiKV 执行恢复任务的速度上限(单位 MiB/s)。--log-file 选项指定把 BR 的 log 写到 restorefull.log 文件中。
恢复期间还有进度条会在终端中显示,当进度条前进到 100% 时,说明恢复已完成。在完成恢复后,BR 为了确保数据安全性,还会校验恢复数据。进度条效果如下:
br restore full \--pd "${PDIP}:2379" \--storage "local:///tmp/backup" \--log-file restorefull.logFull Restore <---------/...............................................> 17.12%.
恢复单个数据库的数据
要将备份数据中的某个数据库恢复到集群中,可以使用 br restore db 命令。该命令的使用帮助可以通过 br restore db -h 或 br restore db --help 来获取。
用例:将 /tmp/backup 路径中备份数据中的某个数据库恢复到集群中。
br restore db \--pd "${PDIP}:2379" \--db "test" \--storage "local:///tmp/backup" \--log-file restorefull.log
以上命令中 --db 选项指定了需要恢复的数据库名字。其余选项的含义与恢复全部备份数据相同。
恢复单张表的数据
要将备份数据中的某张数据表恢复到集群中,可以使用 br restore table 命令。该命令的使用帮助可通过 br restore table -h 或 br restore table --help 来获取。
用例:将 /tmp/backup 路径下的备份数据中的某个数据表恢复到集群中。
br restore table \--pd "${PDIP}:2379" \--db "test" \--table "usertable" \--storage "local:///tmp/backup" \--log-file restorefull.log
使用表库功能过滤恢复数据
如果你需要用复杂的过滤条件来恢复多个表,执行 br restore full 命令,并用 --filter 或 -f 指定使用表库过滤。
用例:以下命令将备份在 /tmp/backup 路径的表的子集恢复到集群中。
br restore full \--pd "${PDIP}:2379" \--filter 'db*.tbl*' \--storage "local:///tmp/backup" \--log-file restorefull.log
从 Amazon S3 后端存储恢复数据
如果需要恢复的数据并不是存储在本地,而是在 Amazon 的 S3 后端,那么需要在 storage 子命令中指定 S3 的存储路径,并且赋予 BR 节点和 TiKV 节点访问 Amazon S3 的权限。
将有权限访问该 S3 后端存储的账号的 SecretKey 和 AccessKey 作为环境变量传入 BR 节点,并且通过 BR 将权限传给 TiKV 节点。
export AWS_ACCESS_KEY_ID=${AccessKey}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 存储桶和文件夹。
br restore full \--pd "${PDIP}:2379" \--storage "s3://${Bucket}/${Folder}" \--s3.region "${region}" \--send-credentials-to-tikv=true \--log-file restorefull.log
以上命令中 --table 选项指定了需要恢复的表名。其余选项的含义与恢复单个数据库相同。
增量恢复
增量恢复的方法和使用 BR 进行全量恢复的方法并无差别。需要注意,恢复增量数据的时候,需要保证备份时指定的 last backup ts 之前备份的数据已经全部恢复到目标集群。
Raw KV 恢复(实验性功能)
警告:
Raw KV 恢复功能还在实验中,没有经过完备的测试。暂时请避免在生产环境中使用该功能。
和 Raw KV 备份相似地,恢复 Raw KV 的命令如下:
br restore raw --pd $PD_ADDR \-s "local://$BACKUP_DIR" \--start 31 \--end 3130303030303030 \--format hex \--cf default
以上命令会将范围在 [0x31, 0x3130303030303030) 的已备份键恢复到 TiKV 集群中。这里键的编码方式和备份时相同。
在线恢复(实验性功能)
警告:
在线恢复功能还在实验中,没有经过完备的测试,同时还依赖 PD 的不稳定特性 Placement Rules。暂时请避免在生产环境中使用该功能。
在恢复的时候,写入过多的数据会影响在线集群的性能。为了尽量避免影响线上业务,BR 支持通过 Placement rules 隔离资源。让下载、导入 SST 的工作仅仅在指定的几个节点(下称“恢复节点”)上进行,具体操作如下:
配置 PD,启动 Placement rules:
echo "config set enable-placement-rules true" | pd-ctl
编辑恢复节点 TiKV 的配置文件,在
server一项中指定:[server]labels = { exclusive = "restore" }
启动恢复节点的 TiKV,使用 BR 恢复备份的文件,和非在线恢复相比,这里只需要加上
--online标志即可:br restore full \-s "local://$BACKUP_DIR" \--pd $PD_ADDR \--online
[转帖]使用 BR 命令行备份恢复的更多相关文章
- mysql 命令行 备份 恢复数据
找到mysql启动位置 whereis mysql 备份指定数据库 包括表结构和数据 使用命令mysqldump 数据库名 -u 用户名 -p > 存储文件路径 [root@izm5e16gjd ...
- mysql命令行备份数据库
MySQL数据库使用命令行备份|MySQL数据库备份命令 例如: 数据库地址:127.0.0.1 数据库用户名:root 数据库密码:pass 数据库名称:myweb 备份数据库到D盘跟目录 mysq ...
- 如何使用命令行备份SAP HANA数据库
SAP HANA是一个在in-memory内存中的数据平台,部署为内部部署应用. 这是一个革命性的平台,它最适合进行实时分析,并开发和部署实时应用程序. 请点击这里了解更多有关SAP HANA. 通过 ...
- mysql_用命令行备份数据库
MySQL数据库使用命令行备份|MySQL数据库备份命令 例如: 数据库地址:127.0.0.1 数据库用户名:root 数据库密码:pass 数据库名称:myweb 备份数据库到D盘跟目录 mysq ...
- 使用MySQL命令行备份和恢复数据库
导出数据库: 1.windows下cmd打开命令行 2.cd 到MySQL的安装目录的bin 目录,如果bin目录添加到环境变量中不需要切换到bin目录 3.导出数据库:mysqldump -u 用户 ...
- mysql命令行备份方法
一.mysql备份 1.备份命令 格式:mysqldump -h主机IP -P端口 -u用户名 -p密码 --database 数据库名 > 文件名.sql # 本地备份可以不添加端口和主机IP ...
- Windows Server 2016-Wbadmin命令行备份域控制器
在上一章我们讲到Windows Server 2016-图形化备份域控制器的方法,本章我们聊聊如何通过命令行Wbadmin对域控制器进行备份.在Windows Server Active Direct ...
- Mysql命令行备份与还原数据库操作实例
无论是Windows还是Linux,都可以通过如下命令行形式备份Mysql数据库 备份命令: 在windows的DOS窗口命令行或linux的shell命令行,假设需要备份的数据库是advanced: ...
- confluence -- 命令行备份还原
备份:confluence每日凌晨2:00都在 /data/atlassian/application-data/confluence/backups/ 下生成备份包,其中包括文档,附件,用户 还原: ...
- 【转帖】Linux命令行操作json神器jq
Linux命令行操作json神器jq https://www.cnblogs.com/chenqionghe/p/11736942.html jq类似一个awk或grep一样的神器,可以方便地在命令行 ...
随机推荐
- Baidu Comate实践指南,惊艳了我...
1 啥是Baidu Comate Comate是百度开发的编程大模型工具,它基于文心大模型,结合百度积累多年的编程现场大数据和外部优秀开源数据,为我们生成更符合实际研发场景的优质代码:它能提升编码效率 ...
- JavaFx之横向布局左右两侧对齐(十九)
JavaFx之横向布局左右两侧对齐(十九) 横向布局HBox在子节点A.B中添加<HBox HBox.hgrow="ALWAYS"></HBox> 即可做到 ...
- Java 中时间对象的序列化
在 Java 应用程序中,时间对象是使用地比较频繁的对象,比如,记录某一条数据的修改时间,用户的登录时间等应用场景.在传统的 Java 编程中,大部分的程序员都会选择使用 java.uti.Date ...
- 在线录屏-通过Web API接口轻松实现录屏
在线录屏是指在互联网上进行屏幕录制的过程.它允许用户通过网络连接,将自己的屏幕活动记录下来,并可以在需要时进行播放.共享或存档.在线录屏常用于教育.培训.演示.游戏等场景,可以帮助用户展示操作步骤.解 ...
- Spring中部署Activiti流程定义的三种姿势
摘要:本文对工作流Activiti框架中流程定义的部署进行了详细说明介绍. 本文分享自华为云社区<项目中工作流部署详细解析!Spring中部署Activiti流程定义的三种姿势>,作者:攻 ...
- 火山引擎 EMR StarRocks 场景案例分享
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 日前 ,火山引擎数智平台(VeDI)旗下产品 E-MapReduce(简称"EMR")正式上线 ...
- Kubernetes(K8S) helm chart
感觉和放到一个 yaml 文件中,用 ---- 分隔,操作繁琐程度上,没有太大区别 创建自定义 Chart # 创建自定义的 chart 名为 mychart [root@k8smaster ~]# ...
- python jira 读取表数据批量新建子任务
小李在Jira中处理任务时,发现一个表格数据很有趣.他决定为每一行数据创建一个新的子任务.他复制粘贴,忙得不亦乐乎.同事小张路过,好奇地问:"你在做什么?"小李得意地回答:&quo ...
- Hugging Face 音频 AI 派对直播回放(上)
直播回放视频地址:https://www.bilibili.com/video/BV1nh4y1X7zs/?vd_source=c5a5204620e35330e6145843f4df6ea4 为了庆 ...
- 叫板GPT-4的Gemini,我做了一个聊天网页,可图片输入,附教程
先看效果: 简介 Gemini 是谷歌研发的最新一代大语言模型,目前有三个版本,被称为中杯.大杯.超大杯,Gemini Ultra 号称可与GPT-4一较高低: Gemini Nano(预览访问) 为 ...