概述
BR 全称为 Backup & Restore,是 TiDB 分布式备份恢复的命令行工具,用于对 TiDB 集群进行数据备份和恢复,相比 dumpling,BR 更适合大数据量的场景。BR 除了可以用来进行常规备份恢复外,也可以在保证兼容性前提下用来做大规模的数据迁移。BR 将备份或恢复操作命令下发到各个 TiKV 节点。TiKV 收到命令后执行相应的备份或恢复操作。在一次备份或恢复中,各个 TiKV 节点都会有一个对应的备份路径,TiKV 备份时产生的备份文件将会保存在该路径下,恢复时也会从该路径读取相应的备份文件。
BR的安装
BR工具需要安装部署到PD节点上,如下实验过程:
[root@node1 ~]# wget https://download.pingcap.org/tidb-toolkit-v5.0.1-linux-amd64.tar.gz
--2021-11-05 15:29:32-- https://download.pingcap.org/tidb-toolkit-v5.0.1-linux-amd64.tar.gz
Resolving download.pingcap.org (download.pingcap.org)... 117.34.48.243, 117.34.48.240, 117.34.48.226, ...
Connecting to download.pingcap.org (download.pingcap.org)|117.34.48.243|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 220298684 (210M) [application/x-compressed]
Saving to: ‘tidb-toolkit-v5.0.1-linux-amd64.tar.gz’
100%[=================================================================================================================================>] 220,298,684 11.2MB/s in 21s
2021-11-05 15:29:54 (9.95 MB/s) - ‘tidb-toolkit-v5.0.1-linux-amd64.tar.gz’ saved [220298684/220298684]
[root@node1 ~]# tar xvf tidb-toolkit-v5.0.1-linux-amd64.tar.gz
tidb-toolkit-v5.0.1-linux-amd64/
tidb-toolkit-v5.0.1-linux-amd64/bin/
tidb-toolkit-v5.0.1-linux-amd64/bin/tikv-importer
tidb-toolkit-v5.0.1-linux-amd64/bin/dumpling
tidb-toolkit-v5.0.1-linux-amd64/bin/br
tidb-toolkit-v5.0.1-linux-amd64/bin/tidb-lightning
tidb-toolkit-v5.0.1-linux-amd64/bin/mydumper
tidb-toolkit-v5.0.1-linux-amd64/bin/tidb-lightning-ctl
tidb-toolkit-v5.0.1-linux-amd64/bin/pd-tso-bench
tidb-toolkit-v5.0.1-linux-amd64/bin/sync_diff_inspector
[root@node1 ~]# ls
anaconda-ks.cfg htop-0.8.3-1.el6.rf.x86_64.rpm root@192.168.59.30 tidbPrepare.sh topology.yaml
cronolog-1.6.2-10.el6.x86_64.rpm MySQL-client-advanced-5.6.25-1.el7.x86_64.rpm scale-out-tikv.yaml tidb-toolkit-v5.0.1-linux-amd64
hcache rlwrap-0.43-5.el8.x86_64.rpm telnet-0.17-48.el6.x86_64.rpm tidb-toolkit-v5.0.1-linux-amd64.tar.gz
[root@node1 ~]# cd tidb-toolkit-v5.0.1-linux-amd64
[root@node1 tidb-toolkit-v5.0.1-linux-amd64]# ls
bin
[root@node1 tidb-toolkit-v5.0.1-linux-amd64]# cd bin
[root@node1 bin]# ls
br dumpling mydumper pd-tso-bench sync_diff_inspector tidb-lightning tidb-lightning-ctl tikv-importer
[root@node1 bin]# pwd
/root/tidb-toolkit-v5.0.1-linux-amd64/bin
下载解压后已经可以看到/root/tidb-toolkit-v5.0.1-linux-amd64/bin目录下已经出现br工具,在root用户.bash_profile里面修改PATH变量,是root用户可以在任何目录下使用br工具。
[root@node1 ~]# cat /root/.bash_profile
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/bin
export PATH
export PATH=/root/.tiup/bin:/root/tidb-toolkit-v5.0.1-linux-amd64/bin:$PATH备份目录
因为br备份是备份tikv节点,所以必须先在所有tikv节点上创建备份目录,并且赋予可写权限,本次实验在所有tikv节点上创建/tmp/backup,用来存储本节点的备份文件(SST)文件。
[root@node2 tmp]# mkdir /tmp/backup
[root@node2 tmp]# chmod 777 /tmp/backup
[root@node2 tmp]# ls -lh
drwxrwxrwx 2 root root 6 Nov 5 15:41 backup数据库全备份
备份命令:br backup full --pd "192.168.59.27:2379" --storage "local:///tmp/backup" --ratelimit 120 --log-file backupfull.log
参数解释:
--pd "1192.168.59.27:2379" :连接 TiDB 数据库的 PD 节点
--storage "local:///tmp/backup" :备份文件存储在 TiKV 节点上的位置。
--ratelimit 120 :对于备份所用存储带宽限速,以免影响线上业务。
--log-file backupfull.log : 备份日志文件
[root@node1 tmp]# br backup full --pd "192.168.59.27:2379" --storage "local:///tmp/backup" --ratelimit 120 --log-file backupfull.log
Detail BR log in backupfull.log
Full backup <-----------------------------------------------------------------------------------------------------------------------------------------------------> 100.00%
Checksum <--------------------------------------------------------------------------------------------------------------------------------------------------------> 100.00%
[2021/11/05 15:49:59.354 +08:00] [INFO] [collector.go:62] ["Full backup success summary"] [total-ranges=11] [ranges-succeed=11] [ranges-failed=0] [backup-checksum=2.001624ms] [backup-fast-checksum=3.14382ms] [backup-total-regions=11] [BackupTS=428893431204675586] [Size=72463] [total-take=97.13109ms] [total-kv=253] [data-size=24.6kB] [average-speed=571.8kB/s]
[root@node1 tmp]# ls
backup backupfull.log 备份成功查看tikv节点的/tmp/backup目录备份文件
[root@node3 backup]# ls
1_4_69_2550d727ffe3e408af41f541b134d5e064440c25988bbecfb665933d1195a45d_1636098599306_write.sst
1_4_69_393d3575060c0d616300c1199ef1c015784fdd3d13e950a6251007bbcbaf2c06_1636098599320_write.sst
1_4_69_6d95378ebf12295206532143634e65a359d39c26f40c8a1fa9b239de19fe54b2_1636098599329_write.sst
1_4_69_90eafaa636d17440add6ba1538819ff7087eaf564d641bafda9a1a8af6e1e386_1636098599325_default.sst
1_4_69_90eafaa636d17440add6ba1538819ff7087eaf564d641bafda9a1a8af6e1e386_1636098599325_write.sst
1_4_69_9467c10f062996c86750ce98960d2573aa8dca7ac32e2d8daeaa5a904340d508_1636098599343_write.sst
1_4_69_9938b5edd23035db4db3f5906a1ec44ab74bfa0ac79f0b6990a8ce8d87da5302_1636098599339_write.sst
1_4_69_9f49851d1e6b90d0c238b9106421a32c5132541666fa2893fa67f63b29284811_1636098599310_write.sst
1_4_69_9fb8afb3f7322e93f506f0d9d11e9b1569bc90b7c3779da9bb7e35137e8e6597_1636098599315_default.sst
1_4_69_9fb8afb3f7322e93f506f0d9d11e9b1569bc90b7c3779da9bb7e35137e8e6597_1636098599315_write.sst
1_4_69_ac53a3e2ccb9e1349c600272ea241c8f20673a53ca792f663daf76aa8f6dfb95_1636098599313_write.sst
1_4_69_d6511a15b20a224505f09eaed9d7b45d126ce04eb30be4da413d8f370b66ea53_1636098599332_write.sst
1_4_69_dc3130b8088cd874a3ebf095e0290965946f6053e234a4d345d76f32cba3fed0_1636098599335_default.sst
1_4_69_dc3130b8088cd874a3ebf095e0290965946f6053e234a4d345d76f32cba3fed0_1636098599335_write.sst备份某一张表
备份命令:br backup db --pd "192.168.59.27:2379 --db chnbs --storage "local:///tmp/chnbs" --ratelimit 120 --log-file backupdb.log
[root@node2 tmp]# mkdir chnbs
[root@node2 tmp]# chmod 777 chnbs
[root@node1 tmp]# br backup db --pd "192.168.59.27:2379" --db chnbs --storage "local:///tmp/chnbs" --ratelimit 120 --log-file backupdb.log
Detail BR log in backupdb.log
Database backup <-------------------------------------------------------------------------------------------------------------------------------------------------> 100.00%
Checksum <--------------------------------------------------------------------------------------------------------------------------------------------------------> 100.00%
[2021/11/05 15:56:27.729 +08:00] [INFO] [collector.go:62] ["Database backup success summary"] [total-ranges=9] [ranges-succeed=9] [ranges-failed=0] [backup-checksum=1.859639ms] [backup-fast-checksum=2.819859ms] [backup-total-regions=9] [BackupTS=428893533008297986] [Size=66114] [total-take=87.10438ms] [total-kv=233] [data-size=24.08kB] [average-speed=696.2kB/s]
[root@node3 chnbs]# ls
1_4_69_393d3575060c0d616300c1199ef1c015784fdd3d13e950a6251007bbcbaf2c06_1636098987697_write.sst
1_4_69_6d95378ebf12295206532143634e65a359d39c26f40c8a1fa9b239de19fe54b2_1636098987705_write.sst
1_4_69_90eafaa636d17440add6ba1538819ff7087eaf564d641bafda9a1a8af6e1e386_1636098987700_default.sst
1_4_69_90eafaa636d17440add6ba1538819ff7087eaf564d641bafda9a1a8af6e1e386_1636098987700_write.sst
1_4_69_9467c10f062996c86750ce98960d2573aa8dca7ac32e2d8daeaa5a904340d508_1636098987719_write.sst
1_4_69_9938b5edd23035db4db3f5906a1ec44ab74bfa0ac79f0b6990a8ce8d87da5302_1636098987716_write.sst
1_4_69_9fb8afb3f7322e93f506f0d9d11e9b1569bc90b7c3779da9bb7e35137e8e6597_1636098987693_default.sst
1_4_69_9fb8afb3f7322e93f506f0d9d11e9b1569bc90b7c3779da9bb7e35137e8e6597_1636098987693_write.sst
1_4_69_ac53a3e2ccb9e1349c600272ea241c8f20673a53ca792f663daf76aa8f6dfb95_1636098987689_write.sst
1_4_69_d6511a15b20a224505f09eaed9d7b45d126ce04eb30be4da413d8f370b66ea53_1636098987708_write.sst
1_4_69_dc3130b8088cd874a3ebf095e0290965946f6053e234a4d345d76f32cba3fed0_1636098987712_default.sst
1_4_69_dc3130b8088cd874a3ebf095e0290965946f6053e234a4d345d76f32cba3fed0_1636098987712_write.sst恢复备份数据库
删除数据
[root@node1 tmp]# mysql -uroot -h 192.168.59.27 -P4000
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 5.7.25-TiDB-v5.2.1 TiDB Server (Apache License 2.0) Community Edition, MySQL 5.7 compatible
Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| INFORMATION_SCHEMA |
| METRICS_SCHEMA |
| PERFORMANCE_SCHEMA |
| chnbs |
| mysql |
| test |
+--------------------+
6 rows in set (0.00 sec)
mysql> use chnbs;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> show tables;
+----------------------+
| Tables_in_chnbs |
+----------------------+
| a |
| f_comment |
| f_config |
| f_enterprise |
| f_industry |
| f_job_intention |
| f_notification |
| f_notification_badge |
| f_order |
+----------------------+
9 rows in set (0.00 sec)
mysql> select count(*) from f_order;
+----------+
| count(*) |
+----------+
| 87 |
+----------+
1 row in set (0.00 sec)
mysql> use test;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> drop database chnbs;
Query OK, 0 rows affected (0.26 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| INFORMATION_SCHEMA |
| METRICS_SCHEMA |
| PERFORMANCE_SCHEMA |
| mysql |
| test |
+--------------------+
5 rows in set (0.00 sec)汇集所有备份文件到所有tikv节点/tmp/chnbs目录下,我们实验过程中只有node3有数据,所有把node3的数据scp到其他节点上即可。
[root@node3 chnbs]# scp * root@192.168.59.27:/tmp/chnbs/
The authenticity of host '192.168.59.27 (192.168.59.27)' can't be established.
ECDSA key fingerprint is SHA256:utPCyUbj1X7yjN1r7emBpsim/PO2aREYDN71V1m/Srw.
ECDSA key fingerprint is MD5:ca:bf:c1:e4:5d:df:bc:13:d9:cb:63:f9:c0:52:41:c3.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.59.27' (ECDSA) to the list of known hosts.
root@192.168.59.27's password:
1_4_69_393d3575060c0d616300c1199ef1c015784fdd3d13e950a6251007bbcbaf2c06_1636098987697_write.sst 100% 2183 2.2MB/s 00:00
1_4_69_6d95378ebf12295206532143634e65a359d39c26f40c8a1fa9b239de19fe54b2_1636098987705_write.sst 100% 3204 3.8MB/s 00:00
1_4_69_90eafaa636d17440add6ba1538819ff7087eaf564d641bafda9a1a8af6e1e386_1636098987700_default.sst 100% 1667 2.2MB/s 00:00
1_4_69_90eafaa636d17440add6ba1538819ff7087eaf564d641bafda9a1a8af6e1e386_1636098987700_write.sst 100% 2122 2.9MB/s 00:00
1_4_69_9467c10f062996c86750ce98960d2573aa8dca7ac32e2d8daeaa5a904340d508_1636098987719_write.sst 100% 5033 5.5MB/s 00:00
1_4_69_9938b5edd23035db4db3f5906a1ec44ab74bfa0ac79f0b6990a8ce8d87da5302_1636098987716_write.sst 100% 1622 2.3MB/s 00:00
1_4_69_9fb8afb3f7322e93f506f0d9d11e9b1569bc90b7c3779da9bb7e35137e8e6597_1636098987693_default.sst 100% 1216 1.4MB/s 00:00
1_4_69_9fb8afb3f7322e93f506f0d9d11e9b1569bc90b7c3779da9bb7e35137e8e6597_1636098987693_write.sst 100% 1875 1.1MB/s 00:00
1_4_69_ac53a3e2ccb9e1349c600272ea241c8f20673a53ca792f663daf76aa8f6dfb95_1636098987689_write.sst 100% 1699 2.0MB/s 00:00
1_4_69_d6511a15b20a224505f09eaed9d7b45d126ce04eb30be4da413d8f370b66ea53_1636098987708_write.sst 100% 1660 1.9MB/s 00:00
1_4_69_dc3130b8088cd874a3ebf095e0290965946f6053e234a4d345d76f32cba3fed0_1636098987712_default.sst 100% 1279 1.7MB/s 00:00
1_4_69_dc3130b8088cd874a3ebf095e0290965946f6053e234a4d345d76f32cba3fed0_1636098987712_write.sst 100% 1415 1.9MB/s 00:00
[root@node3 chnbs]# scp * root@192.168.59.29:/tmp/chnbs/
The authenticity of host '192.168.59.29 (192.168.59.29)' can't be established.
ECDSA key fingerprint is SHA256:utPCyUbj1X7yjN1r7emBpsim/PO2aREYDN71V1m/Srw.
ECDSA key fingerprint is MD5:ca:bf:c1:e4:5d:df:bc:13:d9:cb:63:f9:c0:52:41:c3.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.59.29' (ECDSA) to the list of known hosts.
root@192.168.59.29's password:
1_4_69_393d3575060c0d616300c1199ef1c015784fdd3d13e950a6251007bbcbaf2c06_1636098987697_write.sst 100% 2183 1.5MB/s 00:00
1_4_69_6d95378ebf12295206532143634e65a359d39c26f40c8a1fa9b239de19fe54b2_1636098987705_write.sst 100% 3204 2.7MB/s 00:00
1_4_69_90eafaa636d17440add6ba1538819ff7087eaf564d641bafda9a1a8af6e1e386_1636098987700_default.sst 100% 1667 1.7MB/s 00:00
1_4_69_90eafaa636d17440add6ba1538819ff7087eaf564d641bafda9a1a8af6e1e386_1636098987700_write.sst 100% 2122 2.2MB/s 00:00
1_4_69_9467c10f062996c86750ce98960d2573aa8dca7ac32e2d8daeaa5a904340d508_1636098987719_write.sst 100% 5033 2.1MB/s 00:00
1_4_69_9938b5edd23035db4db3f5906a1ec44ab74bfa0ac79f0b6990a8ce8d87da5302_1636098987716_write.sst 100% 1622 906.4KB/s 00:00
1_4_69_9fb8afb3f7322e93f506f0d9d11e9b1569bc90b7c3779da9bb7e35137e8e6597_1636098987693_default.sst 100% 1216 1.5MB/s 00:00
1_4_69_9fb8afb3f7322e93f506f0d9d11e9b1569bc90b7c3779da9bb7e35137e8e6597_1636098987693_write.sst 100% 1875 2.7MB/s 00:00
1_4_69_ac53a3e2ccb9e1349c600272ea241c8f20673a53ca792f663daf76aa8f6dfb95_1636098987689_write.sst 100% 1699 2.6MB/s 00:00
1_4_69_d6511a15b20a224505f09eaed9d7b45d126ce04eb30be4da413d8f370b66ea53_1636098987708_write.sst 100% 1660 2.2MB/s 00:00
1_4_69_dc3130b8088cd874a3ebf095e0290965946f6053e234a4d345d76f32cba3fed0_1636098987712_default.sst 100% 1279 1.8MB/s 00:00
1_4_69_dc3130b8088cd874a3ebf095e0290965946f6053e234a4d345d76f32cba3fed0_1636098987712_write.sst 100% 1415 1.9MB/s 00:00在PD节点上执行恢复命令br restore db --pd "192.168.59.27:2379" --db "chnbs" --storage "local:///tmp/chnbs" --log-file
并查看恢复数据
[root@node1 tmp]# br restore db --pd "192.168.59.27:2379" --db "chnbs" --storage "local:///tmp/chnbs" --log-file restoredb.log
Detail BR log in restoredb.log
Database restore <------------------------------------------------------------------------------------------------------------------------------------------------> 100.00%
[2021/11/05 16:07:52.848 +08:00] [INFO] [collector.go:62] ["Database restore success summary"] [total-ranges=21] [ranges-succeed=21] [ranges-failed=0] [split-region=305.014693ms] [restore-checksum=62.943229ms] [restore-ranges=9] [Size=66114] [total-take=3.642172976s] [total-kv=233] [data-size=24.08kB] [average-speed=70.62kB/s]
[root@node1 tmp]# mysql -uroot -h 192.168.59.27 -P4000
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 11
Server version: 5.7.25-TiDB-v5.2.1 TiDB Server (Apache License 2.0) Community Edition, MySQL 5.7 compatible
Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| INFORMATION_SCHEMA |
| METRICS_SCHEMA |
| PERFORMANCE_SCHEMA |
| chnbs |
| mysql |
| test |
+--------------------+
6 rows in set (0.00 sec)
mysql> use chnbs
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> show tables;
+----------------------+
| Tables_in_chnbs |
+----------------------+
| a |
| f_comment |
| f_config |
| f_enterprise |
| f_industry |
| f_job_intention |
| f_notification |
| f_notification_badge |
| f_order |
+----------------------+
9 rows in set (0.00 sec)
mysql> select count(*) from f_order;
+----------+
| count(*) |
+----------+
| 87 |
+----------+
1 row in set (0.01 sec)



