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

Posted 小毕超

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TIDB - 使用BR工具进行数据热备份与恢复相关的知识,希望对你有一定的参考价值。

一、BR工具

BR 全称为 Backup & Restore,是 TiDB 分布式备份恢复的命令行工具,用于对 TiDB 集群进行数据备份和恢复。BR 只支持在 TiDB v3.1 及以上版本使用。

在前面的章节中,我们介绍了dumpling将数据导出的方式,也可以作为一种备份的方式,并且导出的数据是极为可读的sql文件,并且也可以将数据导入mysql中,但是在买对大数据量下快速的全量备份的场景在使用dumpling导成sql文件就显得效率低下了,并且会降低TIDB的读写的QPS。同样BR工具就不同了,他是直接将TIDB存储的sst文件进行转存备份,除去了转化为SQL的工作量,但也有弊端,导出的数据是不可读的二进制数据,但仅对TIDB数据进行备份已经足够强大了。

因此相比 dumpling,BR 更适合大数据量的场景。

BR 将备份或恢复操作命令下发到各个 TiKV 节点。TiKV 收到命令后执行相应的备份或恢复操作。

在一次备份或恢复中,各个 TiKV 节点都会有一个对应的备份路径,TiKV 备份时产生的备份文件将会保存在该路径下,恢复时也会从该路径读取相应的备份文件。

二、准备工作

在数据备份前,先了解下BR备份的存储目录,TIDB默认会将每个TIKV节点的数据存储在本节点上,但这样就不利于数据的恢复,因为在恢复是每个TIKV节点读到的必须为全部备份数据,否则就会报各种奇葩的错误。因此在恢复时要么将每个TIKV节点中备份的数据拷贝到其他的节点中,要么就采用共享存储、远程磁盘挂载的方式,在文本中我们是采用共享存储、远程磁盘挂载的方式进行演示。

1. 查看集群状态

在备份之前先来看下我的TIDB集群的状态:

tiup cluster display tidb-test


我的集群架构是,一个tidb-server,三台pd-server ,三台tikv-server,分别在160、161、162三个主机上。

2. 创建NFS目录挂载

关于NFS目录的挂载,请参考下面一篇我的博客,专门讲解了CenterOS下目录远程挂载的方式。

https://blog.csdn.net/qq_43692950/article/details/121591360

这里我们NFS服务器是装在了160中,接着我们在每个主机的根目录下都创建 /nfs/data目录,作为备份存储的目录:

mkdir -p /nfs/data && chmod -R 777 /nfs/data

然后将161和162中的/nfs/data挂载到160中:

mount 192.168.40.160:/nfs/data /nfs/data

挂载之后可以在161或162中/nfs/data下随便创建个文件,看其他节点是否可以读到文件,以验证挂载是否成功。

3. 下载tidb-toolkit工具

wget https://download.pingcap.org/tidb-toolkit-v5.0.1-linux-amd64.tar.gz
tar xvf tidb-toolkit-v5.0.1-linux-amd64.tar.gz
cd tidb-toolkit-v5.0.1-linux-amd64/bin/

可以看到里面有很多工具,包括我们在数据迁移文章中使用的dumpling、tidb-lightning等,这次我们就需要BR工具即可。

三、开始备份

在备份前先看下我们TIDB 中的数据:

可以看到我们有个testdb库及user表,并且表中仅有几条数据。

下面进入到上面解压出来的工具目录bin下,有以下下面指令:

  1. 对数据进行全备份:

    ./br backup full --pd "192.168.40.160:2379" --storage "local:///nfs/data" --ratelimit 120 --log-file backupfull.log
    

    –pd :连接 TiDB 数据库的 PD 节点,最好在 PD 节点上执行,即连接本节点。
    –storage :备份文件存储在 TiKV 节点上的位置,使用我们的挂载目录。
    –ratelimit :对于备份所用存储带宽限速,以免影响线上业务。
    –log-file : 备份日志文件

  2. 上面是对整个TIDB上的所有的库进行备份,如果就想备份某个数据库,则可以:

    ./br backup db --pd "192.168.40.160:2379" --db "testdb" --storage "local:///nfs/data" --log-file restoredb.log
    

    通过 --db 来指定数据库。

  3. 如果就想备份某个表:

    ./br backup db --pd "192.168.40.160:2379" --db "testdb" --table salaries --storage "local:///nfs/data" --log-file restoredb.log
    

    通过–table来指定表。

我们采用对某个数据库进行备份的方式,备份testdb数据库:

./br backup db --pd "192.168.40.160:2379" --db "testdb" --storage "local:///nfs/data" --log-file restoredb.log


查看备份文件

四、数据恢复

上面我们已经备份了数据,在恢复前,我们先删除testdb数据库:

下面还是进入到bin下,使用br restore 命令:

./br restore db --pd "192.168.40.160:2379" --db "testdb" --storage "local:///nfs/data" --log-file restoredb.log

参数和上面备份时的参数含义一样。

查看restoredb.log日志文件,可以看到已经成功。

再次查看数据库和表:

已恢复到最初的状态。


喜欢的小伙伴可以关注我的个人微信公众号,获取更多学习资料!

以上是关于TIDB - 使用BR工具进行数据热备份与恢复的主要内容,如果未能解决你的问题,请参考以下文章

备份的 “算子下推”:BR 简介丨TiDB 工具分享

TiDB Binlog工具Drainer使用

数据库的备份与恢复

Xtrabackup进行MySQL备份与恢复

MySQL备份与恢复之mysqldump工具

TiDB数据库10---数据导出工具dumpling与数据导入工具Lightning