上篇文章介绍了通过BR对tidb数据库备份到NFS共享存储上,本文将结束将NFS共享存储上的备份数据恢复到K8S集群环境上。本文介绍的恢复方法基于 TiDB Operator 的 CustomResourceDefinition (CRD) 实现,底层使用 BR 工具来恢复数据。BR 全称为 Backup & Restore,是 TiDB 分布式备份恢复的命令行工具,用于对 TiDB 集群进行数据备份和恢复。
常用场景
当使用 BR 将 TiDB 集群数据备份到持久卷后,如果需要从持久卷将备份的 SST (键值对) 文件恢复到 TiDB 集群,请参考本文使用 BR 进行恢复。
注意
BR 只支持 TiDB v3.1 及以上版本。
BR 恢复的数据无法被同步到下游,因为 BR 直接导入 SST 文件,而下游集群目前没有办法获得上游的 SST 文件。
一、环境准备
下载 backup-rbac.yaml 文件到恢复的服务器上
---
kind: Role
apiVersion: rbac
.authorization.k8s
.io
/v1
metadata:
name: tidb
-backup-manager
labels:
app
.kubernetes
.io
/component: tidb
-backup-manager
rules:
- apiGroups:
[""]
resources:
["events"]
verbs:
["*"]
- apiGroups:
["pingcap.com"]
resources:
["backups", "restores"]
verbs:
["get", "watch", "list", "update"]
---kind: ServiceAccount
apiVersion: v1
metadata:
name: tidb
-backup-manager
---
kind: RoleBinding
apiVersion: rbac
.authorization.k8s
.io
/v1
metadata:
name: tidb
-backup-manager
labels:
app
.kubernetes
.io
/component: tidb
-backup-manager
subjects:
-kind: ServiceAccount
name: tidb
-backup-manager
roleRef:
apiGroup: rbac
.authorization.k8s
.io
kind: Role
name: tidb
-backup-manager
执行命令创建恢复所需的RBAC相关资源
[root
@k8s-master
backup]# kubectl apply -f backup-rbac.yaml -ntidb
role
.rbac
.authorization.k8s
.io
/tidb
-backup-manager created
serviceaccount
/tidb
-backup-manager created
rolebinding
.rbac
.authorization.k8s
.io
/tidb
-backup-manager created
备注:如果备份的时候创建了此步骤可以省略
再次确认是否从K8S集群中可以访问备份数据的NFS服务器
如果TiDB版本高于v4.0.8可以忽略此步骤,如果低于需要执行如下操作
确保你拥有恢复数据库 mysql.tidb 表的 SELECT 和 UPDATE权限,用于恢复前后调整 GC 时间。创建 restore-demo2-tidb-secret secret:kubectl create secret generic restore-demo2-tidb-secret --from-literal
=user
=root --from-literal
=password
=<password
> --namespace
=tidb
二、从持久卷NFS恢复数据
创建恢复的配置文件,将指定的备份数据恢复到TiDB集群
[root
@k8s-master
restore]# cat restore.yaml
---
apiVersion: pingcap
.com
/v1alpha1
kind:
Restore
metadata:
name: demo2
-restore-nfs
namespace: tidb
spec:
br:
cluster: yz
clusterNamespace: tidb
local:
prefix:
backup-nfs
volume:
name: nfs
nfs:
server:
172.16.5.194
path:
/home
/k8s
-nfs
volumeMount:
name: nfs
mountPath:
/nfs
应该该配置文件,并验证恢复数据
[root
@k8s-master
restore]# kubectl apply -f restore.yaml
restore.pingcap
.com
/demo2
-restore-nfs created
[root
@k8s-master
restore]# kubectl get restore -ntidb
NAME
STATUS COMMITTS AGE
demo2
-restore-nfs Running
49s
查看恢复的数据库和表