TIDB BR物理备份运维

一、先决条件

  • 我们按照 TIDB 官方说的,尽量使用共享存储,因为在使用 br 恢复数据时需要将所有节点的数据手动拷贝到一起,同时执行 br 命令的机器上还存在 backupmeta 元数据文件。

  • 本文将使用 NFS 网络共享存储进行实现 TIDB 备份与恢复

注意:本文 br 主机选择 TIDB 中控机

1.1 安装 NFS 服务

  • 安装并启动 NFS 软件
[root@tidb ~]# yum -y install nfs-utils rpcbind
[root@tidb ~]# systemctl start rpcbind
[root@tidb ~]# systemctl enable rpcbind
  • 创建 TIDB 共享备份路径
[root@tidb ~]# mkdir -p /backup
[root@tidb ~]# chown nfsnobody.nfsnobody /backup
  • 编辑 NFS 网络共享目录配置文件

    • 因为对 NFS 权限控制理解有限,本文将使用 高位权限目录

      • all_squash参数: 共享文件的 UID 和 GID 映射 nfsnobody 用户,适合公用目录
    • 但为了安全,将连接挂载来源指定 TIDB 每个节点的 IP 地址

[root@tidb ~]# echo -e "/backup    10.25.21.21/32(rw,sync,all_squash)" >> /etc/exports
[root@tidb ~]# echo -e "/backup    10.25.21.22/32(rw,sync,all_squash)" >> /etc/exports
[root@tidb ~]# echo -e "/backup    10.25.21.23/32(rw,sync,all_squash)" >> /etc/exports
  • 启动 NFS 服务,并设置开机自启动
[root@tidb ~]# systemctl start nfs-server
[root@tidb ~]# systemctl enable nfs-server

1.2 挂载 NFS 服务

  • 挂载将在其余 3 个 TIDB 节点操作( 客户端 )

  • 安装 nfs 客户端

    • 注意:NFS 客户端与服务端都在一个安装包内,所以与服务端安装的软件包一致,但不需要启动 NFS 服务

    • 使用 root 用户执行以下命令

  • 检查 NFS 可挂载目录

$ showmount -e 10.25.21.20
# Export list for 10.25.21.20:
# /backup 10.25.21.23/32,10.25.21.22/32,10.25.21.21/32
  • 命令交互式挂载 NFS 远程共享目录

    • 不建议将 NFS 挂载配置写入 /etc/fstab 文件中,如果 NFS 服务端与 NFS 客户端网络通信出现问题,那么在 NFS 客户端重启服务器时将出现一直卡在连接 NFS 服务端这一步骤。
$ yum -y install rpcbind nfs-utils
$ mkdir /home/tidb/backup
$ chown -R tidb.tidb /home/tidb/backup
$ mount -t nfs 10.25.21.20:/backup /home/tidb/backup
  • 检查 NFS 挂载状态
$ df -Th
Filesystem          Type      Size  Used Avail Use% Mounted on
(略)....
10.25.21.20:/backup nfs4       97G  2.4G   95G   3% /home/tidb/backup

1.3 安装 BR 工具

[root@tidb ~]# wget https://download.pingcap.org/tidb-toolkit-v4.0.8-linux-amd64.tar.gz
[root@tidb ~]# tar xf tidb-toolkit-v4.0.8-linux-amd64.tar.gz -C /data
[root@tidb ~]# mv /data/tidb-toolkit-v4.0.8-linux-amd64 /data/tidb_tools
[root@tidb ~]# ll -sh /data/tidb_tools/bin/br
92M -rwxr-xr-x 1 root root 92M Oct 30 19:08 /data/tidb_tools/bin/br

二、BR 物理备份

  • 官方参考链接

  • 本文环境将 br 工具安装到了 中控机,所以在 中控机 切换到 tidb 用户下执行备份命令

backupbr 的子命令
fullbackup 的子命令
-s--storage:备份保存的路径
"local:///tmp/backup"-s 的参数,保存的路径为各个 TiKV 节点本地磁盘的 /tmp/backup
--pd:PD 服务地址
"${PDIP}:2379"--pd 的参数

  • 本次全量备份使用了 13

    • 注意:使用 tidb 普通用户进行备份
[root@tidb ~]# su - tidb
[tidb@tidb ~]# /data/tidb_tools/bin/br backup full --pd "10.25.21.21:2379" --storage "local:///home/tidb/backup/$(date +%F)"
Detail BR log in /tmp/br.log.2021-02-07T16.57.52+0800 
Full backup <------------------------------------------------------------------------------------------------------------------------------------------------------------------------------> 100.00%
Checksum <---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------> 100.00%
[2021/02/07 16:58:07.339 +08:00] [INFO] [collector.go:60] ["Full backup Success summary: total backup ranges: 20, total success: 20, 
total failed: 0, total take(Full backup time): 13.300581029s, total take(real time): 14.349676637s, total kv: 4000000, total size(MB): 484.45, avg speed(MB/s): 36.42"] ["backup checksum"=953.957019ms] 
["backup fast checksum"=2.867024ms] ["backup total regions"=20] [BackupTS=422756554643341314] [Size=217705873]
  • du 命令检查备份大小 ( 在中控机查看,因为已经配置 NFS 共享存储 )

    • 本文数据是由 sysbench 压测工具生成的 10 张表,每张表 200 万数据,4 个字段

    • 3TIKV 节点数据总量 1.7 GB 左右。1.7 GB / 3 副本 = 550M,备份压缩后 208 MB。本次测试压缩比大约 2.5

[tidb@tidb ~]# du -sh /backup/2021-02-07
208M    /backup/2021-02-07
  • 查看全量备份元数据文件 ( backupmeta )
[tidb@tidb ~]$ ll -sh /home/tidb/backup/2021-02-07/backupmeta 
32K -rw-r--r-- 1 tidb tidb 30K Feb  7 17:13 /home/tidb/backup/2021-02-07/backupmeta
  • 查看备份锁文件( 备份锁文件用于指定的备份目录是否已经存在备份文件 )
[tidb@tidb ~]$ ll -sh /home/tidb/backup/2021-02-07/backup.lock 
4.0K -rw-r--r-- 1 tidb tidb 78 Feb  7 17:13 /home/tidb/backup/2021-02-07/backup.lock

三、BR 物理恢复

  • 模拟数据删除( testdb 库存放 sysbench 生成的 2000 万数据的 10 张表 )
mysql> drop database testdb;
Query OK, 0 rows affected (1.08 sec)
  • 恢复 TIDB 全量数据准备

    • 拷贝备份元数据文件 ( backupmeta ) 到全量备份目录,因为在恢复数据时 BR 工具读取备份时产生的一些元数据
[tidb@tidb ~]$ /data/tidb_tools/bin/br restore full --pd "10.25.21.21:2379" --storage "local:///home/tidb/backup/2021-02-08" --ratelimit 128 --log-file restorefull.log
Detail BR log in restorefull.log 
Full restore <-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------> 100.00%
[2021/02/08 15:35:36.572 +08:00] [INFO] [collector.go:60] ["Full restore Success summary: total restore files: 21, total success: 21, 
total failed: 0, total take(Full restore time): 31.044878842s, total take(real time): 19.166926089s, total kv: 4000000, total size(MB): 484.45, avg speed(MB/s): 15.60"] ["split region"=133.540058ms] 
["restore checksum"=17.982576436s] ["restore ranges"=20] [Size=217762628]

PS:记录一个使用 BR 的臭水坑

  • 在恢复时指定 --storage "local:///home/tidb/backup/$(date +%F)" 代表获取 TIKV 数据到本地的 /home/tidb/backup 目录。

  • 那么在进行数据恢复时应该还指定 /home/tidb/backup 目录,不能因为上传到了 NFS 服务器的 /backup 目录就指定 /backup 目录

  • 下面代码块内是指定 NFS 服务器 /backup 目录恢复数据时出现的错误,这种情况下只能恢复表结构。但恢复数据需要读取备份 sst 文件,因为 TIKV 节点去读取本地 /backup 目录时时没有权限的,就算有权限也没有备份文件。

[tidb@tidb ~]$ /data/tidb_tools/bin/br restore full --pd "10.25.21.21:2379" --storage "local:///backup/2021-02-07" --ratelimit 128 --log-file restorefull.log
Detail BR log in restorefull.log 
Full restore <-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------> 100.00%
Error: 
permission denied: [BR:KV:ErrKVDownloadFailed]download sst failed; 
permission denied: [BR:KV:ErrKVDownloadFailed]download sst failed; 
permission denied: [BR:KV:ErrKVDownloadFailed]download sst failed; 
permission denied: [BR:KV:ErrKVDownloadFailed]download sst failed; 
permission denied: [BR:KV:ErrKVDownloadFailed]download sst failed; 
permission denied: [BR:KV:ErrKVDownloadFailed]download sst failed; 
permission denied: [BR:KV:ErrKVDownloadFailed]download sst failed; 
permission denied: [BR:KV:ErrKVDownloadFailed]download sst failed;
「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
MongoDB
0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论