全量备份恢复
全量备份
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)也已经被删除;