BR备份测试


全量备份恢复

全量备份

1,建立备份目录

在BR节点和每个TiKV节点创建文件夹,用于存储备份文件,要保证文件夹为空;

mkdir -p /export/servers/TiDB/backup
chmod 777 /export/servers/TiDB/backup
bin ]# br backup full --pd "X.X.X.X:2379" --storage "/export/servers/TiDB/backup"  --ratelimit 120 --log-file backfull.log 
Detail BR log in backfull.log 
Full backup <------------------------------------------------------------------------------------------------------------------------------------------------------> 100.00%
Checksum <---------------------------------------------------------------------------------------------------------------------------------------------------------> 100.00%
[2022/02/11 14:59:30.672 +08:00] [INFO] [collector.go:62] ["Full backup success summary"] [total-ranges=1] [ranges-succeed=1] [ranges-failed=0] [backup-checksum=1.482612ms] [backup-fast-checksum=1.935795ms] [backup-total-regions=1] [BackupTS=431112262921748484] [Size=3596] [total-take=96.37658ms] [total-kv=4] [data-size=144B] [average-speed=3.183kB/s]

返回的信息可以看到备份执行的进度;备份后会自动进行checksum校验;

2, 查看备份文件

X.X.X.X | SUCCESS | rc=0 >>
backup.lock
backupmeta

X.X.X.X | SUCCESS | rc=0 >>


X.X.X.X | SUCCESS | rc=0 >>
5_44_37_9fb8afb3f7322e93f506f0d9d11e9b1569bc90b7c3779da9bb7e35137e8e6597_1644562770644_write.sst

X.X.X.X| SUCCESS | rc=0 >>

KV节点的备份目录下会有SST文件; BR节点下会有一个backupmeta的元数据文件和backup.lock文件,提示其他jobs该任务正在备份;

全量恢复

1, 先删除test库和tony库

mysql> drop database test;
droQuery OK, 0 rows affected (0.43 sec)

mysql> drop database tony;
Query OK, 0 rows affected (0.60 sec)
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| INFORMATION_SCHEMA |
| METRICS_SCHEMA     |
| PERFORMANCE_SCHEMA |
| mysql              |
+--------------------+
4 rows in set (0.00 sec)

2, COPY备份集,确保所有TiKV节点的storage文件夹都拥有全量的SST文件;

 

3, 执行恢复

backup]# br restore full --pd "X.X.X.X:2379" --storage "local:///export/servers/TiDB/backup" --ratelimit 120 --log-file restorefull.log
Detail BR log in restorefull.log 
Full restore <-----------------------------------------------------------------------------------------------------------------------------------------------------> 100.00%
[2022/02/11 15:54:13.815 +08:00] [INFO] [collector.go:62] ["Full restore success summary"] [total-ranges=2] [ranges-succeed=2] [ranges-failed=0] [split-region=154.023832ms] [restore-checksum=4.128595ms] [restore-ranges=1] [Size=3596] [total-take=2.784340011s] [total-kv=4] [data-size=144B] [average-speed=1.454kB/s]

4, 数据验证

mysql> select * from tony.hero;
+----+-----------+
| id | name      |
+----+-----------+
|  1 | zhangliao |
|  2 | zhaoyun   |
|  3 | pangtong  |
|  4 | zhangsan  |
+----+-----------+
4 rows in set (0.01 sec)

单库级别备份和恢复

单库备份

backup]# br backup db --db tony --pd "${PD-IP}:2379"  -s "/export/servers/TiDB/backup/db/" --ratelimit 120 --log-file  "backupdb.log"
Detail BR log in backupdb.log 
Database backup <--------------------------------------------------------------------------------------------------------------------------------------------------> 100.00%
Checksum <---------------------------------------------------------------------------------------------------------------------------------------------------------> 100.00%
[2022/02/11 16:04:59.619 +08:00] [INFO] [collector.go:62] ["Database backup success summary"] [total-ranges=1] [ranges-succeed=1] [ranges-failed=0] [backup-checksum=201.97194ms] [backup-fast-checksum=382.261µs] [backup-total-regions=1] [Size=608884] [BackupTS=431113292728238082] [total-take=660.785589ms] [data-size=9.437MB] [average-speed=22.88MB/s] [total-kv=262144]

注意:如果报错:Error: backup lock exists, may be some backup files in the path already: [BR:Common:ErrInvalidArgument]invalid argument

可能是有其他任务在执行,如果确认没有,则删除BR节点下的backup.lock后重试备份即可;

单库恢复

1, 删除数据

mysql> select count(1) from tony.hero;
+----------+
| count(1) |
+----------+
|   262144 |
+----------+
1 row in set (0.01 sec)

mysql> drop database tony;
Query OK, 0 rows affected (0.52 sec)

2, 将备份文件COPY,确保所有的TiKV节点都拥有全量数据

3, 恢复

br restore db --db tony --pd "${PD_IP}:2379" -s "/export/servers/TiDB/backup/db/" --ratelimit 120 --log-file "restoredb.log"    Detail BR log in restoredb.log 
Database restore <-------------------------------------------------------------------------------------------------------------------------------------------------> 100.00%
[2022/02/11 16:13:41.561 +08:00] [INFO] [collector.go:62] ["Database restore success summary"] [total-ranges=2] [ranges-succeed=2] [ranges-failed=0] [split-region=1.160223ms] [restore-checksum=193.264465ms] [restore-ranges=1] [Size=608884] [total-take=2.402358075s] [total-kv=262144] [data-size=9.437MB] [average-speed=9.032MB/s]

单表备份恢复

1, 备份

backup]# br backup table --db tony -t hero --pd "${PD_IP}:2379"  -s "/export/servers/TiDB/backup/tb" --ratelimit 120 --log-file "backuptb.log"
Detail BR log in backuptb.log 
Table backup <-----------------------------------------------------------------------------------------------------------------------------------------------------> 100.00%
Checksum <---------------------------------------------------------------------------------------------------------------------------------------------------------> 100.00%
[2022/02/11 16:19:31.200 +08:00] [INFO] [collector.go:62] ["Table backup success summary"] [total-ranges=1] [ranges-succeed=1] [ranges-failed=0] [backup-checksum=184.963549ms] [backup-fast-checksum=370.343µs] [backup-total-regions=1] [BackupTS=431113521134305281] [Size=608888] [total-take=966.424733ms] [data-size=9.437MB] [average-speed=12.96MB/s] [total-kv=262144]

2, 清理表数据,并同步 TiKV备份文件;

 3, 进行恢复

br restore table  --db tony -t hero --pd "${PD-IP}:2379"  -s "/export/servers/TiDB/backup/tb" --ratelimit 120 --log-file "restoretb.log"
Detail BR log in restoretb.log 
Table restore <----------------------------------------------------------------------------------------------------------------------------------------------------> 100.00%
[2022/02/11 16:24:11.573 +08:00] [INFO] [collector.go:62] ["Table restore success summary"] [total-ranges=2] [ranges-succeed=2] [ranges-failed=0] [split-region=378.427981ms] [restore-checksum=193.732455ms] [restore-ranges=1] [Size=608888] [total-take=3.37811245s] [total-kv=262144] [data-size=9.437MB] [average-speed=8.395MB/s]

4, 验证

mysql> select count(1) from hero;
+----------+
| count(1) |
+----------+
|   262144 |
+----------+
1 row in set (0.18 sec)

增量备份恢复

先进行一个全量备份

br backup full --pd "${PD-IP}:2379"  -s "/export/servers/TiDB/backup/all" --ratelimit 120 --log-file "backupfull.log"  
Detail BR log in backupfull.log 
Full backup <------------------------------------------------------------------------------------------------------------------------------------------------------> 100.00%
Checksum <---------------------------------------------------------------------------------------------------------------------------------------------------------> 100.00%
[2022/02/11 16:28:37.012 +08:00] [INFO] [collector.go:62] ["Full backup success summary"] [total-ranges=1] [ranges-succeed=1] [ranges-failed=0] [backup-checksum=171.02832ms] [backup-fast-checksum=373.579µs] [backup-total-regions=1] [BackupTS=431113664291143682] [Size=608878] [total-take=646.427791ms] [total-kv=262144] [data-size=9.437MB] [average-speed=22.05MB/s]

模拟数据写入:

mysql> show tables;
+----------------+
| Tables_in_tony |
+----------------+
| hero           |
+----------------+
1 row in set (0.00 sec)

mysql> create table hero2 like hero;
Query OK, 0 rows affected (0.19 sec)

mysql> insert into hero2 select * from hero limit 10;
Query OK, 10 rows affected (0.11 sec)
Records: 10  Duplicates: 0  Warnings: 0

mysql> delete from hero where id = 1;
Query OK, 1 row affected (0.03 sec)

mysql> 

获取上一次备份时间戳

backup]# br validate decode --field="end-version" -s "/export/servers/TiDB/backup/all" | tail -n1                   
Detail BR log in /tmp/br.log.2022-02-11T16.30.53+0800 
431113664291143682

新建增量备份目录,并进行增量备份

backup]# br backup full --pd "XX.XX.XX.XX:2379"  -s "/export/servers/TiDB/backup/incr1" --lastbackupts 431113664291143682 
Detail BR log in /tmp/br.log.2022-02-11T16.36.14+0800 
Full backup <------------------------------------------------------------------------------------------------------------------------------------------------------> 100.00%
Checksum <---------------------------------------------------------------------------------------------------------------------------------------------------------> 100.00%
[2022/02/11 16:36:14.937 +08:00] [INFO] [collector.go:62] ["Full backup success summary"] [total-ranges=2] [ranges-succeed=2] [ranges-failed=0] [backup-checksum=82.305µs] [backup-total-regions=2] [BackupTS=431113784471322626] [Size=8592] [total-take=108.682153ms] [data-size=379B] [average-speed=10.77kB/s] [total-kv=11]

模拟数据误删除

mysql> drop database tony;
sQuery OK, 0 rows affected (0.39 sec)

首先同步TiKV节点文件并进行全量恢复,

br restore full  --pd "XX.XX.XX.XX:2379"  -s "/export/servers/TiDB/backup/all" --ratelimit 120 --log-file "restorefull.log"    
Detail BR log in restorefull.log 
Full restore <-----------------------------------------------------------------------------------------------------------------------------------------------------> 100.00%
[2022/02/11 16:51:45.716 +08:00] [INFO] [collector.go:62] ["Full restore success summary"] [total-ranges=2] [ranges-succeed=2] [ranges-failed=0] [split-region=360.522704ms] [restore-checksum=185.927304ms] [restore-ranges=1] [Size=608878] [total-take=3.843520428s] [total-kv=262144] [data-size=9.437MB] [average-speed=8.414MB/s]

可以看到此时hero表已经被成功恢复; 

mysql> show tables from tony;
+----------------+
| Tables_in_tony |
+----------------+
| hero           |
+----------------+
1 row in set (0.00 sec)

同步tikv的增量文件,确保所有节点都有全量的增量备份;

进行增量恢复;

 br restore full  --pd "XX.XX.XX.XX:2379"  -s "/export/servers/TiDB/backup/incr1" --ratelimit 120 --log-file "IncrRestoreFull.log"
Detail BR log in IncrRestoreFull.log 
Full restore <-----------------------------------------------------------------------------------------------------------------------------------------------------> 100.00%
[2022/02/11 16:54:05.825 +08:00] [INFO] [collector.go:62] ["Full restore success summary"] [total-ranges=4] [ranges-succeed=4] [ranges-failed=0] [split-region=174.564434ms] [restore-checksum=251.705µs] [restore-ranges=2] [Size=8592] [total-take=2.249619054s] [total-kv=11] [data-size=379B] [average-speed=1.449kB/s]
mysql> show tables;
+----------------+
| Tables_in_tony |
+----------------+
| hero           |
| hero2          |
+----------------+
2 rows in set (0.00 sec)

mysql> select count(1) from hero2;
+----------+
| count(1) |
+----------+
|       10 |
+----------+
1 row in set (0.00 sec)

可以看到hero2 表也已经被恢复成功;

mysql> select count(1) from hero;
+----------+
| count(1) |
+----------+
|   262143 |
+----------+
1 row in set (0.00 sec)

mysql> select * from hero where id = 1;
Empty set (0.01 sec)

而且hero1中删除的部分数据(id=1)也已经被删除; 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值