使用 BR 恢复 S3 兼容存储上的备份数据

    本文使用的恢复方式基于 TiDB Operator 的 Custom Resource Definition (CRD) 实现,底层使用 BR 进行数据恢复。BR 全称为 Backup & Restore,是 TiDB 分布式备份恢复的命令行工具,用于对 TiDB 集群进行数据备份和恢复。

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

    注意

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

    本文假设将存储在 Amazon S3 上指定路径 存储桶中 spec.s3.prefix 文件夹下的备份数据恢复到 namespace test2 中的 TiDB 集群 demo2。下面是具体的操作过程。

    使用 BR 将 S3 兼容存储上的备份数据恢复到 TiDB 前,请按照以下步骤准备恢复环境。

    1. 下载文件 ,并执行以下命令在 test2 这个 namespace 中创建恢复需要的 RBAC 相关资源:

      • 如果要恢复的数据在 Amazon S3 上,可以使用三种权限授予方式授予权限,可参考文档 AWS 账号授权
      • 如果要恢复的数据在其他兼容 S3 的存储上,例如 Ceph、MinIO,可以使用 AccessKey 和 SecretKey 模式授权,可参考文档。
    2. 如果你使用的 TiDB 版本低于 v4.0.8,你还需要进行以下操作。如果你使用的 TiDB 为 v4.0.8 及以上版本,请跳过此步骤。

      1. 确保你拥有恢复数据库 mysql.tidb 表的 SELECTUPDATE 权限,用于恢复前后调整 GC 时间。

      2. 创建 restore-demo2-tidb-secret secret 用于存放访问 TiDB 集群的 root 账号和密钥。

        1. kubectl create secret generic restore-demo2-tidb-secret --from-literal=password=${password} --namespace=test2

    根据上一步选择的远程存储访问授权方式,你需要使用下面对应的方法将备份数据恢复到 TiDB:

    • 方法 1: 如果通过了 accessKey 和 secretKey 的方式授权,你可以按照以下说明创建 Restore CR 恢复集群数据:

      1. kubectl apply -f resotre-aws-s3.yaml

      restore-aws-s3.yaml 文件内容如下:

      1. kubectl apply -f restore-aws-s3.yaml

      restore-aws-s3.yaml 文件内容如下:

      1. ---
      2. apiVersion: pingcap.com/v1alpha1
      3. kind: Restore
      4. metadata:
      5. name: demo2-restore-s3
      6. namespace: test2
      7. annotations:
      8. iam.amazonaws.com/role: arn:aws:iam::123456789012:role/user
      9. spec:
      10. cluster: demo2
      11. sendCredToTikv: false
      12. clusterNamespace: test2
      13. # logLevel: info
      14. # concurrency: 4
      15. # rateLimit: 0
      16. # timeAgo: ${time}
      17. # checksum: true
      18. # Only needed for TiDB Operator < v1.1.10 or TiDB < v4.0.8
      19. to:
      20. host: ${tidb_host}
      21. port: ${tidb_port}
      22. user: ${tidb_user}
      23. secretName: restore-demo2-tidb-secret
      24. s3:
      25. provider: aws
      26. region: us-west-1
      27. bucket: my-bucket
      28. prefix: my-folder
    • 方法 3: 如果通过了 IAM 绑定 ServiceAccount 的方式授权,你可以按照以下说明创建 Restore CR 恢复集群数据:

      restore-aws-s3.yaml 文件内容如下:

      1. ---
      2. apiVersion: pingcap.com/v1alpha1
      3. kind: Restore
      4. metadata:
      5. name: demo2-restore-s3
      6. namespace: test2
      7. serviceAccount: tidb-backup-manager
      8. br:
      9. cluster: demo2
      10. sendCredToTikv: false
      11. clusterNamespace: test2
      12. # statusAddr: ${status_addr}
      13. # concurrency: 4
      14. # rateLimit: 0
      15. # timeAgo: ${time}
      16. # checksum: true
      17. # Only needed for TiDB Operator < v1.1.10 or TiDB < v4.0.8
      18. to:
      19. host: ${tidb_host}
      20. port: ${tidb_port}
      21. user: ${tidb_user}
      22. secretName: restore-demo2-tidb-secret
      23. s3:
      24. provider: aws
      25. region: us-west-1
      26. bucket: my-bucket
      27. prefix: my-folder

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

    • 关于兼容 S3 的存储相关配置,请参考 S3 存储字段介绍
    • .spec.br 中的一些参数为可选项,如 logLevelstatusAddrconcurrencyrateLimitchecksumtimeAgosendCredToTikv。更多 .spec.br 字段的详细解释,请参考 。
    • 如果你使用的 TiDB 为 v4.0.8 及以上版本,BR 会自动调整 tikv_gc_life_time 参数,不需要在 Restore CR 中配置 spec.to 字段。
    • 更多 Restore CR 字段的详细解释,请参考 Restore CR 字段介绍

    创建好 CR 后,可通过以下命令查看恢复的状态:

    1. kubectl get rt -n test2 -o wide

    在使用过程中如果遇到问题,可以参考。