本文档详细介绍TiDB备份集管理与清理策略,包括备份集基础、备份集类型、备份集管理原理、生产环境规划、实施方案、实战案例等内容。风哥教程参考TiDB官方文档BR工具相关内容,适合DBA在日常维护TiDB数据库时参考。更多视频教程www.fgedu.net.cn
Part01-基础概念与理论知识
1.1 备份集基础
备份集是指通过备份工具创建的包含数据库数据的集合,是数据库恢复的基础。
- 备份集的定义:备份集是备份工具创建的包含数据库数据的集合,通常包括备份文件和备份元数据。
- 备份集的组成:
- 备份文件:包含数据库数据的文件
- 备份元数据:包含备份时间、备份类型、备份范围等信息
- 备份清单:记录备份文件的列表
- 备份集的重要性:
- 数据安全:防止数据丢失
- 业务连续性:确保业务在故障后快速恢复
- 合规要求:满足行业和监管要求
- 数据迁移:支持数据迁移和升级
- 完整性:包含完整的数据库数据
- 一致性:反映数据库在某个时间点的一致性状态
- 可恢复性:能够用于数据库恢复
- 独立性:不同备份集之间相互独立
1.2 备份集类型
根据备份方式和备份内容的不同,备份集可以分为多种类型。
风哥提示:
1.2.1 按备份方式分类
## 1. 全量备份集
– 定义:包含数据库所有数据的备份集
– 特点:
– 包含完整的数据
– 恢复速度快
– 存储空间大
– 备份时间长
– 适用场景:
– 定期全量备份
– 首次备份
– 重大变更前备份
## 2. 增量备份集
– 定义:包含自上次备份以来发生变化的数据的备份集
– 特点:
– 存储空间小
– 备份时间短
– 恢复速度慢
– 依赖前一次备份
– 适用场景:
– 日常增量备份
– 数据变更频繁的场景
– 备份窗口小的场景
## 3. 差异备份集
– 定义:包含自上次全量备份以来发生变化的数据的备份集
– 特点:
– 存储空间介于全量和增量之间
– 恢复速度比增量快
– 依赖全量备份
– 适用场景:
– 中等频率的备份
– 数据变更适中的场景
1.2.2 按存储介质分类
## 1. 本地存储备份集
– 定义:存储在本地磁盘的备份集
– 特点:
– 访问速度快
– 恢复速度快
– 存储空间有限
– 存在单点故障
– 适用场景:
– 快速恢复
– 短期备份
– 测试环境备份
## 2. 网络存储备份集
– 定义:存储在网络存储设备的备份集
– 特点:
– 存储空间大
– 可共享访问
– 网络依赖
– 恢复速度受网络影响
– 适用场景:
– 中长期备份
– 多节点共享
– 企业级备份
## 3. 云存储备份集
– 定义:存储在云存储服务的备份集
– 特点:
– 存储空间弹性
– 高可用性
– 成本随使用量变化
– 网络依赖
– 适用场景:
– 长期备份
– 异地备份
– 灾难恢复
## 4. 磁带存储备份集
– 定义:存储在磁带上的备份集
– 特点:
– 存储成本低
– 存储空间大
– 访问速度慢
– 适合归档
– 适用场景:
– 长期归档
– 法规合规备份
– 冷备份
1.2.3 按备份工具分类
## 1. BR工具备份集
– 定义:使用TiDB BR工具创建的备份集
– 特点:学习交流加群风哥QQ113257174
– 物理备份
– 备份速度快
– 恢复速度快
– 支持全量和增量备份
– 适用场景:
– 大规模数据备份
– 生产环境备份
– 快速恢复
## 2. Dumpling工具备份集
– 定义:使用TiDB Dumpling工具创建的备份集
– 特点:
– 逻辑备份
– 跨版本兼容
– 备份文件小
– 恢复速度慢
– 适用场景:
– 小数据量备份
– 跨版本迁移
– 数据导出
## 3. TiCDC备份集
– 定义:使用TiCDC工具创建的实时备份集
– 特点:
– 实时备份
– 近实时恢复
– 低延迟
– 持续备份
– 适用场景:
– 实时灾备
– 数据同步
– 近实时恢复
1.3 备份集管理原理
备份集管理是指对备份集的创建、存储、验证、恢复和清理等过程的管理。
1.3.1 备份集管理流程
## 1. 备份集创建
– 选择备份工具
– 配置备份参数
– 执行备份操作
– 验证备份结果
– 记录备份信息
## 2. 备份集存储
– 选择存储介质
– 配置存储参数
– 传输备份文件
– 存储备份元数据
– 确保存储安全
## 3. 备份集验证
– 检查备份文件完整性
– 验证备份元数据
– 测试恢复过程
– 记录验证结果
– 处理验证失败
## 4. 备份集恢复
– 选择恢复策略
– 准备恢复环境
– 执行恢复操作
– 验证恢复结果
– 处理恢复失败
## 5. 备份集清理
– 制定清理策略
– 识别过期备份
– 执行清理操作
– 验证清理结果
– 记录清理信息
1.3.2 备份集生命周期管理
## 1. 生命周期阶段
– 创建阶段:备份集的创建过程
– 存储阶段:备份集的存储和管理
– 验证阶段:备份集的验证和测试
– 使用阶段:备份集的恢复和使用
– 清理阶段:备份集的清理和归档
## 2. 生命周期策略
– 创建策略:何时创建备份,使用什么工具
– 存储策略:存储在哪里,如何存储
– 验证策略:如何验证备份的有效性
– 使用策略:如何使用备份进行恢复
– 清理策略:何时清理备份,如何清理
## 3. 生命周期监控
– 监控备份集创建状态
– 监控备份集存储状态
– 监控备份集验证状态
– 监控备份集使用情况
– 监控备份集清理状态
## 4. 生命周期优化
– 优化备份创建过程
– 优化备份存储方式
– 优化备份验证方法
– 优化备份使用效率
– 优化备份清理策略
Part02-生产环境规划与建议
2.1 备份集规划
2.1.1 备份集需求分析
## 1. 业务需求分析
– 业务重要性:评估数据对业务的重要程度
– RTO (Recovery Time Objective):恢复时间目标
– RPO (Recovery Point Objective):恢复点目标
– 业务连续性:确保业务连续运行的要求
## 2. 数据量分析
– 数据库大小:评估数据库的总大小
– 数据变更率:评估数据变更的频率和数量
– 备份时间窗口:可用的备份时间
– 存储容量:备份所需的存储空间
## 3. 系统环境分析
– 硬件资源:CPU、内存、存储、网络
– 软件版本:TiDB版本,备份工具版本
– 部署架构:集群规模,节点分布
– 网络环境:网络带宽,延迟
## 4. 合规要求分析
– 行业标准:如金融、医疗等行业的合规要求
– 监管要求:如数据保留期限
– 审计要求:备份操作的审计记录
2.1.2 备份集策略制定
## 1. 备份类型策略
– 全量备份:每周1次
– 增量备份:每天1次或每小时1次
– 差异备份:每3天1次
– 实时备份:持续进行(使用TiCDC)
## 2. 备份频率策略
– 关键业务:每小时增量备份,每天全量备份
– 重要业务:每天增量备份,每周全量备份
– 一般业务:每天全量备份
– 测试环境:按需备份
## 3. 备份存储策略
– 本地存储:用于快速恢复,保留最近7天
– 网络存储:用于中长期存储,保留最近30天
– 云存储:用于长期存储,保留最近90天
– 异地存储:用于灾难恢复,保留最近180天
## 4. 备份验证策略
– 全量备份:每次备份后验证
– 增量备份:每周验证1次
– 差异备份:每两周验证1次
– 灾难恢复备份:每月验证1次
## 5. 备份保留策略
– 全量备份:保留4周
– 增量备份:保留1周
– 差异备份:保留2周
– 灾难恢复备份:保留6个月
– 年度备份:长期保留
2.2 存储规划
## 1. 存储容量规划
– 全量备份:至少等于数据库大小
– 增量备份:根据数据变更率估算
– 差异备份:根据数据变更率估算
– 长期存储:考虑数据增长趋势
– 冗余存储:预留20%的冗余空间
## 2. 存储性能规划
– 本地存储:
– 推荐使用SSD
– 确保足够的IOPS
– 避免与数据库数据存储在同一磁盘
– 网络存储:
– 推荐使用NAS或SAN
– 确保网络带宽充足
– 配置适当的RAID级别
– 云存储:
– 选择适当的存储类型(如S3标准存储)
– 考虑使用生命周期管理
– 配置跨区域复制
– 异地存储:
– 选择不同地理位置的存储
– 确保网络连接稳定
– 配置适当的复制策略
## 3. 存储安全规划
– 加密存储:对备份数据进行加密
– 访问控制:限制备份数据的访问
– 多副本:存储多个备份副本
– 异地存储:将备份存储在不同地理位置
## 4. 存储监控
– 监控存储使用情况:避免存储空间不足
– 监控存储性能:确保备份速度满足需求
– 监控存储健康:及时发现存储故障
– 监控备份文件完整性:确保备份可用
2.3 保留策略
## 1. 基于时间的保留策略
– 近期备份:保留7天
– 中期备份:保留30天
– 长期备份:保留90天
– 归档备份:保留1年或更长
## 2. 基于业务需求的保留策略
– 关键业务:保留更长时间
– 重要业务:保留中等时间
– 一般业务:保留较短时间
– 测试环境:按需保留
## 3. 基于合规要求的保留策略
– 金融行业:至少保留5年
– 医疗行业:至少保留7年
– 政府部门:至少保留10年
– 其他行业:根据具体要求
## 4. 保留策略实施
– 自动化管理:使用脚本或工具自动管理
– 定期检查:确保保留策略执行到位
– 调整优化:根据实际情况调整保留策略
– 文档记录:记录保留策略和执行情况
Part03-生产环境项目实施方案
3.1 备份集管理
3.1.1 备份集命名规范
## 1. 命名规则
– 全量备份:full-yyyyMMdd-HHmmss
– 增量备份:incremental-yyyyMMdd-HHmmss
– 差异备份:differential-yyyyMMdd-HHmmss
– 灾难恢复备份:dr-yyyyMMdd-HHmmss
## 2. 示例
– 全量备份:full-20240101-000000
– 增量备份:incremental-20240102-010000
– 差异备份:differential-20240103-020000
– 灾难恢复备份:dr-20240104-030000
## 3. 目录结构
– /tidb/backup/full/20240101-000000/
– /tidb/backup/incremental/20240102-010000/
– /tidb/backup/differential/20240103-020000/
– /tidb/backup/dr/20240104-030000/
## 4. 元数据管理
– 备份元数据文件:backupmeta
– 备份清单文件:backup.list
– 备份日志文件:backup.log
– 备份验证文件:backup.validate
3.1.2 备份集存储管理
## 1. 本地存储管理
– 创建备份目录:
[root@fgedu.net.cn ~]# mkdir -p /tidb/backup/full /tidb/backup/incremental /tidb/backup/differential
/tidb/backup/dr
– 设置权限:
[root@fgedu.net.cn ~]# chown -R tidb:tidb /tidb/backup
[root@fgedu.net.cn ~]# chmod -R 750 /tidb/backup
– 监控存储空间:
[root@fgedu.net.cn ~]# df -h /tidb/backup
输出:
Filesystem Size Used Avail Use% Mounted on
/dev/sdb1 10T 2.5T 7.5T 25% /tidb
## 2. 网络存储管理
– 挂载网络存储:
[root@fgedu.net.cn ~]# mount -t nfs 192.168.1.100:/backup /tidb/backup/nfs
– 设置自动挂载:
[root@fgedu.net.cn ~]# echo “192.168.1.100:/backup /tidb/backup/nfs nfs defaults 0 0” >> /etc/fstab
– 监控网络存储:
[root@fgedu.net.cn ~]# df -h /tidb/backup/nfs
## 3. 云存储管理
– 配置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
– 创建S3存储桶:
[root@fgedu.net.cn ~]# aws s3 mb s3://fgedu-backup
– 配置生命周期规则:
[root@fgedu.net.cn ~]# aws s3api put-bucket-lifecycle-configuration –bucket fgedu-backup
–lifecycle-configuration file://lifecycle.json
## 4. 异地存储管理
– 配置rsync:
[root@fgedu.net.cn ~]# rsync -avz /tidb/backup/full/ 192.168.2.100:/tidb/backup/dr/full/
– 创建定时同步任务:
[root@fgedu.net.cn ~]# crontab -e
# 每天凌晨2点同步备份到异地存储
0 2 * * * rsync -avz /tidb/backup/full/ 192.168.2.100:/tidb/backup/dr/full/ >> /tidb/log/rsync.log 2>&1
– 监控同步状态:
[root@fgedu.net.cn ~]# tail -f /tidb/log/rsync.log
3.1.3 备份集验证管理
## 1. 备份集完整性验证
– 使用BR工具验证:
[root@fgedu.net.cn ~]# tiup br validate –storage “local:///tidb/backup/full/20240101-000000”
输出:
[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”]
## 2. 备份集恢复测试
– 恢复到测试集群:
[root@fgedu.net.cn ~]# tiup br restore full –pd “192.168.1.10:2379” –storage
“local:///tidb/backup/full/20240101-000000”
– 验证恢复结果:
[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;”
## 3. 备份集监控
– 配置监控告警:
[root@fgedu.net.cn ~]# cat > backup_monitor.sh << 'EOF' #!/bin/bash # backup_monitor.sh #
from:www.itpux.com.qq113257174.wx:itpux-com # web: `http://www.fgedu.net.cn` # 检查备份文件是否存在 if [ !
-d "/tidb/backup/full/$(date +%Y%m%d)" ]; then echo "Full backup not found for $(date +%Y%m%d)" # 发送告警 fi #
检查备份文件大小 backup_size=$(du -s /tidb/backup/full/$(date +%Y%m%d) | awk '{print $1}' ) if [ "$backup_size" -lt 1024
]; then echo "Backup size too small: $backup_size" # 发送告警 fi # 检查备份时间 backup_time=$(stat -c %Y
/tidb/backup/full/$(date +%Y%m%d)) current_time=$(date +%s) if [ $((current_time - backup_time)) -gt 86400 ];
then echo "Backup too old" # 发送告警 fi EOF [root@fgedu.net.cn ~]# chmod +x backup_monitor.sh - 添加到crontab:
[root@fgedu.net.cn ~]# crontab -e # 每天凌晨3点执行备份监控 0 3 * * * /root/backup_monitor.sh>>
/tidb/log/backup_monitor.log 2>&1
3.2 备份集清理
3.2.1 清理策略制定
## 1. 基于时间的清理策略
– 全量备份:保留4周,清理超过4周的备份
– 增量备份:保留1周,清理超过1周的备份
– 差异备份:保留2周,清理超过2周的备份
– 灾难恢复备份:保留6个月,清理超过6个月的备份
## 2. 基于空间的清理策略
– 当存储空间使用率超过80%时,清理最旧的备份
– 当存储空间使用率超过90%时,清理更多的备份
– 当存储空间使用率超过95%时,清理所有非关键备份
## 3. 基于业务需求的清理策略
– 关键业务:保留更长时间的备份
– 重要业务:保留中等时间的备份
– 一般业务:保留较短时间的备份
– 测试环境:按需清理备份
## 4. 清理执行计划
– 全量备份清理:每周日执行
– 增量备份清理:每天执行
– 差异备份清理:每周执行
– 灾难恢复备份清理:每月执行
3.2.2 清理脚本实施
## 1. 全量备份清理脚本
– 创建清理脚本:
[root@fgedu.net.cn ~]# cat > cleanup_full_backup.sh << 'EOF' #!/bin/bash # cleanup_full_backup.sh #
from:www.itpux.com.qq113257174.wx:itpux-com # web: `http://www.fgedu.net.cn` # 清理超过4周的全量备份 find /tidb/backup/full
-name "*" -mtime +28 -type d -exec rm -rf {} \; # 清理日志文件 find /tidb/log -name "backup-*.log" -mtime +28 -exec rm
-f {} \; echo "Full backup cleanup completed at $(date)" EOF [root@fgedu.net.cn ~]# chmod +x
cleanup_full_backup.sh ## 2. 增量备份清理脚本 - 创建清理脚本: [root@fgedu.net.cn ~]# cat> cleanup_incremental_backup.sh
<< 'EOF' #!/bin/bash # cleanup_incremental_backup.sh # from:www.itpux.com.qq113257174.wx:itpux-com # web:
`http://www.fgedu.net.cn` # 清理超过1周的增量备份 find /tidb/backup/incremental -name "*" -mtime +7 -type d -exec rm -rf
{} \; echo "Incremental backup cleanup completed at $(date)" EOF [root@fgedu.net.cn ~]# chmod +x
cleanup_incremental_backup.sh ## 3. 差异备份清理脚本 - 创建清理脚本: [root@fgedu.net.cn ~]# cat>
cleanup_differential_backup.sh << 'EOF' #!/bin/bash # cleanup_differential_backup.sh #
from:www.itpux.com.qq113257174.wx:itpux-com # web: `http://www.fgedu.net.cn` # 清理超过2周的差异备份 find
/tidb/backup/differential -name "*" -mtime +14 -type d -exec rm -rf {} \;
echo "Differential backup cleanup completed at $(date)" EOF [root@fgedu.net.cn ~]# chmod +x
cleanup_differential_backup.sh ## 4. 灾难恢复备份清理脚本 - 创建清理脚本: [root@fgedu.net.cn ~]# cat> cleanup_dr_backup.sh
<< 'EOF' #!/bin/bash # cleanup_dr_backup.sh # from:www.itpux.com.qq113257174.wx:itpux-com # web:
`http://www.fgedu.net.cn` # 清理超过6个月的灾难恢复备份 find /tidb/backup/dr -name "*" -mtime +180 -type d -exec rm -rf
{} \; echo "DR backup cleanup completed at $(date)" EOF [root@fgedu.net.cn ~]# chmod +x
cleanup_dr_backup.sh ## 5. 空间监控清理脚本 - 创建空间监控脚本: [root@fgedu.net.cn ~]# cat> cleanup_space.sh << 'EOF'
#!/bin/bash # cleanup_space.sh # from:www.itpux.com.qq113257174.wx:itpux-com # web: `http://www.fgedu.net.cn` #
检查存储空间使用率 usage=$(df -h /tidb/backup | awk 'NR==2 {print $5}' | sed 's/%//' ) if [ "$usage" -gt 80 ];
then echo "Storage usage超过80%,清理最旧的备份" # 清理最旧的全量备份 oldest_backup=$(ls -t /tidb/backup/full/ | tail -1)
if [ ! -z "$oldest_backup" ]; then rm -rf /tidb/backup/full/$oldest_backup
echo "Cleaned up oldest full backup: $oldest_backup" fi fi if [ "$usage" -gt 90 ]; then
echo "Storage usage超过90%,清理更多备份" # 清理更多的全量备份 ls -t /tidb/backup/full/ | tail -3 | xargs -I {} rm -rf
/tidb/backup/full/{} echo "Cleaned up more full backups" fi if [ "$usage" -gt 95 ]; then
echo "Storage usage超过95%,清理所有非关键备份" # 清理所有增量备份 rm -rf /tidb/backup/incremental/* # 清理所有差异备份 rm -rf
/tidb/backup/differential/* echo "Cleaned up all non-critical backups" fi
echo "Space cleanup completed at $(date)" EOF [root@fgedu.net.cn ~]# chmod +x cleanup_space.sh
3.2.3 清理任务调度
## 1. 添加到crontab
– 添加全量备份清理:
[root@fgedu.net.cn ~]# crontab -e
# 每周日凌晨4点执行全量备份清理
0 4 * * 0 /root/cleanup_full_backup.sh >> /tidb/log/cleanup_full_backup.log 2>&1
– 添加增量备份清理:
[root@fgedu.net.cn ~]# crontab -e
# 每天凌晨5点执行增量备份清理
0 5 * * * /root/cleanup_incremental_backup.sh >> /tidb/log/cleanup_incremental_backup.log 2>&1
– 添加差异备份清理:
[root@fgedu.net.cn ~]# crontab -e
# 每周一凌晨6点执行差异备份清理
0 6 * * 1 /root/cleanup_differential_backup.sh >> /tidb/log/cleanup_differential_backup.log 2>&1
– 添加灾难恢复备份清理:
[root@fgedu.net.cn ~]# crontab -e
# 每月1日凌晨7点执行灾难恢复备份清理
0 7 1 * * /root/cleanup_dr_backup.sh >> /tidb/log/cleanup_dr_backup.log 2>&1
– 添加空间监控清理:
[root@fgedu.net.cn ~]# crontab -e
# 每小时执行空间监控清理
0 * * * * /root/cleanup_space.sh >> /tidb/log/cleanup_space.log 2>&1
## 2. 清理任务监控
– 检查清理日志:
[root@fgedu.net.cn ~]# tail -f /tidb/log/cleanup_full_backup.log
[root@fgedu.net.cn ~]# tail -f /tidb/log/cleanup_incremental_backup.log
[root@fgedu.net.cn ~]# tail -f /tidb/log/cleanup_differential_backup.log
[root@fgedu.net.cn ~]# tail -f /tidb/log/cleanup_dr_backup.log
[root@fgedu.net.cn ~]# tail -f /tidb/log/cleanup_space.log
– 验证清理结果:
[root@fgedu.net.cn ~]# ls -la /tidb/backup/full/
[root@fgedu.net.cn ~]# ls -la /tidb/backup/incremental/
[root@fgedu.net.cn ~]# ls -la /tidb/backup/differential/
[root@fgedu.net.cn ~]# ls -la /tidb/backup/dr/
– 检查存储空间:
[root@fgedu.net.cn ~]# df -h /tidb/backup
3.3 自动化实施
3.3.1 自动化脚本整合
## 1. 备份管理主脚本
– 创建主脚本:
[root@fgedu.net.cn ~]# cat > backup_management.sh << 'EOF' #!/bin/bash # backup_management.sh #
from:www.itpux.com.qq113257174.wx:itpux-com # web: `http://www.fgedu.net.cn` # 定义变量
BACKUP_DIR="/tidb/backup" LOG_DIR="/tidb/log" TODAY=$(date +%Y%m%d) NOW=$(date +%Y%m%d-%H%M%S) #
创建日志目录 mkdir -p $LOG_DIR # 执行全量备份(每周日) if [ $(date +%u) -eq 7 ]; then
echo "Executing full backup..." tiup br backup full --pd "192.168.1.1:2379"
--storage "local://$BACKUP_DIR/full/$NOW">> $LOG_DIR/backup_full_$TODAY.log 2>&1
# 验证备份
echo “Validating full backup…”
tiup br validate –storage “local://$BACKUP_DIR/full/$NOW” >> $LOG_DIR/validate_full_$TODAY.log 2>&1
# 清理过期全量备份
echo “Cleaning up expired full backups…”
find $BACKUP_DIR/full -name “*” -mtime +28 -type d -exec rm -rf {} \;
else
# 执行增量备份
echo “Executing incremental backup…”
LAST_BACKUP=$(ls -t $BACKUP_DIR/full/* $BACKUP_DIR/incremental/* 2>/dev/null | head -1)
if [ -z “$LAST_BACKUP” ]; then
echo “No backup found, running full backup”
tiup br backup full –pd “192.168.1.1:2379” –storage “local://$BACKUP_DIR/full/$NOW” >>
$LOG_DIR/backup_full_$TODAY.log 2>&1
else
tiup br backup incremental –pd “192.168.1.1:2379” –storage “local://$BACKUP_DIR/incremental/$NOW”
–last-backup “local://$LAST_BACKUP” >> $LOG_DIR/backup_incremental_$TODAY.log 2>&1
# 验证备份
echo “Validating incremental backup…”
tiup br validate –storage “local://$BACKUP_DIR/incremental/$NOW” >>
$LOG_DIR/validate_incremental_$TODAY.log 2>&1
# 清理过期增量备份
echo “Cleaning up expired incremental backups…”
find $BACKUP_DIR/incremental -name “*” -mtime +7 -type d -exec rm -rf {} \;
fi
fi
# 检查存储空间
echo “Checking storage space…”
usage=$(df -h $BACKUP_DIR | awk ‘NR==2 {print $5}’ | sed ‘s/%//’)
if [ “$usage” -gt 80 ]; then
echo “Storage usage超过80%,清理最旧的备份”
oldest_backup=$(ls -t $BACKUP_DIR/full/ | tail -1)
if [ ! -z “$oldest_backup” ]; then
rm -rf $BACKUP_DIR/full/$oldest_backup
echo “Cleaned up oldest full backup: $oldest_backup”
fi
fi
echo “Backup management completed at $(date)”
EOF
[root@fgedu.net.cn ~]# chmod +x backup_management.sh
## 2. 备份管理服务
– 创建systemd服务文件:
[root@fgedu.net.cn ~]# cat > /etc/systemd/system/backup-management.service << 'EOF' [Unit]
Description=TiDB Backup Management Service After=network.target [Service] Type=oneshot
ExecStart=/root/backup_management.sh [Install] WantedBy=multi-user.target EOF - 重新加载systemd配置:
[root@fgedu.net.cn ~]# systemctl daemon-reload - 启用服务: [root@fgedu.net.cn ~]# systemctl enable
backup-management.service ## 3. 定期执行 - 添加到crontab: [root@fgedu.net.cn ~]# crontab -e #
每天凌晨1点执行备份管理 0 1 * * * systemctl start backup-management.service
3.3.2 监控与告警
## 1. 监控配置
– 配置Prometheus监控:
[root@fgedu.net.cn ~]# cat > backup_monitor.yml << 'EOF' global: scrape_interval: 15s
scrape_configs: - job_name: 'backup' static_configs: - targets: ['localhost:9100'] labels:
instance: 'backup-server' EOF - 配置Grafana面板: - 导入备份监控面板 - 配置备份状态告警 - 配置存储空间告警 ## 2. 告警配置 -
配置Alertmanager: [root@fgedu.net.cn ~]# cat> alertmanager.yml << 'EOF' global: resolve_timeout:
5m route: group_by: ['alertname'] group_wait: 30s group_interval: 5m repeat_interval: 1h
receiver: 'email' receivers: - name: 'email' email_configs: - to: 'admin@fgedu.net.cn'
from: 'alertmanager@fgedu.net.cn' smarthost: 'smtp.fgedu.net.cn:587'
auth_username: 'alertmanager@fgedu.net.cn' auth_password: 'password' require_tls: true
inhibit_rules: - source_match: severity: 'critical' target_match: severity: 'warning' equal:
['alertname', 'instance' ] EOF ## 3. 告警规则 - 配置告警规则: [root@fgedu.net.cn ~]# cat>
backup_rules.yml << 'EOF' groups: - name: backup rules: - alert: BackupFailed expr:
backup_success==0 for: 10m labels: severity: critical annotations: summary: "备份失败"
description: "备份执行失败,请检查备份日志" - alert: BackupStorageFull expr: backup_storage_usage> 90
for: 5m
labels:
severity: warning
annotations:
summary: “备份存储空间不足”
description: “备份存储空间使用率超过90%,请清理过期备份”
– alert: BackupTooOld
expr: time() – backup_last_success > 86400
for: 2h
labels:
severity: critical
annotations:
summary: “备份过期”
description: “超过24小时未执行备份,请检查备份服务”
EOF
## 4. 监控验证
– 启动监控服务:
[root@fgedu.net.cn ~]# systemctl start prometheus
[root@fgedu.net.cn ~]# systemctl start alertmanager
[root@fgedu.net.cn ~]# systemctl start grafana-server
– 验证监控状态:
[root@fgedu.net.cn ~]# curl http://localhost:9090/metrics
[root@fgedu.net.cn ~]# curl http://localhost:9093/metrics
[root@fgedu.net.cn ~]# curl http://localhost:3000/api/health
Part04-生产案例与实战讲解
4.1 备份集管理实战案例
## 1. 案例背景
– 系统:TiDB 7.5.0
– 业务:电商平台
– 数据量:500GB
– 备份需求:每天备份,确保数据安全
– 存储资源:本地存储 + 云存储
## 2. 实施步骤
### 步骤1:环境准备
– 安装BR工具:
[root@fgedu.net.cn ~]# tiup install br
– 创建备份目录:
[root@fgedu.net.cn ~]# mkdir -p /tidb/backup/full /tidb/backup/incremental /tidb/backup/dr
[root@fgedu.net.cn ~]# chown -R tidb:tidb /tidb/backup
– 配置云存储:
[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 ~]# cat > backup_strategy.sh << 'EOF' #!/bin/bash # backup_strategy.sh #
from:www.itpux.com.qq113257174.wx:itpux-com # web: `http://www.fgedu.net.cn` # 定义变量
BACKUP_DIR="/tidb/backup" LOG_DIR="/tidb/log" TODAY=$(date +%Y%m%d) NOW=$(date +%Y%m%d-%H%M%S)
# 创建日志目录 mkdir -p $LOG_DIR # 执行全量备份(每周日) if [ $(date +%u) -eq 7 ]; then
echo "Executing full backup..." tiup br backup full --pd "192.168.1.1:2379"
--storage "local://$BACKUP_DIR/full/$NOW">> $LOG_DIR/backup_full_$TODAY.log 2>&1
# 同步到云存储
echo “Syncing full backup to cloud…”
aws s3 sync $BACKUP_DIR/full/$NOW s3://fgedu-backup/tidb/full/$NOW >>
$LOG_DIR/sync_full_$TODAY.log 2>&1
# 同步到异地存储
echo “Syncing full backup to DR…”
rsync -avz $BACKUP_DIR/full/$NOW 192.168.2.100:/tidb/backup/dr/full/ >>
$LOG_DIR/rsync_full_$TODAY.log 2>&1
else
# 执行增量备份
echo “Executing incremental backup…”
LAST_BACKUP=$(ls -t $BACKUP_DIR/full/* $BACKUP_DIR/incremental/* 2>/dev/null | head -1)
if [ -z “$LAST_BACKUP” ]; then
echo “No backup found, running full backup”
tiup br backup full –pd “192.168.1.1:2379” –storage “local://$BACKUP_DIR/full/$NOW” >>
$LOG_DIR/backup_full_$TODAY.log 2>&1
else
tiup br backup incremental –pd “192.168.1.1:2379” –storage
“local://$BACKUP_DIR/incremental/$NOW” –last-backup “local://$LAST_BACKUP” >>
$LOG_DIR/backup_incremental_$TODAY.log 2>&1
# 同步到云存储
echo “Syncing incremental backup to cloud…”
aws s3 sync $BACKUP_DIR/incremental/$NOW s3://fgedu-backup/tidb/incremental/$NOW >>
$LOG_DIR/sync_incremental_$TODAY.log 2>&1
fi
fi
# 验证备份
echo “Validating backup…”
if [ $(date +%u) -eq 7 ]; then
tiup br validate –storage “local://$BACKUP_DIR/full/$NOW” >>
$LOG_DIR/validate_full_$TODAY.log 2>&1
else
tiup br validate –storage “local://$BACKUP_DIR/incremental/$NOW” >>
$LOG_DIR/validate_incremental_$TODAY.log 2>&1
fi
echo “Backup completed at $(date)”
EOF
[root@fgedu.net.cn ~]# chmod +x backup_strategy.sh
– 添加到crontab:
[root@fgedu.net.cn ~]# crontab -e
# 每天凌晨1点执行备份
0 1 * * * /root/backup_strategy.sh
### 步骤3:备份集管理
– 查看备份集:
[root@fgedu.net.cn ~]# ls -la /tidb/backup/full/
[root@fgedu.net.cn ~]# ls -la /tidb/backup/incremental/
[root@fgedu.net.cn ~]# ls -la /tidb/backup/dr/full/
– 检查备份状态:
[root@fgedu.net.cn ~]# tail -f /tidb/log/backup_full_$(date +%Y%m%d).log
[root@fgedu.net.cn ~]# tail -f /tidb/log/backup_incremental_$(date +%Y%m%d).log
– 验证备份完整性:
[root@fgedu.net.cn ~]# tiup br validate –storage “local:///tidb/backup/full/$(ls -t
/tidb/backup/full/ | head -1)”
### 步骤4:自动化管理
– 创建监控脚本:
[root@fgedu.net.cn ~]# cat > backup_monitor.sh << 'EOF' #!/bin/bash # backup_monitor.sh #
from:www.itpux.com.qq113257174.wx:itpux-com # web: `http://www.fgedu.net.cn` # 检查备份是否执行 if [ !
-f "/tidb/log/backup_full_$(date +%Y%m%d).log" ] && [ !
-f "/tidb/log/backup_incremental_$(date +%Y%m%d).log" ]; then
echo "Backup not executed today" # 发送告警 fi # 检查备份是否成功 if grep -q "backup success"
/tidb/log/backup_full_$(date +%Y%m%d).log 2>/dev/null || grep -q “backup success”
/tidb/log/backup_incremental_$(date +%Y%m%d).log 2>/dev/null; then
echo “Backup successful”
else
echo “Backup failed”
# 发送告警
fi
# 检查存储空间
usage=$(df -h /tidb/backup | awk ‘NR==2 {print $5}’ | sed ‘s/%//’)
if [ “$usage” -gt 80 ]; then
echo “Storage usage超过80%”
# 发送告警
fi
echo “Monitor completed at $(date)”
EOF
[root@fgedu.net.cn ~]# chmod +x backup_monitor.sh
– 添加到crontab:
[root@fgedu.net.cn ~]# crontab -e
# 每天凌晨3点执行监控
0 3 * * * /root/backup_monitor.sh >> /tidb/log/backup_monitor.log 2>&1
## 3. 案例效果
– 备份策略:每周全量备份,每天增量备份
– 存储策略:本地存储 + 云存储 + 异地存储
– 验证策略:每次备份后验证
– 监控策略:定期监控备份状态
– 效果:确保数据安全,满足业务需求
4.2 备份集清理实战案例
## 1. 案例背景
– 系统:TiDB 7.5.0
– 业务:金融系统
– 数据量:1TB
– 存储容量:5TB
– 备份策略:每周全量备份,每天增量备份
– 清理需求:自动清理过期备份,确保存储空间充足
## 2. 实施步骤
### 步骤1:清理策略制定
– 全量备份:保留4周
– 增量备份:保留1周
– 差异备份:保留2周
– 灾难恢复备份:保留6个月
### 步骤2:清理脚本创建
– 创建全量备份清理脚本:
[root@fgedu.net.cn ~]# cat > cleanup_full_backup.sh << 'EOF' #!/bin/bash #
cleanup_full_backup.sh # from:www.itpux.com.qq113257174.wx:itpux-com # web: `http://www.fgedu.net.cn`
# 清理超过4周的全量备份 find /tidb/backup/full -name "*" -mtime +28 -type d -exec rm -rf {} \; #
清理云存储中的过期全量备份 aws s3 ls s3://fgedu-backup/tidb/full/ | grep -v "PRE" | awk '{print $4}' |
while read -r backup; do backup_date=$(echo $backup | cut -d'-' -f1) backup_age=$(( ($(date
+%s) - $(date -d $backup_date +%s)) / 86400 )) if [ "$backup_age" -gt 28 ]; then
echo "Cleaning up expired full backup in S3: $backup" aws s3 rm --recursive
s3://fgedu-backup/tidb/full/$backup fi done echo "Full backup cleanup completed at $(date)"
EOF [root@fgedu.net.cn ~]# chmod +x cleanup_full_backup.sh - 创建增量备份清理脚本: [root@fgedu.net.cn
~]# cat> cleanup_incremental_backup.sh << 'EOF' #!/bin/bash # cleanup_incremental_backup.sh #
from:www.itpux.com.qq113257174.wx:itpux-com # web: `http://www.fgedu.net.cn` # 清理超过1周的增量备份 find
/tidb/backup/incremental -name "*" -mtime +7 -type d -exec rm -rf {} \; # 清理云存储中的过期增量备份 aws
s3 ls s3://fgedu-backup/tidb/incremental/ | grep -v "PRE" | awk '{print $4}' | while read -r
backup; do backup_date=$(echo $backup | cut -d'-' -f1) backup_age=$(( ($(date +%s) - $(date
-d $backup_date +%s)) / 86400 )) if [ "$backup_age" -gt 7 ]; then
echo "Cleaning up expired incremental backup in S3: $backup" aws s3 rm --recursive
s3://fgedu-backup/tidb/incremental/$backup fi done
echo "Incremental backup cleanup completed at $(date)" EOF [root@fgedu.net.cn ~]# chmod +x
cleanup_incremental_backup.sh - 创建空间监控清理脚本: [root@fgedu.net.cn ~]# cat> cleanup_space.sh
<< 'EOF' #!/bin/bash # cleanup_space.sh # from:www.itpux.com.qq113257174.wx:itpux-com # web:
`http://www.fgedu.net.cn` # 检查存储空间使用率 usage=$(df -h /tidb/backup | awk 'NR==2 {print $5}'
| sed 's/%//' ) if [ "$usage" -gt 80 ]; then echo "Storage usage超过80%,清理最旧的备份"
oldest_backup=$(ls -t /tidb/backup/full/ | tail -1) if [ ! -z "$oldest_backup" ]; then rm
-rf /tidb/backup/full/$oldest_backup echo "Cleaned up oldest full backup: $oldest_backup"
fi fi if [ "$usage" -gt 90 ]; then echo "Storage usage超过90%,清理更多备份" ls -t
/tidb/backup/full/ | tail -3 | xargs -I {} rm -rf /tidb/backup/full/{}
echo "Cleaned up more full backups" fi if [ "$usage" -gt 95 ]; then
echo "Storage usage超过95%,清理所有非关键备份" rm -rf /tidb/backup/incremental/* rm -rf
/tidb/backup/differential/* echo "Cleaned up all non-critical backups" fi
echo "Space cleanup completed at $(date)" EOF [root@fgedu.net.cn ~]# chmod +x
cleanup_space.sh ### 步骤3:清理任务调度 - 添加到crontab: [root@fgedu.net.cn ~]# crontab -e #
每周日凌晨4点执行全量备份清理 0 4 * * 0 /root/cleanup_full_backup.sh>> /tidb/log/cleanup_full_backup.log
2>&1
# 每天凌晨5点执行增量备份清理
0 5 * * * /root/cleanup_incremental_backup.sh >> /tidb/log/cleanup_incremental_backup.log
2>&1
# 每小时执行空间监控清理
0 * * * * /root/cleanup_space.sh >> /tidb/log/cleanup_space.log 2>&1
### 步骤4:清理效果验证
– 检查清理日志:
[root@fgedu.net.cn ~]# tail -f /tidb/log/cleanup_full_backup.log
[root@fgedu.net.cn ~]# tail -f /tidb/log/cleanup_incremental_backup.log
[root@fgedu.net.cn ~]# tail -f /tidb/log/cleanup_space.log
– 验证备份集状态:
[root@fgedu.net.cn ~]# ls -la /tidb/backup/full/ | wc -l
[root@fgedu.net.cn ~]# ls -la /tidb/backup/incremental/ | wc -l
[root@fgedu.net.cn ~]# df -h /tidb/backup
– 验证云存储状态:
[root@fgedu.net.cn ~]# aws s3 ls s3://fgedu-backup/tidb/full/ | wc -l
[root@fgedu.net.cn ~]# aws s3 ls s3://fgedu-backup/tidb/incremental/ | wc -l
## 3. 案例效果
– 清理策略:按时间和空间自动清理
– 清理范围:本地存储和云存储
– 监控策略:定期监控存储空间
– 效果:存储空间使用率保持在合理范围,备份集管理有序
4.3 灾难恢复实战案例
## 1. 案例背景
– 系统:TiDB 7.5.0
– 业务:医疗系统
– 数据量:800GB
– 灾难场景:主数据中心发生火灾,需要从异地备份恢复
– 备份策略:每周全量备份,每天增量备份,异地存储
## 2. 实施步骤
### 步骤1:灾难恢复准备
– 部署新的TiDB集群:
[root@fgedu.net.cn ~]# tiup cluster deploy fgedu-tidb-new v7.5.0 topology.yaml –user root -p
[root@fgedu.net.cn ~]# tiup cluster start fgedu-tidb-new
– 准备恢复环境:
[root@fgedu.net.cn ~]# mkdir -p /tidb/restore
[root@fgedu.net.cn ~]# chown -R tidb:tidb /tidb/restore
### 步骤2:从异地存储恢复
– 从异地存储复制备份:
[root@fgedu.net.cn ~]# rsync -avz 192.168.2.100:/tidb/backup/dr/full/ /tidb/restore/full/
[root@fgedu.net.cn ~]# rsync -avz 192.168.2.100:/tidb/backup/dr/incremental/
/tidb/restore/incremental/
– 执行全量恢复:
[root@fgedu.net.cn ~]# tiup br restore full –pd “192.168.1.10:2379” –storage
“local:///tidb/restore/full/$(ls -t /tidb/restore/full/ | head -1)”
输出:
[2024-01-04 14:00:00] [info] [restore.go:123] [“full restore start”]
[2024-01-04 14:00:05] [info] [restore.go:145] [“restore meta done”]
[2024-01-04 14:45:15] [info] [restore.go:167] [“restore data done”]
[2024-01-04 14:45:20] [info] [restore.go:189] [“full restore success”]
– 执行增量恢复:
[root@fgedu.net.cn ~]# tiup br restore incremental –pd “192.168.1.10:2379” –storage
“local:///tidb/restore/incremental/$(ls -t /tidb/restore/incremental/ | head -1)” –last-backup
“local:///tidb/restore/full/$(ls -t /tidb/restore/full/ | head -1)”
### 步骤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_patients;”
[root@fgedu.net.cn ~]# mysql -h 192.168.1.10 -P 4000 -u fgedu -p -e “SELECT COUNT(*) FROM
fgedu_medical_records;”
### 步骤4:切换业务流量
– 更新DNS:将业务流量指向新集群
– 启动应用服务:
[root@fgedu.net.cn ~]# systemctl start app.service
## 3. 案例效果
– 灾难恢复成功:从异地备份恢复数据
– 恢复时间:约2小时(包括集群部署)
– 数据完整:所有数据都已恢复
– 业务连续性:在可接受的时间内恢复业务
– 灾备方案有效:验证了异地备份的重要性
Part05-风哥经验总结与分享
5.1 最佳实践
TiDB备份集管理与清理策略的最佳实践:
- 备份集管理最佳实践:
- 统一命名规范:使用标准化的命名格式
- 分类存储:按备份类型和时间分类存储
- 多副本存储:本地、云、异地存储
- 定期验证:确保备份可用
- 清理策略最佳实践:
- 基于时间清理:按备份类型设置不同的保留期
- 基于空间清理:当存储空间不足时清理
- 自动化清理:使用脚本自动执行清理
- 清理验证:确保清理不影响关键备份
- 存储管理最佳实践:
- 分层存储:根据备份重要性选择存储介质
- 加密存储:保护备份数据安全
- 监控存储:及时发现存储问题
- 优化存储:提高存储利用率
- 自动化管理最佳实践:
- 脚本自动化:使用脚本自动执行备份和清理
- 监控自动化:使用监控工具自动监控
- 告警自动化:设置自动告警机制
- 文档自动化:自动生成备份报告
5.2 管理技巧
## 1. 备份集管理技巧
– 建立备份集索引:
– 创建备份集清单文件
– 记录备份集详细信息
– 定期更新备份集索引
– 备份集标签管理:
– 为备份集添加标签
– 按标签分类管理
– 使用标签快速查找
– 备份集版本管理:
– 记录备份集版本信息
– 跟踪备份集变更历史
– 管理备份集依赖关系
– 备份集权限管理:
– 设置合理的访问权限
– 限制备份集的访问
– 定期轮换访问凭证
## 2. 清理策略技巧
– 渐进式清理:
– 先清理最旧的备份
– 再清理较少使用的备份
– 最后清理非关键备份
– 智能清理:
– 根据业务需求调整清理策略
– 考虑数据重要性
– 结合存储使用情况
– 清理验证:
– 清理前验证备份完整性
– 清理后验证剩余备份
– 记录清理操作日志
– 应急清理:
– 当存储空间紧急不足时
– 优先清理增量备份
– 保留最近的全量备份
## 3. 监控与告警技巧
– 多维度监控:
– 备份状态监控
– 存储使用监控
– 备份性能监控
– 备份验证监控
– 分级告警:
– 警告级别:存储空间使用率超过80%
– 严重级别:备份失败或过期
– 紧急级别:存储空间使用率超过95%
– 告警通知:
– 邮件通知
– 短信通知
– 即时通讯工具通知
– 监控平台告警
– 告警响应:
– 制定告警响应流程
– 明确响应责任
– 记录告警处理过程
## 4. 灾备管理技巧
– 异地备份管理:
– 定期同步备份到异地
– 验证异地备份完整性
– 测试异地恢复流程
– 灾备演练:
– 定期进行灾备演练
– 记录演练过程和结果
– 优化灾备流程
– 灾备文档:
– 编写详细的灾备计划
– 记录灾备流程和步骤
– 更新灾备文档
– 灾备测试:
– 测试恢复时间
– 测试数据完整性
– 测试业务连续性
5.3 常见问题与解决
## 1. 备份集管理问题
### 问题1:备份集命名混乱
– 症状:备份集命名不规范,难以管理
– 原因:
– 未制定命名规范
– 手动命名容易出错
– 命名格式不一致
– 解决:
– 制定统一的命名规范
– 使用脚本自动命名
– 定期检查命名规范执行情况
### 问题2:备份集存储分散
– 症状:备份集存储在多个位置,管理困难
– 原因:
– 未规划存储结构
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
