作者: 清风明月 

本文章介绍了通过BR对tidb数据库备份到共享存储上,本文将结束将NFS共享存储上的备份数据恢复到K8S集群环境上。本文介绍的恢复方法基于 TiOperator 的 CustomResourceDefinition (CRD) 实现,底层使用 BR 工具来恢复数据。BR 全称为 Backup & Restore,是 TiDB 分布式备份恢复的命令行工具,用于对 TiDB 集群进行数据备份和恢复。



常用场景

当使用 BR 将 TiDB 集群数据备份到持久卷后,如果需要从持久卷将备份的 SST (键值对) 文件恢复到 TiDB 集群,请参考本文使用 BR 进行恢复。

注意

  • BR 只支持 TiDB v3.1 及以上版本。
  • BR 恢复的数据无法被同步到下游,因为 BR 直接导入 SST 文件,而下游集群目前没有办法获得上游的 SST 文件。


1. 下载 backup-rbac

---
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



2. 执行命令创建恢复所需的RBAC相关资源

[root@k8s]# 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

备注:如果TiDB版本高于v4.0.8可以忽略此步骤,如果低于需要执行如下操作确保你拥有恢复数据库 mysql.tidb 表的 SELECTUPDATE 权限,用于恢复前后调整 GC 时间。创建 restore-demo2-tidb-secret secret:

kubectl create secret generic restore-demo2-tidb-secret --from-literal=user=root --from-literal=password=<password> --namespace=tidb



3. 从共享存储恢复数据



3.1. 创建恢复的配置文件,将指定的备份数据恢复到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。#namespace
##共享存储的地址
  local:
    prefix: backup-nfs
    volume:
      name: nfs
      nfs:
        server: 172.16.5.194
        path: /home/k8s-nfs
    volumeMount:
      name: nfs
      mountPath: /nfs



3.2. 应用配置文件,并验证恢复数据

[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

通过TiOperator恢复共享存储备份数据_blog



3.3. 查看恢复的数据库和表

通过TiOperator恢复共享存储备份数据_spec_02



总结

在配置 restore.yaml 文件时,请参考以下信息:

  • 以上示例中,存储在 NFS 上 local://${.spec.local.volume.nfs.path}/${.spec.local.prefix}/ 文件夹下的备份数据,被恢复到 tidb 命名空间中的 TiDB 集群 yz。更多持久卷存储相关配置,参考 Local 存储字段介绍
  • .spec.br 中的一些参数项均可省略,如 logLevelstatusAddrconcurrencyrateLimitchecksumtimeAgosendCredToTikv。更多 .spec.br 字段的详细解释,参考 BR 字段介绍。
  • 如果使用 TiDB >= v4.0.8, BR 会自动调整 tikv_gc_life_time 参数,不需要在 Restore CR 中配置 spec.to 字段。
  • 更多 Restore CR 字段的详细解释,参考 Restore CR 字段介绍。

具体可以参考下官方文档,介绍比较详细,具体如下:https://docs.pingcap.com/zh/tidb-in-kubernetes/stable/restore-from-pv-using-br#%E7%AC%AC-2-%E6%AD%A5%E4%BB%8E%E6%8C%81%E4%B9%85%E5%8D%B7%E6%81%A2%E5%A4%8D%E6%95%B0%E6%8D%AE