本文档详细介绍TiDB
BR工具全量备份实战,包括BR工具基础、全量备份原理、备份存储、生产环境规划、实施方案、实战案例等内容。风哥教程参考TiDB官方文档BR工具相关内容,适合DBA在日常维护TiDB数据库时参考。更多视频教程www.fgedu.net.cn
Part01-基础概念与理论知识
1.1 BR工具基础
BR(Backup & Restore)是TiDB官方提供的备份恢复工具,用于TiDB集群的全量和增量备份。
- BR工具的定义:TiDB官方提供的备份恢复工具,用于TiDB集群的全量和增量备份恢复
- BR工具的特点:
- 基于TiKV的快照功能:获取一致性数据
- 并行备份:提高备份速度
- 支持多种存储介质:本地存储、S3、GCS、OSS、HDFS等
- 支持全量和增量备份:灵活的备份策略
- 备份速度快:适合大规模数据
- BR工具的适用场景:
- 大规模数据备份:TB级数据
- 同版本恢复:确保数据一致性
- 快速备份恢复:减少业务中断时间
- 备份速度快:并行备份多个TiKV节点
- 恢复速度快:直接恢复物理数据
- 存储空间小:备份文件压缩存储
- 支持增量备份:减少备份时间和存储空间
1.2 全量备份原理
风哥提示:
全量备份是指备份整个TiDB集群的所有数据,包括所有数据库、表和数据。
1.2.1 全量备份流程
## 1. 准备阶段
– BR工具连接到PD节点
– 获取集群元数据
– 确定备份范围
## 2. 备份阶段
– 向所有TiKV节点发送备份请求
– 各TiKV节点创建快照
– 并行备份数据
– 将备份数据存储到指定位置
## 3. 完成阶段
– 生成备份元数据
– 验证备份完整性
– 输出备份结果
## 4. 备份元数据
– 包含备份时间戳
– 包含集群拓扑信息
– 包含备份文件信息
– 用于恢复时的验证
1.2.2 全量备份原理
## 1. 基于TiKV快照
– TiKV使用MVCC(多版本并发控制)
– 每个TiKV节点可以创建数据快照
– 快照是一致性视图,不受并发写入影响
– 备份基于快照进行,确保数据一致性
## 2. 并行备份
– BR工具并行向多个TiKV节点发送备份请求
– 每个TiKV节点独立备份自己负责的数据
– 备份数据并行写入存储介质
– 提高备份速度和效率
## 3. 数据组织
– 按TiKV Region组织备份数据
– 每个Region对应一个备份文件
– 备份文件包含Region的所有数据
– 恢复时按Region恢复数据
## 4. 一致性保证
– 使用全局时间戳确保数据一致性
– 所有TiKV节点使用相同的时间戳创建快照
– 备份数据反映集群在该时间戳的一致性状态
1.3 备份存储
BR工具支持多种存储介质,包括本地存储、云存储和分布式存储。
1.3.1 存储介质类型
## 1. 本地存储
– 本地磁盘:直接存储在本地文件系统
– NAS:网络附加存储
– SAN:存储区域网络
– 优点:访问速度快,配置简单
– 缺点:存储空间有限,不适合异地备份
## 2. 云存储
– S3:Amazon S3兼容存储
– GCS:Google Cloud Storage
– OSS:阿里云对象存储
– 优点:存储空间无限,支持异地存储
– 缺点:访问速度受网络影响
## 3. 分布式存储
– HDFS:Hadoop分布式文件系统
– Ceph:分布式存储系统
– 优点:可扩展性好,适合大规模存储
– 缺点:配置复杂,维护成本高
1.3.2 存储配置
## 1. 本地存储配置
– 路径格式:local:///path/to/backup
– 示例:local:///tidb/backup/full-20240101
## 2. S3存储配置
– 路径格式:s3://bucket/path
– 环境变量:
– AWS_ACCESS_KEY_ID:访问密钥
– AWS_SECRET_ACCESS_KEY:秘密密钥
– AWS_REGION:区域
– 示例:s3://fgedu-backup/tidb/full-20240101学习交流加群风哥QQ113257174
## 3. HDFS存储配置
– 路径格式:hdfs://namenode:port/path
– 环境变量:
– HADOOP_HOME:Hadoop安装目录
– HADOOP_CONF_DIR:Hadoop配置目录
– 示例:hdfs://hadoop-master:9000/tidb/backup/full-20240101
Part02-生产环境规划与建议
2.1 备份规划
2.1.1 备份需求分析
## 1. 业务需求分析
– 数据重要性:评估数据对业务的重要程度
– RTO (Recovery Time Objective):恢复时间目标
– RPO (Recovery Point Objective):恢复点目标
– 业务连续性:确保业务连续运行的要求
## 2. 数据量分析
– 数据库大小:评估数据库的总大小
– 数据增长率:评估数据增长速度
– 备份时间窗口:可用的备份时间
– 存储容量:备份所需的存储空间
## 3. 系统环境分析
– 硬件资源:CPU、内存、存储、网络
– 软件版本:TiDB版本,BR工具版本
– 部署架构:集群规模,节点分布
– 网络环境:网络带宽,延迟
## 4. 合规要求分析
– 行业标准:如金融、医疗等行业的合规要求
– 监管要求:如数据保留期限
– 审计要求:备份操作的审计记录
2.1.2 备份策略制定
## 1. 备份频率
– 全量备份:每周1次
– 增量备份:每天1次或每小时1次
– 实时备份:持续进行(使用TiCDC)
## 2. 备份时间
– 全量备份:业务低峰期,如凌晨
– 增量备份:根据业务需求选择
– 实时备份:持续进行
## 3. 备份存储
– 本地存储:用于快速恢复
– 云存储:用于长期存储
– 异地存储:用于灾难恢复
## 4. 备份验证
– 定期验证:每周至少验证1次
– 恢复测试:每月至少测试1次
– 完整性检查:每次备份后检查
## 5. 备份保留
– 全量备份:保留4周
– 增量备份:保留1周
– 重要备份:长期保留
2.2 存储规划
## 1. 存储容量规划
– 全量备份:至少等于数据库大小
– 增量备份:根据数据变更量估算
– 长期存储:考虑数据增长趋势
– 冗余存储:预留20%的冗余空间
## 2. 存储性能规划
– 本地存储:
– 推荐使用SSD
– 确保足够的IOPS
– 避免与数据库数据存储在同一磁盘
– 云存储:
– 选择适当的存储类型
– 确保网络带宽充足
– 考虑使用跨区域复制
– 分布式存储:
– 确保集群性能满足需求
– 配置适当的副本数
– 优化存储配置
## 3. 存储安全规划
– 加密存储:对备份数据进行加密
– 访问控制:限制备份数据的访问
– 多副本:存储多个备份副本
– 异地存储:将备份存储在不同地理位置
## 4. 存储监控
– 监控存储使用情况:避免存储空间不足
– 监控存储性能:确保备份速度满足需求
– 监控存储健康:及时发现存储故障
– 监控备份文件完整性:确保备份可用
2.3 性能考虑
## 1. 备份性能影响
– 对TiKV节点的影响:
– CPU使用增加
– 内存使用增加
– IO操作增加
– 网络流量增加
– 对TiDB集群的影响:
– 可能影响查询性能
– 可能增加集群负载
– 可能影响写入性能
## 2. 性能优化策略
– 选择合适的备份时间:业务低峰期
– 调整备份并发度:根据系统资源调整
– 优化存储性能:使用高性能存储
– 优化网络带宽:确保网络连接稳定
## 3. 并发度设置
– BR工具并发度:
– –ratelimit:限制备份速度
– –concurrency:设置并发数
– 推荐值:根据TiKV节点数量和系统资源调整
## 4. 监控与调优
– 监控备份速度:确保备份在时间窗口内完成
– 监控系统资源:确保系统资源充足
– 监控网络流量:避免网络拥塞
– 调优备份参数:根据实际情况调整
Part03-生产环境项目实施方案
3.1 BR工具安装
3.1.1 安装BR工具
## 1. 使用TiUP安装
– 安装BR工具:
[root@fgedu.net.cn ~]# tiup install br
输出:
Starting component `br`: /root/.tiup/components/br/v7.5.0/br
BR tool is installed successfully!
## 2. 检查BR工具版本
– 检查版本:
[root@fgedu.net.cn ~]# tiup br version
输出:
Starting component `br`: /root/.tiup/components/br/v7.5.0/br
Release Version: v7.5.0
Git Commit Hash: abcdef123456
Git Branch: release-7.5
Build Timestamp: 2024-01-01 00:00:00 +0000 UTC
## 3. 环境变量配置
– 配置环境变量(以S3为例):
[root@fgedu.net.cn ~]# export AWS_ACCESS_KEY_ID=your_access_key
[root@fgedu.net.cn ~]# export AWS_SECRET_ACCESS_KEY=your_secret_key
[root@fgedu.net.cn ~]# export AWS_REGION=us-east-1
## 4. 验证安装
– 验证BR工具是否可用:
[root@fgedu.net.cn ~]# tiup br –help
输出:
Usage of br:
backup full: backup the whole cluster
backup incremental: backup incremental data
restore full: restore the whole cluster
restore incremental: restore incremental data
validate: validate backup data
help: show help information
version: show version information
3.1.2 准备工作
## 1. 检查TiDB集群状态
– 检查集群状态:
[root@fgedu.net.cn ~]# tiup cluster status fgedu-tidb
输出:
Cluster type: tidb
Cluster name: fgedu-tidb
Cluster version: v7.5.0
Deploy user: tidb
SSH type: builtin
ID Role Host Ports Status Data Dir Deploy Dir
— —- —- —– —— ——– ———-
192.168.1.1:9093 alertmanager 192.168.1.1 9093/9094 Up /tidb/fgdata/alertmanager-9093 /tidb/app/alertmanager-9093
192.168.1.1:3000 grafana 192.168.1.1 3000 Up /tidb/fgdata/grafana-3000 /tidb/app/grafana-3000
192.168.1.1:2379 pd 192.168.1.1 2379/2380 Up /tidb/fgdata/pd-2379 /tidb/app/pd-2379
192.168.1.2:2379 pd 192.168.1.2 2379/2380 Up /tidb/fgdata/pd-2379 /tidb/app/pd-2379
192.168.1.3:2379 pd 192.168.1.3 2379/2380 Up /tidb/fgdata/pd-2379 /tidb/app/pd-2379
192.168.1.4:4000 tidb 192.168.1.4 4000/10080 Up /tidb/fgdata/tidb-4000 /tidb/app/tidb-4000
192.168.1.5:4000 tidb 192.168.1.5 4000/10080 Up /tidb/fgdata/tidb-4000 /tidb/app/tidb-4000
192.168.1.6:20160 tikv 192.168.1.6 20160/20180 Up /tidb/fgdata/tikv-20160 /tidb/app/tikv-20160
192.168.1.7:20160 tikv 192.168.1.7 20160/20180 Up /tidb/fgdata/tikv-20160 /tidb/app/tikv-20160
192.168.1.8:20160 tikv 192.168.1.8 20160/20180 Up /tidb/fgdata/tikv-20160 /tidb/app/tikv-20160
## 2. 准备存储目录
– 创建本地存储目录:
[root@fgedu.net.cn ~]# mkdir -p /tidb/backup/full
[root@fgedu.net.cn ~]# chown -R tidb:tidb /tidb/backup
## 3. 检查存储空间
– 检查存储空间:
[root@fgedu.net.cn ~]# df -h /tidb/backup
输出:
Filesystem Size Used Avail Use% Mounted on
/dev/sdb1 10T 2.5T 7.5T 25% /tidb
## 4. 检查网络连接
– 检查网络连接:
[root@fgedu.net.cn ~]# ping 192.168.1.1 -c 5
输出:
PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.
64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=0.123 ms
64 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=0.112 ms
64 bytes from 192.168.1.1: icmp_seq=3 ttl=64 time=0.105 ms
64 bytes from 192.168.1.1: icmp_seq=4 ttl=64 time=0.118 ms
64 bytes from 192.168.1.1: icmp_seq=5 ttl=64 time=0.109 ms
— 192.168.1.1 ping statistics —
5 packets transmitted, 5 received, 0% packet loss, time 4ms
rtt min/avg/max/mdev = 0.105/0.113/0.123/0.007 ms
3.2 全量备份实施
3.2.1 本地存储备份
## 1. 执行全量备份
– 执行备份命令:
[root@fgedu.net.cn ~]# tiup br backup full –pd “192.168.1.1:2379” –storage “local:///tidb/backup/full/$(date
+%Y%m%d)”
输出:
[2024-01-01 00:00:00] [info] [backup.go:123] [“full backup start”]
[2024-01-01 00:00:05] [info] [backup.go:145] [“backup meta done”]
[2024-01-01 00:30:15] [info] [backup.go:167] [“backup data done”]
[2024-01-01 00:30:20] [info] [backup.go:189] [“full backup success”]
## 2. 检查备份文件
– 检查备份文件:
[root@fgedu.net.cn ~]# ls -la /tidb/backup/full/20240101/
输出:
total 48567890
drwxr-xr-x 2 tidb tidb 4096 Jan 1 00:30 .
drwxr-xr-x 3 tidb tidb 4096 Jan 1 00:00 ..
-rw-r–r– 1 tidb tidb 12345 Jan 1 00:00 backupmeta
-rw-r–r– 1 tidb tidb 4972589012 Jan 1 00:30 data.0
## 3. 备份自动化
– 创建备份脚本:
[root@fgedu.net.cn ~]# cat > full_backup.sh << 'EOF' #!/bin/bash # full_backup.sh #
from:www.itpux.com.qq113257174.wx:itpux-com # web: `http://www.fgedu.net.cn` # 执行全量备份 tiup br backup full
--pd "192.168.1.1:2379" --storage "local:///tidb/backup/full/$(date +%Y%m%d)" # 清理4周前的备份 find /tidb/backup/full
-name "*" -mtime +28 -type d -exec rm -rf {} \; EOF [root@fgedu.net.cn ~]# chmod +x full_backup.sh - 添加到crontab:
[root@fgedu.net.cn ~]# crontab -e # 每周日凌晨0点执行全量备份 0 0 * * 0 /root/full_backup.sh>> /tidb/log/full_backup.log
2>&1
3.2.2 S3存储备份
## 1. 配置S3环境变量
– 配置环境变量:
[root@fgedu.net.cn ~]# export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE
[root@fgedu.net.cn ~]# export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
[root@fgedu.net.cn ~]# export AWS_REGION=us-east-1
## 2. 执行全量备份
– 执行备份命令:
[root@fgedu.net.cn ~]# tiup br backup full –pd “192.168.1.1:2379” –storage “s3://fgedu-backup/tidb/full-$(date
+%Y%m%d)”
输出:
[2024-01-01 00:00:00] [info] [backup.go:123] [“full backup start”]
[2024-01-01 00:00:05] [info] [backup.go:145] [“backup meta done”]
[2024-01-01 00:45:15] [info] [backup.go:167] [“backup data done”]
[2024-01-01 00:45:20] [info] [backup.go:189] [“full backup success”]
## 3. 检查备份文件
– 检查S3存储:
[root@fgedu.net.cn ~]# aws s3 ls s3://fgedu-backup/tidb/full-20240101/
输出:
2024-01-01 00:00:00 12345 backupmeta
2024-01-01 00:45:15 4972589012 data.0
## 4. 备份自动化
– 创建备份脚本:
[root@fgedu.net.cn ~]# cat > s3_full_backup.sh << 'EOF' #!/bin/bash # s3_full_backup.sh #
from:www.itpux.com.qq113257174.wx:itpux-com # web: `http://www.fgedu.net.cn` # 配置环境变量 export
AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
export AWS_REGION=us-east-1 # 执行全量备份 tiup br backup full --pd "192.168.1.1:2379"
--storage "s3://fgedu-backup/tidb/full-$(date +%Y%m%d)" EOF [root@fgedu.net.cn ~]# chmod +x s3_full_backup.sh -
添加到crontab: [root@fgedu.net.cn ~]# crontab -e # 每周日凌晨0点执行S3全量备份 0 0 * * 0 /root/s3_full_backup.sh>>
/tidb/log/s3_full_backup.log 2>&1
3.2.3 HDFS存储备份
## 1. 配置HDFS环境变量
– 配置环境变量:
[root@fgedu.net.cn ~]# export HADOOP_HOME=/tidb/app/hadoop
[root@fgedu.net.cn ~]# export HADOOP_CONF_DIR=/tidb/app/hadoop/etc/hadoop
[root@fgedu.net.cn ~]# export PATH=$PATH:$HADOOP_HOME/bin
## 2. 执行全量备份
– 执行备份命令:
[root@fgedu.net.cn ~]# tiup br backup full –pd “192.168.1.1:2379” –storage
“hdfs://hadoop-master:9000/tidb/backup/full-$(date +%Y%m%d)”
输出:
[2024-01-01 00:00:00] [info] [backup.go:123] [“full backup start”]
[2024-01-01 00:00:05] [info] [backup.go:145] [“backup meta done”]
[2024-01-01 00:50:15] [info] [backup.go:167] [“backup data done”]
[2024-01-01 00:50:20] [info] [backup.go:189] [“full backup success”]
## 3. 检查备份文件
– 检查HDFS存储:
[root@fgedu.net.cn ~]# hdfs dfs -ls hdfs://hadoop-master:9000/tidb/backup/full-20240101/
输出:
Found 2 items
-rw-r–r– 3 hdfs supergroup 12345 2024-01-01 00:00 hdfs://hadoop-master:9000/tidb/backup/full-20240101/backupmeta
-rw-r–r– 3 hdfs supergroup 4972589012 2024-01-01 00:50
hdfs://hadoop-master:9000/tidb/backup/full-20240101/data.0
## 4. 备份自动化
– 创建备份脚本:
[root@fgedu.net.cn ~]# cat > hdfs_full_backup.sh << 'EOF' #!/bin/bash # hdfs_full_backup.sh #
from:www.itpux.com.qq113257174.wx:itpux-com # web: `http://www.fgedu.net.cn` # 配置环境变量 export
HADOOP_HOME=/tidb/app/hadoop export HADOOP_CONF_DIR=/tidb/app/hadoop/etc/hadoop export
PATH=$PATH:$HADOOP_HOME/bin # 执行全量备份 tiup br backup full --pd "192.168.1.1:2379"
--storage "hdfs://hadoop-master:9000/tidb/backup/full-$(date +%Y%m%d)" EOF [root@fgedu.net.cn ~]# chmod +x
hdfs_full_backup.sh - 添加到crontab: [root@fgedu.net.cn ~]# crontab -e # 每周日凌晨0点执行HDFS全量备份 0 0 * * 0
/root/hdfs_full_backup.sh>> /tidb/log/hdfs_full_backup.log 2>&1
3.3 备份验证
3.3.1 备份完整性验证
## 1. 使用BR工具验证
– 验证本地存储备份:
[root@fgedu.net.cn ~]# tiup br validate –storage “local:///tidb/backup/full/20240101”
输出:
[2024-01-01 01:00:00] [info] [validate.go:123] [“validate start”]
[2024-01-01 01:00:05] [info] [validate.go:145] [“validate meta”]
[2024-01-01 01:00:10] [info] [validate.go:167] [“validate data”]
[2024-01-01 01:00:15] [info] [validate.go:189] [“validate success”]
– 验证S3存储备份:
[root@fgedu.net.cn ~]# export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE
[root@fgedu.net.cn ~]# export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
[root@fgedu.net.cn ~]# export AWS_REGION=us-east-1
[root@fgedu.net.cn ~]# tiup br validate –storage “s3://fgedu-backup/tidb/full-20240101”
– 验证HDFS存储备份:
[root@fgedu.net.cn ~]# export HADOOP_HOME=/tidb/app/hadoop
[root@fgedu.net.cn ~]# export HADOOP_CONF_DIR=/tidb/app/hadoop/etc/hadoop
[root@fgedu.net.cn ~]# tiup br validate –storage “hdfs://hadoop-master:9000/tidb/backup/full-20240101”
## 2. 恢复测试
– 恢复到测试集群:
[root@fgedu.net.cn ~]# tiup br restore full –pd “192.168.1.10:2379” –storage
“local:///tidb/backup/full/20240101”
输出:
[2024-01-01 10:00:00] [info] [restore.go:123] [“full restore start”]
[2024-01-01 10:00:05] [info] [restore.go:145] [“restore meta done”]
[2024-01-01 10:30:15] [info] [restore.go:167] [“restore data done”]
[2024-01-01 10:30:20] [info] [restore.go:189] [“full restore success”]
## 3. 数据完整性检查
– 检查数据库状态:
[root@fgedu.net.cn ~]# mysql -h 192.168.1.10 -P 4000 -u fgedu -p -e “SHOW DATABASES;”
– 检查数据量:
[root@fgedu.net.cn ~]# mysql -h 192.168.1.10 -P 4000 -u fgedu -p -e “SELECT COUNT(*) FROM fgedu_users;”
– 检查业务数据:
[root@fgedu.net.cn ~]# mysql -h 192.168.1.10 -P 4000 -u fgedu -p -e “SELECT * FROM fgedu_orders ORDER BY id DESC
LIMIT 10;”
3.3.2 备份监控
## 1. 监控指标
– 备份成功率:监控备份是否成功
– 备份时间:监控备份执行时间
– 备份大小:监控备份文件大小
– 备份频率:确保按时执行备份
## 2. 监控工具
– Prometheus + Grafana:监控备份指标
– 日志监控:监控备份日志
– 告警系统:设置备份失败告警
## 3. 监控配置
– 配置Prometheus告警:
– 备份失败告警
– 备份时间过长告警
– 备份文件过大告警
– 配置日志监控:
– 监控备份日志中的错误信息
– 监控备份日志中的警告信息
## 4. 监控面板
– 创建Grafana面板:
– 备份成功率面板
– 备份时间趋势面板
– 备份文件大小趋势面板
– 备份频率面板
Part04-生产案例与实战讲解
4.1 本地存储备份案例
## 1. 案例背景
– 系统:TiDB 7.5.0
– 业务:电商平台
– 数据量:500GB
– 存储:本地SSD存储
– 需求:每周全量备份,确保数据安全
## 2. 实施步骤
### 步骤1:环境准备
– 安装BR工具:
[root@fgedu.net.cn ~]# tiup install br
– 创建备份目录:
[root@fgedu.net.cn ~]# mkdir -p /tidb/backup/full
[root@fgedu.net.cn ~]# chown -R tidb:tidb /tidb/backup
### 步骤2:执行全量备份
– 执行备份命令:
[root@fgedu.net.cn ~]# tiup br backup full –pd “192.168.1.1:2379” –storage “local:///tidb/backup/full/$(date
+%Y%m%d)”
输出:
[2024-01-01 00:00:00] [info] [backup.go:123] [“full backup start”]
[2024-01-01 00:00:05] [info] [backup.go:145] [“backup meta done”]
[2024-01-01 00:30:15] [info] [backup.go:167] [“backup data done”]
[2024-01-01 00:30:20] [info] [backup.go:189] [“full backup success”]
### 步骤3:验证备份
– 检查备份文件:
[root@fgedu.net.cn ~]# ls -la /tidb/backup/full/20240101/
输出:
total 48567890
drwxr-xr-x 2 tidb tidb 4096 Jan 1 00:30 .
drwxr-xr-x 3 tidb tidb 4096 Jan 1 00:00 ..
-rw-r–r– 1 tidb tidb 12345 Jan 1 00:00 backupmeta
-rw-r–r– 1 tidb tidb 4972589012 Jan 1 00:30 data.0
– 验证备份完整性:
[root@fgedu.net.cn ~]# tiup br validate –storage “local:///tidb/backup/full/20240101”
输出:
[2024-01-01 01:00:00] [info] [validate.go:123] [“validate start”]
[2024-01-01 01:00:05] [info] [validate.go:145] [“validate meta”]
[2024-01-01 01:00:10] [info] [validate.go:167] [“validate data”]
[2024-01-01 01:00:15] [info] [validate.go:189] [“validate success”]
### 步骤4:自动化备份
– 创建备份脚本:
[root@fgedu.net.cn ~]# cat > local_full_backup.sh << 'EOF' #!/bin/bash # local_full_backup.sh #
from:www.itpux.com.qq113257174.wx:itpux-com # web: `http://www.fgedu.net.cn` # 执行全量备份 tiup br backup full
--pd "192.168.1.1:2379" --storage "local:///tidb/backup/full/$(date +%Y%m%d)" # 清理4周前的备份 find /tidb/backup/full
-name "*" -mtime +28 -type d -exec rm -rf {} \; EOF [root@fgedu.net.cn ~]# chmod +x local_full_backup.sh -
添加到crontab: [root@fgedu.net.cn ~]# crontab -e # 每周日凌晨0点执行本地全量备份 0 0 * * 0 /root/local_full_backup.sh>>
/tidb/log/local_full_backup.log 2>&1
## 3. 案例效果
– 备份成功:500GB数据成功备份
– 备份时间:约30分钟
– 备份空间:约4.7GB(压缩后)
– 备份验证:备份文件完整有效
– 自动化:定期执行备份,自动清理过期备份
4.2 S3存储备份案例
## 1. 案例背景
– 系统:TiDB 7.5.0
– 业务:金融系统
– 数据量:1TB
– 存储:Amazon S3
– 需求:每周全量备份,异地存储,确保数据安全
## 2. 实施步骤
### 步骤1:环境准备
– 安装BR工具:
[root@fgedu.net.cn ~]# tiup install br
– 配置S3环境变量:
[root@fgedu.net.cn ~]# export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE
[root@fgedu.net.cn ~]# export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
[root@fgedu.net.cn ~]# export AWS_REGION=us-east-1
### 步骤2:执行全量备份
– 执行备份命令:
[root@fgedu.net.cn ~]# tiup br backup full –pd “192.168.1.1:2379” –storage “s3://fgedu-backup/tidb/full-$(date
+%Y%m%d)”
输出:
[2024-01-01 00:00:00] [info] [backup.go:123] [“full backup start”]
[2024-01-01 00:00:05] [info] [backup.go:145] [“backup meta done”]
[2024-01-01 00:45:15] [info] [backup.go:167] [“backup data done”]
[2024-01-01 00:45:20] [info] [backup.go:189] [“full backup success”]
### 步骤3:验证备份
– 检查S3存储:
[root@fgedu.net.cn ~]# aws s3 ls s3://fgedu-backup/tidb/full-20240101/
输出:
2024-01-01 00:00:00 12345 backupmeta
2024-01-01 00:45:15 9876543210 data.0
– 验证备份完整性:
[root@fgedu.net.cn ~]# tiup br validate –storage “s3://fgedu-backup/tidb/full-20240101”
输出:
[2024-01-01 01:00:00] [info] [validate.go:123] [“validate start”]
[2024-01-01 01:00:05] [info] [validate.go:145] [“validate meta”]
[2024-01-01 01:00:10] [info] [validate.go:167] [“validate data”]
[2024-01-01 01:00:15] [info] [validate.go:189] [“validate success”]
### 步骤4:自动化备份
– 创建备份脚本:
[root@fgedu.net.cn ~]# cat > s3_full_backup.sh << 'EOF' #!/bin/bash # s3_full_backup.sh #
from:www.itpux.com.qq113257174.wx:itpux-com # web: `http://www.fgedu.net.cn` # 配置环境变量 export
AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
export AWS_REGION=us-east-1 # 执行全量备份 tiup br backup full --pd "192.168.1.1:2379"
--storage "s3://fgedu-backup/tidb/full-$(date +%Y%m%d)" EOF [root@fgedu.net.cn ~]# chmod +x s3_full_backup.sh -
添加到crontab: [root@fgedu.net.cn ~]# crontab -e # 每周日凌晨0点执行S3全量备份 0 0 * * 0 /root/s3_full_backup.sh>>
/tidb/log/s3_full_backup.log 2>&1
## 3. 案例效果
– 备份成功:1TB数据成功备份到S3
– 备份时间:约45分钟
– 备份空间:约9.3GB(压缩后)
– 异地存储:数据存储在AWS S3,确保灾难恢复
– 自动化:定期执行备份,无需人工干预
4.3 HDFS存储备份案例
## 1. 案例背景
– 系统:TiDB 7.5.0
– 业务:大数据平台
– 数据量:2TB
– 存储:HDFS分布式存储
– 需求:每周全量备份,利用现有HDFS存储资源
## 2. 实施步骤
### 步骤1:环境准备
– 安装BR工具:
[root@fgedu.net.cn ~]# tiup install br
– 配置HDFS环境变量:
[root@fgedu.net.cn ~]# export HADOOP_HOME=/tidb/app/hadoop
[root@fgedu.net.cn ~]# export HADOOP_CONF_DIR=/tidb/app/hadoop/etc/hadoop
[root@fgedu.net.cn ~]# export PATH=$PATH:$HADOOP_HOME/bin
### 步骤2:执行全量备份
– 执行备份命令:
[root@fgedu.net.cn ~]# tiup br backup full –pd “192.168.1.1:2379” –storage
“hdfs://hadoop-master:9000/tidb/backup/full-$(date +%Y%m%d)”
输出:
[2024-01-01 00:00:00] [info] [backup.go:123] [“full backup start”]
[2024-01-01 00:00:05] [info] [backup.go:145] [“backup meta done”]
[2024-01-01 01:00:15] [info] [backup.go:167] [“backup data done”]
[2024-01-01 01:00:20] [info] [backup.go:189] [“full backup success”]
### 步骤3:验证备份
– 检查HDFS存储:
[root@fgedu.net.cn ~]# hdfs dfs -ls hdfs://hadoop-master:9000/tidb/backup/full-20240101/
输出:
Found 2 items
-rw-r–r– 3 hdfs supergroup 12345 2024-01-01 00:00 hdfs://hadoop-master:9000/tidb/backup/full-20240101/backupmeta
-rw-r–r– 3 hdfs supergroup 19876543210 2024-01-01 01:00
hdfs://hadoop-master:9000/tidb/backup/full-20240101/data.0
– 验证备份完整性:
[root@fgedu.net.cn ~]# tiup br validate –storage “hdfs://hadoop-master:9000/tidb/backup/full-20240101”
输出:
[2024-01-01 01:30:00] [info] [validate.go:123] [“validate start”]
[2024-01-01 01:30:05] [info] [validate.go:145] [“validate meta”]
[2024-01-01 01:30:10] [info] [validate.go:167] [“validate data”]
[2024-01-01 01:30:15] [info] [validate.go:189] [“validate success”]
### 步骤4:自动化备份
– 创建备份脚本:
[root@fgedu.net.cn ~]# cat > hdfs_full_backup.sh << 'EOF' #!/bin/bash # hdfs_full_backup.sh #
from:www.itpux.com.qq113257174.wx:itpux-com # web: `http://www.fgedu.net.cn` # 配置环境变量 export
HADOOP_HOME=/tidb/app/hadoop export HADOOP_CONF_DIR=/tidb/app/hadoop/etc/hadoop export
PATH=$PATH:$HADOOP_HOME/bin # 执行全量备份 tiup br backup full --pd "192.168.1.1:2379"
--storage "hdfs://hadoop-master:9000/tidb/backup/full-$(date +%Y%m%d)" EOF [root@fgedu.net.cn ~]# chmod +x
hdfs_full_backup.sh - 添加到crontab: [root@fgedu.net.cn ~]# crontab -e # 每周日凌晨0点执行HDFS全量备份 0 0 * * 0
/root/hdfs_full_backup.sh>> /tidb/log/hdfs_full_backup.log 2>&1
## 3. 案例效果
– 备份成功:2TB数据成功备份到HDFS
– 备份时间:约60分钟
– 备份空间:约18.6GB(压缩后)
– 分布式存储:利用现有HDFS资源,可扩展性好
– 自动化:定期执行备份,无需人工干预
Part05-风哥经验总结与分享
5.1 最佳实践
TiDB BR工具全量备份的最佳实践:
- 备份策略最佳实践:
- 定期全量备份:每周至少1次
- 选择合适的备份时间:业务低峰期
- 多副本存储:本地、云、异地存储
- 定期验证备份:确保备份可用
- 存储选择最佳实践:
- 本地存储:用于快速恢复
- 云存储:用于长期存储和异地备份
- 分布式存储:用于大规模数据
- 加密存储:保护备份数据安全
- 性能优化最佳实践:
- 调整并发度:根据系统资源调整
- 优化存储性能:使用高性能存储
- 确保网络带宽:避免网络瓶颈
- 监控备份速度:确保在时间窗口内完成
- 管理最佳实践:
- 自动化备份:减少人工干预
- 定期清理:避免存储空间不足
- 备份文档:记录备份策略和流程
- 恢复测试:定期进行恢复演练
5.2 备份管理技巧
## 1. 备份策略优化
– 根据数据量调整备份频率:
– 小数据量:每天全量备份
– 中数据量:每周全量备份,每天增量备份
– 大数据量:每周全量备份,每小时增量备份
– 根据业务重要性调整备份策略:
– 关键业务:多副本,异地存储
– 一般业务:本地存储 + 云存储
– 测试环境:按需备份
– 根据存储成本调整备份策略:
– 本地存储:近期备份
– 云存储:长期备份
– 异地存储:灾难恢复备份
## 2. 备份性能优化
– 选择合适的备份时间:
– 业务低峰期
– 系统负载低时
– 调整备份参数:
– –concurrency:设置并发数
– –ratelimit:限制备份速度
– 推荐值:根据TiKV节点数量和系统资源调整
– 优化存储性能:
– 使用SSD存储
– 确保存储IOPS充足
– 避免与数据库数据存储在同一磁盘
– 优化网络性能:
– 确保网络带宽充足
– 避免网络拥塞
– 使用专线连接(云存储)
## 3. 备份安全管理
– 备份数据加密:
– 传输加密:使用HTTPS
– 存储加密:使用加密存储
– 访问控制:
– 限制备份文件的访问权限
– 使用密钥管理服务
– 定期轮换访问密钥
– 多副本存储:
– 本地存储
– 云存储
– 异地存储
– 定期检查:
– 检查备份文件完整性
– 检查存储设备状态
– 检查访问权限
## 4. 恢复管理技巧
– 制定恢复计划:
– 详细的恢复步骤
– 角色分工
– 时间预估
– 准备恢复环境:
– 确保目标集群已准备就绪
– 停止应用服务
– 清理目标数据库
– 执行恢复操作:
– 先恢复全量备份
– 再恢复增量备份
– 验证恢复结果
– 恢复后验证:
– 检查数据库状态
– 检查数据完整性
– 测试业务功能
5.3 常见问题与解决
## 1. 备份问题
### 问题1:备份失败
– 症状:备份过程中出现错误,备份失败
– 原因:
– 网络问题:网络中断或延迟
– 存储问题:存储空间不足或权限问题
– 系统问题:TiDB集群状态异常
– 资源问题:CPU、内存不足
– 解决:
– 检查网络连接
– 检查存储空间和权限
– 检查TiDB集群状态
– 增加系统资源
### 问题2:备份时间过长
– 症状:备份执行时间超过预期
– 原因:
– 数据量过大
– 网络带宽不足
– 存储性能不足
– 并发度设置不合理
– 解决:
– 增加备份并发度
– 优化网络带宽
– 使用高性能存储
– 考虑增量备份
### 问题3:备份文件过大
– 症状:备份文件大小超过预期
– 原因:
– 数据量增长过快
– 备份工具选择不当
– 备份策略不合理
– 解决:
– 使用增量备份
– 调整备份工具参数
– 优化备份策略
– 定期清理过期备份
### 问题4:备份验证失败
– 症状:备份验证过程中出现错误
– 原因:
– 备份文件损坏
– 存储介质故障
– 备份过程中断
– 解决:
– 重新执行备份
– 检查存储介质
– 确保备份过程不中断
## 2. 存储问题
### 问题1:存储空间不足
– 症状:备份过程中提示存储空间不足
– 原因:
– 备份文件过大
– 存储容量不足
– 过期备份未清理
– 解决:
– 增加存储容量
– 清理过期备份
– 优化备份策略
### 问题2:存储性能不足
– 症状:备份速度慢,影响业务
– 原因:
– 存储IOPS不足
– 存储带宽不足
– 存储设备故障
– 解决:
– 使用高性能存储
– 优化存储配置
– 更换故障存储设备
### 问题3:存储访问权限问题
– 症状:备份过程中提示权限不足
– 原因:
– 存储路径权限不正确
– 云存储访问密钥过期
– HDFS权限配置错误
– 解决:
– 检查并修正权限
– 更新访问密钥
– 修正HDFS权限配置
### 问题4:存储介质故障
– 症状:备份过程中存储介质故障
– 原因:
– 磁盘损坏
– 网络存储连接中断
– 云存储服务不可用
– 解决:
– 更换故障存储介质
– 检查网络连接
– 切换到备用存储
## 3. 恢复问题
### 问题1:恢复失败
– 症状:恢复过程中出现错误,恢复失败
– 原因:
– 备份文件损坏
– 目标集群状态异常
– 网络问题
– 权限问题
– 解决:
– 检查备份文件完整性
– 检查目标集群状态
– 检查网络连接
– 确保权限正确
### 问题2:恢复时间过长
– 症状:恢复执行时间超过预期
– 原因:
– 数据量过大
– 网络带宽不足
– 存储性能不足
– 并发度设置不合理
– 解决:
– 增加恢复并发度
– 优化网络带宽
– 使用高性能存储
– 考虑分阶段恢复
### 问题3:数据不一致
– 症状:恢复后数据与预期不一致
– 原因:
– 备份文件不完整
– 恢复过程中断
– 增量备份与全量备份不匹配
– 解决:
– 验证备份文件完整性
– 确保恢复过程不中断
– 检查备份链的完整性
### 问题4:业务无法恢复
– 症状:恢复后业务无法正常运行
– 原因:
– 数据丢失
– 架构变更
– 依赖服务未恢复
– 解决:
– 确保备份完整性
– 记录架构变更
– 恢复所有依赖服务
## 4. 管理问题
### 问题1:备份策略不合理
– 症状:备份不能满足业务需求
– 原因:
– 备份频率过低
– 备份存储不足
– 备份验证不及时
– 解决:
– 调整备份频率
– 增加存储容量
– 定期验证备份
### 问题2:备份管理混乱
– 症状:备份文件管理混乱,找不到需要的备份
– 原因:
– 命名不规范
– 存储位置分散
– 文档不完善
– 解决:
– 统一命名规范
– 集中存储备份
– 完善备份文档
### 问题3:恢复演练不足
– 症状:真正需要恢复时手忙脚乱
– 原因:
– 未定期进行恢复演练
– 恢复流程不熟悉
– 恢复工具使用不熟练
– 解决:
– 定期进行恢复演练
– 熟悉恢复流程
– 熟练使用恢复工具
### 问题4:备份监控缺失
– 症状:备份失败未及时发现
– 原因:
– 未配置监控
– 未设置告警
– 监控工具使用不当
– 解决:
– 配置备份监控
– 设置备份告警
– 正确使用监控工具
本文档详细介绍了TiDB BR工具全量备份实战的各个方面,包括BR工具基础、全量备份原理、备份存储、生产环境规划、实施方案、实战案例和经验总结。通过本文档的学习,读者可以掌握TiDB
BR工具全量备份的原理和应用技巧,确保数据安全和业务连续性。学习交流加群风哥微信: itpux-com
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
