Skip to content

TiDB 全量备份

全量备份是 TiDB 备份恢复体系中的重要组成部分,用于备份 TiDB 集群的所有数据。TiDB 提供了多种全量备份方式,包括使用 BR(Backup & Restore)工具、TiDB Operator 的备份功能以及第三方备份工具。本文档主要介绍使用 BR 工具进行 TiDB 全量备份的配置、操作步骤和最佳实践。

BR 工具介绍

BR(Backup & Restore)是 TiDB 官方提供的备份恢复工具,用于对 TiDB 集群进行全量备份和增量备份。BR 工具具有以下特点:

  • 高效备份恢复:基于 SST 文件的直接备份和恢复,避免了 SQL 层面的转换,备份恢复速度快
  • 分布式架构:支持分布式备份和恢复,充分利用集群资源
  • 灵活的备份存储:支持将备份数据存储到本地磁盘、S3、GCS、Azure Blob Storage 等多种存储介质
  • 增量备份支持:支持基于全量备份的增量备份,减少备份数据量和备份时间
  • 加密和压缩:支持备份数据的加密和压缩,提高数据安全性和存储效率

BR 工具安装

1. 使用 TiUP 安装

bash
# 安装 BR
tiup install br

# 查看 BR 版本
tiup br --version

2. 从源码编译

bash
# 克隆 TiDB 源码
mkdir -p $GOPATH/src/github.com/pingcap
cd $GOPATH/src/github.com/pingcap
git clone https://github.com/pingcap/tidb.git

# 进入 BR 目录
cd tidb/br

# 编译 BR
go build -o br

# 将 BR 移动到 PATH 目录
mv br /usr/local/bin/

全量备份准备

1. 环境准备

  • TiDB 版本:BR 工具的版本应与 TiDB 集群的版本保持一致
  • 权限要求:执行 BR 备份命令的用户需要具有 TiDB 集群的管理员权限
  • 存储介质:准备足够空间的存储介质,用于存储备份数据
  • 网络连接:确保 BR 工具能够访问 TiDB 集群和存储介质

2. 配置文件准备

BR 工具支持通过配置文件指定备份参数,配置文件格式为 TOML。以下是一个示例配置文件:

toml
# br-backup.toml
[global]
# 日志级别
log-level = "info"
# PD 地址
pd = "127.0.0.1:2379"

[backup]
# 备份存储路径
storage = "local:///backup/full"
# 备份并发数
concurrency = 16
# 是否压缩备份数据
compression = true
# 压缩级别(1-9,默认为 6)
compression-level = 6

执行全量备份

1. 基本语法

bash
tiup br backup full --pd <pd-address> --storage <storage-path> [options]

2. 本地磁盘备份

2.1 单节点本地备份

bash
# 执行全量备份到本地磁盘
tiup br backup full --pd 127.0.0.1:2379 --storage local:///backup/full-$(date +%Y%m%d%H%M%S)

2.2 分布式本地备份

bash
# 执行分布式全量备份到本地磁盘
tiup br backup full --pd 127.0.0.1:2379 --storage local:///backup/full-$(date +%Y%m%d%H%M%S) --concurrency 16

3. S3 备份

3.1 基本 S3 备份

bash
# 执行全量备份到 S3
tiup br backup full --pd 127.0.0.1:2379 --storage s3://tidb-backup/full-$(date +%Y%m%d%H%M%S) --s3.endpoint https://s3.amazonaws.com --s3.access-key <access-key> --s3.secret-access-key <secret-access-key>

3.2 S3 备份(使用 IAM 角色)

bash
# 执行全量备份到 S3(使用 IAM 角色)
tiup br backup full --pd 127.0.0.1:2379 --storage s3://tidb-backup/full-$(date +%Y%m%d%H%M%S) --s3.endpoint https://s3.amazonaws.com --s3.iam-role <iam-role-arn>

4. GCS 备份

bash
# 执行全量备份到 GCS
tiup br backup full --pd 127.0.0.1:2379 --storage gs://tidb-backup/full-$(date +%Y%m%d%H%M%S) --gcs.project-id <project-id> --gcs.credentials-file <credentials-file>

5. Azure Blob Storage 备份

bash
# 执行全量备份到 Azure Blob Storage
tiup br backup full --pd 127.0.0.1:2379 --storage azure://tidb-backup/full-$(date +%Y%m%d%H%M%S) --azure.account-name <account-name> --azure.account-key <account-key>

6. 使用配置文件执行备份

bash
# 使用配置文件执行全量备份
tiup br backup full --config br-backup.toml

全量备份高级选项

1. 压缩备份数据

bash
# 执行压缩全量备份
tiup br backup full --pd 127.0.0.1:2379 --storage local:///backup/full --compression --compression-level 9

2. 加密备份数据

bash
# 生成加密密钥
openssl rand -hex 32 > backup.key

# 执行加密全量备份
tiup br backup full --pd 127.0.0.1:2379 --storage local:///backup/full --encrypt --key-file backup.key

3. 指定备份范围

3.1 按数据库备份

bash
# 只备份指定数据库
tiup br backup full --pd 127.0.0.1:2379 --storage local:///backup/full --db db1,db2

3.2 按表备份

bash
# 只备份指定表
tiup br backup full --pd 127.0.0.1:2379 --storage local:///backup/full --table db1.t1,db2.t2

4. 调整并发数

bash
# 调整备份并发数
tiup br backup full --pd 127.0.0.1:2379 --storage local:///backup/full --concurrency 32

5. 设置超时时间

bash
# 设置备份超时时间(单位:秒)
tiup br backup full --pd 127.0.0.1:2379 --storage local:///backup/full --timeout 3600

查看备份状态

1. 实时查看备份进度

在执行 BR 备份命令时,BR 工具会实时输出备份进度信息,包括已备份的数据量、备份速度、剩余时间等。

2. 查看备份历史

bash
# 查看备份历史
tiup br list --pd 127.0.0.1:2379 --storage local:///backup

3. 查看备份详情

bash
# 查看指定备份的详情
tiup br status --pd 127.0.0.1:2379 --storage local:///backup/full-20230101000000

全量备份最佳实践

1. 备份策略设计

  • 定期全量备份:根据业务需求和数据变化频率,制定定期全量备份计划,如每天、每周或每月执行一次全量备份
  • 增量备份配合:在全量备份的基础上,定期执行增量备份,减少备份数据量和备份时间
  • 备份保留策略:根据业务需求和存储成本,制定合理的备份保留策略,定期清理过期备份
  • 多副本备份:将备份数据存储到多个不同的存储介质或地理位置,提高备份数据的安全性

2. 备份性能优化

  • 合理设置并发数:根据 TiKV 集群的规模和资源情况,合理设置备份并发数,避免对生产集群造成过大压力
  • 选择合适的备份时间:在业务低峰期执行备份操作,减少对生产集群的影响
  • 使用压缩功能:启用备份数据压缩,减少备份数据量和存储成本
  • 优化存储介质:使用高性能的存储介质,如 SSD,提高备份速度

3. 备份安全性

  • 加密备份数据:对敏感数据进行加密备份,保护数据安全
  • 访问控制:限制备份数据的访问权限,只有授权用户才能访问备份数据
  • 定期验证备份:定期验证备份数据的完整性和可用性,确保备份数据可以正常恢复
  • 备份日志审计:记录备份操作日志,便于审计和追溯

4. 备份监控和告警

  • 监控备份进度:实时监控备份进度,及时发现备份异常
  • 设置备份告警:当备份失败或超时,发送告警通知相关人员
  • 记录备份日志:详细记录备份操作日志,便于后续分析和排查问题

常见问题(FAQ)

Q1: 全量备份会影响 TiDB 集群的性能吗?

A1: 全量备份会对 TiDB 集群的性能产生一定影响,主要体现在:

  • 占用 TiKV 节点的 CPU、内存和磁盘 I/O 资源
  • 增加网络流量
  • 可能导致集群的读写延迟增加

建议在业务低峰期执行全量备份,或调整备份并发数,减少对生产集群的影响。

Q2: 如何估算全量备份的数据量?

A2: 可以通过以下方式估算全量备份的数据量:

  • 查看 TiKV 节点的存储空间使用情况
  • 使用 tiup cluster display 命令查看集群的总数据量
  • 参考历史备份的数据量

Q3: 全量备份失败怎么办?

A3: 全量备份失败后,可以通过以下步骤排查问题:

  1. 查看 BR 工具的日志,找出失败原因
  2. 检查 PD 地址是否正确
  3. 检查存储介质的空间是否充足
  4. 检查网络连接是否正常
  5. 检查 TiDB 集群的状态是否正常

Q4: 如何验证备份数据的完整性?

A4: 可以通过以下方式验证备份数据的完整性:

  • 使用 tiup br validate 命令验证备份数据的完整性
  • 在测试环境中恢复备份数据,验证数据的可用性
  • 比较备份前后的数据量和表结构

Q5: 全量备份需要多长时间?

A5: 全量备份的时间取决于以下因素:

  • 数据量大小
  • 备份并发数
  • 存储介质的性能
  • 网络带宽
  • TiDB 集群的负载情况

一般来说,备份速度可以达到 100MB/s 到 1GB/s 不等。

Q6: 如何减少全量备份对生产集群的影响?

A6: 可以通过以下方式减少全量备份对生产集群的影响:

  • 在业务低峰期执行备份
  • 调整备份并发数,减少资源占用
  • 使用 TiFlash 节点进行备份,避免影响 TiKV 节点的正常服务
  • 采用增量备份配合全量备份的策略,减少全量备份的频率

Q7: 可以使用 BR 工具备份 TiDB 4.0 集群吗?

A7: BR 工具支持 TiDB 4.0 及以上版本的集群备份。对于 TiDB 4.0 以下版本的集群,可以使用 Dumpling 工具进行逻辑备份。

Q8: 如何将备份数据从本地磁盘迁移到云存储?

A8: 可以使用以下方式将备份数据从本地磁盘迁移到云存储:

  • 使用云厂商提供的命令行工具,如 AWS CLI、gsutil、azcopy 等
  • 使用第三方工具,如 rclone
  • 配置 BR 工具直接备份到云存储

Q9: 全量备份支持断点续传吗?

A9: BR 工具不支持断点续传功能。如果备份过程中断,需要重新执行备份命令。

Q10: 如何清理过期的备份数据?

A10: 可以通过以下方式清理过期的备份数据:

  • 手动删除过期的备份文件
  • 使用脚本定期清理过期备份
  • 配置存储介质的生命周期管理规则,自动清理过期备份

监控和故障排查

1. 关键监控指标

  • 备份进度:实时监控备份进度,包括已备份的数据量、备份速度、剩余时间等
  • 备份成功率:统计备份成功和失败的次数
  • 备份时间:记录每次备份的开始时间、结束时间和耗时
  • 备份数据量:记录每次备份的数据量大小
  • 集群性能影响:监控备份过程中 TiDB 集群的性能指标,如 CPU 使用率、内存使用率、磁盘 I/O、网络流量等

2. 常见故障排查

2.1 备份失败 - PD 连接错误

可能原因

  • PD 地址错误
  • PD 集群不可用
  • 网络连接问题

解决方法

  • 检查 PD 地址是否正确
  • 检查 PD 集群是否正常运行
  • 检查网络连接是否正常

2.2 备份失败 - 存储介质错误

可能原因

  • 存储路径不存在
  • 存储介质空间不足
  • 存储介质权限不足

解决方法

  • 确保存储路径存在且有写入权限
  • 检查存储介质的空间是否充足
  • 检查存储介质的访问权限

2.3 备份失败 - TiKV 节点错误

可能原因

  • TiKV 节点不可用
  • TiKV 节点负载过高
  • TiKV 节点存储空间不足

解决方法

  • 检查 TiKV 节点是否正常运行
  • 在业务低峰期重新执行备份
  • 检查 TiKV 节点的存储空间是否充足

2.4 备份失败 - 超时

可能原因

  • 备份数据量过大
  • 备份并发数设置不合理
  • 存储介质性能不足

解决方法

  • 增加备份超时时间
  • 调整备份并发数
  • 使用性能更好的存储介质