本文档详细介绍TiDB备份原理与方案选型,包括备份基础、备份原理、备份类型、生产环境规划、方案选型、实施方案、实战案例等内容。风哥教程参考TiDB官方文档备份相关内容,适合DBA在日常维护TiDB数据库时参考。更多视频教程www.fgedu.net.cn
Part01-基础概念与理论知识
1.1 备份基础
备份是数据库管理的重要组成部分,用于保护数据免受意外损失。
- 备份的定义:将数据库数据复制到安全存储位置的过程,以便在数据丢失时进行恢复
- 备份的目的:
- 数据保护:防止数据丢失
- 灾难恢复:应对系统故障、自然灾害等
- 数据迁移:在不同环境间迁移数据
- 测试环境:为测试提供数据
- 备份的重要性:
- 确保数据安全:防止数据丢失
- 保证业务连续性:快速恢复服务
- 符合合规要求:满足监管要求
- 降低业务风险:减少数据丢失带来的损失
- 定期备份:根据业务需求制定备份计划
- 多副本存储:将备份存储在不同位置
- 备份验证:定期验证备份的有效性
- 恢复测试:定期进行恢复测试
1.2 备份原理
TiDB的备份原理基于分布式架构,通过BR(Backup & Restore)和Dumpling等工具实现。
1.2.1 TiDB备份架构
## 1. 备份工具
– BR (Backup & Restore):用于全量和增量备份,基于TiKV的快照
– Dumpling:用于逻辑备份,导出SQL格式数据
– TiCDC:用于实时数据同步,可用于增量备份
## 2. 备份原理
– BR:
– 利用TiKV的快照功能获取一致性数据
– 并行备份多个TiKV节点
– 支持全量和增量备份
– 备份速度快,适合大规模数据
– Dumpling:风哥提示:
– 通过SQL查询导出数据
– 支持导出为SQL、CSV等格式
– 适合小到中等规模数据
– 便于跨版本迁移
– TiCDC:
– 实时捕获数据变更
– 支持将变更同步到其他系统
– 可用于构建实时备份系统
## 3. 备份流程
– BR备份流程:
1. 获取集群元数据
2. 向所有TiKV节点发送备份请求
3. 各TiKV节点创建快照并备份数据
4. 将备份数据存储到指定位置
5. 生成备份元数据
– Dumpling备份流程:
1. 连接到TiDB节点
2. 执行SQL查询获取数据
3. 将数据导出为指定格式
4. 生成备份文件
1.2.2 备份存储
## 1. 存储介质
– 本地存储:本地磁盘、NAS等
– 云存储:S3、GCS、OSS等
– 分布式存储:HDFS等
## 2. 存储格式
– BR:
– 二进制格式
– 按TiKV Region组织
– 包含元数据和数据文件
– Dumpling:
– SQL格式:INSERT语句
– CSV格式:逗号分隔值
– 其他格式:如JSON等
## 3. 存储策略
– 本地存储:适合小型部署,速度快
– 云存储:适合大规模部署,可扩展性好
– 混合存储:结合本地和云存储的优势
## 4. 存储安全
– 加密存储:对备份数据进行加密
– 访问控制:限制备份数据的访问
– 多副本:存储多个备份副本
– 异地存储:将备份存储在不同地理位置
1.3 备份类型
根据不同的分类标准,备份可以分为多种类型。
1.3.1 按备份范围分类
## 1. 全量备份
– 定义:备份整个数据库的所有数据
– 优点:恢复速度快,可靠性高
– 缺点:备份时间长,存储空间大
– 适用场景:定期完全备份,如每天、每周
## 2. 增量备份
– 定义:备份自上次备份以来发生变化的数据
– 优点:备份时间短,存储空间小
– 缺点:恢复时需要全量备份和所有增量备份
– 适用场景:频繁备份,如每小时、每天
## 3. 差异备份
– 定义:备份自上次全量备份以来发生变化的数据
– 优点:恢复速度比增量备份快
– 缺点:备份时间和存储空间介于全量和增量之间
– 适用场景:适中频率备份,如每天、每两天
1.3.2 按备份方式分类
## 1. 物理备份
– 定义:直接备份数据库的物理文件
– 工具:BR
– 优点:备份速度快,恢复速度快
– 缺点:跨版本兼容性差
– 适用场景:同版本恢复,大规模数据
## 2. 逻辑备份
– 定义:备份数据库的逻辑内容,如SQL语句
– 工具:Dumpling
– 优点:跨版本兼容性好,便于查看和编辑
– 缺点:备份速度慢,恢复速度慢
– 适用场景:跨版本迁移,小到中等规模数据学习交流加群风哥QQ113257174
## 3. 实时备份
– 定义:实时捕获数据变更并备份
– 工具:TiCDC
– 优点:实时性好,数据丢失风险低
– 缺点:架构复杂,维护成本高
– 适用场景:关键业务,需要近实时备份
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次
– 实时备份:持续进行
## 2. 备份时间
– 全量备份:业务低峰期,如凌晨
– 增量备份:根据业务需求选择
– 实时备份:持续进行
## 3. 备份存储
– 本地存储:用于快速恢复
– 云存储:用于长期存储
– 异地存储:用于灾难恢复
## 4. 备份验证
– 定期验证:每周至少验证1次
– 恢复测试:每月至少测试1次
– 完整性检查:每次备份后检查
## 5. 备份保留
– 全量备份:保留4周
– 增量备份:保留1周
– 重要备份:长期保留
2.2 方案选型
2.2.1 备份方案对比
## 1. BR vs Dumpling
| 特性 | BR | Dumpling |
|——|—-|———-|
| 备份类型 | 物理备份 | 逻辑备份 |
| 备份速度 | 快 | 慢 |
| 恢复速度 | 快 | 慢 |
| 跨版本兼容 | 差 | 好 |
| 存储空间 | 小 | 大 |
| 适用场景 | 大规模数据,同版本恢复 | 小到中等规模数据,跨版本迁移 |
## 2. 全量备份 vs 增量备份
| 特性 | 全量备份 | 增量备份 |
|——|———-|———-|
| 备份时间 | 长 | 短 |
| 恢复时间 | 短 | 长 |
| 存储空间 | 大 | 小 |
| 可靠性 | 高 | 中 |
| 适用场景 | 定期完全备份 | 频繁备份 |
## 3. 本地存储 vs 云存储
| 特性 | 本地存储 | 云存储 |
|——|———-|———-|
| 访问速度 | 快 | 中 |
| 存储成本 | 高 | 低 |
| 可扩展性 | 有限 | 无限 |
| 可靠性 | 中 | 高 |
| 适用场景 | 快速恢复 | 长期存储,异地备份 |
2.2.2 方案选型建议
## 1. 基于数据量的选型
– 小型数据库(<100GB):
– 备份工具:Dumpling
– 备份策略:每天全量备份
– 存储:本地存储
– 中型数据库(100GB-1TB):
– 备份工具:BR
– 备份策略:每周全量备份,每天增量备份
– 存储:本地存储 + 云存储
– 大型数据库(>1TB):
– 备份工具:BR + TiCDC
– 备份策略:每周全量备份,每小时增量备份,实时备份
– 存储:云存储 + 异地存储
## 2. 基于业务需求的选型
– 关键业务:
– 备份策略:多副本,实时备份
– 存储:本地 + 云 + 异地
– 验证:定期恢复测试
– 一般业务:
– 备份策略:定期全量 + 增量
– 存储:本地 + 云
– 验证:定期备份验证
– 测试环境:
– 备份策略:按需备份
– 存储:本地存储
– 验证:按需验证
## 3. 基于技术环境的选型
– 同版本环境:
– 备份工具:BR
– 优点:备份恢复速度快
– 跨版本环境:
– 备份工具:Dumpling
– 优点:跨版本兼容性好
– 混合环境:
– 备份工具:BR + Dumpling
– 优点:兼顾速度和兼容性
2.3 备份策略
## 1. 全量备份策略
– 频率:每周1次
– 时间:业务低峰期,如周日凌晨
– 工具:BR
– 存储:本地存储 + 云存储
– 保留期:4周
## 2. 增量备份策略
– 频率:每天1次或每小时1次
– 时间:业务低峰期
– 工具:BR
– 存储:本地存储 + 云存储
– 保留期:1周
## 3. 实时备份策略
– 频率:持续进行
– 工具:TiCDC
– 存储:云存储
– 保留期:根据业务需求
## 4. 备份验证策略
– 频率:每周1次
– 内容:备份文件完整性检查
– 测试:每月1次恢复测试
– 文档:记录验证结果
## 5. 灾难恢复策略
– 异地备份:将备份存储在不同地理位置
– 恢复演练:每季度1次灾难恢复演练
– 恢复计划:制定详细的恢复步骤
– 角色分工:明确恢复过程中的角色和职责
Part03-生产环境项目实施方案
3.1 备份实施方案
3.1.1 BR备份实施
## 1. 环境准备
– 安装BR工具:
[root@fgedu.net.cn ~]# tiup install br
– 配置存储介质:
# 本地存储
[root@fgedu.net.cn ~]# mkdir -p /tidb/backup
# 云存储(以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
## 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:01:30] [info] [backup.go:167] [“backup data done”]
[2024-01-01 00:01:35] [info] [backup.go:189] [“full backup success”]
– 备份到S3:
[root@fgedu.net.cn ~]# tiup br backup full –pd “192.168.1.1:2379” –storage “s3://fgedu-backup/tidb/full-$(date +%Y%m%d)”
## 3. 增量备份
– 备份到本地存储:
[root@fgedu.net.cn ~]# tiup br backup incremental –pd “192.168.1.1:2379” –storage “local:///tidb/backup/incremental-$(date +%Y%m%d%H%M)” –last-backup “local:///tidb/backup/full-20240101”
输出:
[2024-01-01 01:00:00] [info] [backup.go:213] [“incremental backup start”]
[2024-01-01 01:00:02] [info] [backup.go:235] [“backup meta done”]
[2024-01-01 01:00:15] [info] [backup.go:257] [“backup data done”]
[2024-01-01 01:00:18] [info] [backup.go:279] [“incremental backup success”]
## 4. 备份自动化
– 创建备份脚本:
[root@fgedu.net.cn ~]# cat > backup.sh << 'EOF'
#!/bin/bash
# backup.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: `http://www.fgedu.net.cn`
# 全量备份(每周日执行)
if [ $(date +%u) -eq 7 ]; then
tiup br backup full --pd "192.168.1.1:2379" --storage "local:///tidb/backup/full-$(date +%Y%m%d)"
else
# 增量备份(其他日期执行)
last_full=$(ls -t /tidb/backup/full-* | head -1)
tiup br backup incremental --pd "192.168.1.1:2379" --storage "local:///tidb/backup/incremental-$(date +%Y%m%d)" --last-backup "local://$last_full"
fi
EOF
[root@fgedu.net.cn ~]# chmod +x backup.sh
- 添加到crontab:
[root@fgedu.net.cn ~]# crontab -e
# 每天凌晨1点执行备份
0 1 * * * /root/backup.sh >> /tidb/log/backup.log 2>&1
3.1.2 Dumpling备份实施
## 1. 环境准备
– 安装Dumpling工具:
[root@fgedu.net.cn ~]# tiup install dumpling
## 2. 全量备份
– 备份到本地存储:
[root@fgedu.net.cn ~]# tiup dumpling -h 192.168.1.1 -P 4000 -u fgedu -p password -B fgedudb -o /tidb/backup/dumpling-$(date +%Y%m%d)
输出:
[2024-01-01 00:00:00] [info] [main.go:123] [“dump start”]
[2024-01-01 00:00:05] [info] [main.go:145] [“dump schema”]
[2024-01-01 00:00:10] [info] [main.go:167] [“dump data”]
[2024-01-01 00:01:30] [info] [main.go:189] [“dump success”]
– 备份为SQL格式:
[root@fgedu.net.cn ~]# tiup dumpling -h 192.168.1.1 -P 4000 -u fgedu -p password -B fgedudb -o /tidb/backup/dumpling-sql-$(date +%Y%m%d) –output-format sql
– 备份为CSV格式:
[root@fgedu.net.cn ~]# tiup dumpling -h 192.168.1.1 -P 4000 -u fgedu -p password -B fgedudb -o /tidb/backup/dumpling-csv-$(date +%Y%m%d) –output-format csv
## 3. 备份自动化
– 创建备份脚本:
[root@fgedu.net.cn ~]# cat > dumpling_backup.sh << 'EOF'
#!/bin/bash
# dumpling_backup.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: `http://www.fgedu.net.cn`
tiup dumpling -h 192.168.1.1 -P 4000 -u fgedu -p password -B fgedudb -o /tidb/backup/dumpling-$(date +%Y%m%d)
EOF
[root@fgedu.net.cn ~]# chmod +x dumpling_backup.sh
- 添加到crontab:
[root@fgedu.net.cn ~]# crontab -e
# 每天凌晨2点执行备份
0 2 * * * /root/dumpling_backup.sh >> /tidb/log/dumpling_backup.log 2>&1
3.2 恢复实施方案
3.2.1 BR恢复实施
## 1. 环境准备
– 确保目标集群已准备就绪
– 停止应用服务,避免数据写入
## 2. 全量恢复
– 从本地存储恢复:
[root@fgedu.net.cn ~]# tiup br restore full –pd “192.168.1.1: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:05:30] [info] [restore.go:167] [“restore data done”]
[2024-01-01 10:05:35] [info] [restore.go:189] [“full restore success”]
– 从S3恢复:
[root@fgedu.net.cn ~]# tiup br restore full –pd “192.168.1.1:2379” –storage “s3://fgedu-backup/tidb/full-20240101”
## 3. 增量恢复
– 先恢复全量备份:
[root@fgedu.net.cn ~]# tiup br restore full –pd “192.168.1.1:2379” –storage “local:///tidb/backup/full-20240101”
– 再恢复增量备份:
[root@fgedu.net.cn ~]# tiup br restore incremental –pd “192.168.1.1:2379” –storage “local:///tidb/backup/incremental-20240102” –last-backup “local:///tidb/backup/full-20240101”
输出:
[2024-01-01 10:10:00] [info] [restore.go:213] [“incremental restore start”]
[2024-01-01 10:10:02] [info] [restore.go:235] [“restore meta done”]
[2024-01-01 10:10:15] [info] [restore.go:257] [“restore data done”]
[2024-01-01 10:10:18] [info] [restore.go:279] [“incremental restore success”]
## 4. 恢复验证
– 检查数据库状态:
[root@fgedu.net.cn ~]# mysql -h 192.168.1.1 -P 4000 -u fgedu -p -e “SHOW DATABASES;”
– 检查数据完整性:
[root@fgedu.net.cn ~]# mysql -h 192.168.1.1 -P 4000 -u fgedu -p -e “SELECT COUNT(*) FROM fgedu_users;”
3.2.2 Dumpling恢复实施
## 1. 环境准备
– 确保目标数据库已创建
– 停止应用服务,避免数据写入
## 2. 恢复SQL格式备份
– 恢复数据:
[root@fgedu.net.cn ~]# mysql -h 192.168.1.1 -P 4000 -u fgedu -p fgedudb < /tidb/backup/dumpling-20240101/fgedudb-schema-create.sql
[root@fgedu.net.cn ~]# mysql -h 192.168.1.1 -P 4000 -u fgedu -p fgedudb < /tidb/backup/dumpling-20240101/fgedudb.tables.sql
[root@fgedu.net.cn ~]# mysql -h 192.168.1.1 -P 4000 -u fgedu -p fgedudb < /tidb/backup/dumpling-20240101/fgedudb.fgedu_users.sql
## 3. 恢复CSV格式备份
- 创建表结构:
[root@fgedu.net.cn ~]# mysql -h 192.168.1.1 -P 4000 -u fgedu -p fgedudb < /tidb/backup/dumpling-csv-20240101/fgedudb-schema-create.sql
[root@fgedu.net.cn ~]# mysql -h 192.168.1.1 -P 4000 -u fgedu -p fgedudb < /tidb/backup/dumpling-csv-20240101/fgedudb.tables.sql
- 导入数据:
[root@fgedu.net.cn ~]# mysqlimport -h 192.168.1.1 -P 4000 -u fgedu -p --local fgedudb /tidb/backup/dumpling-csv-20240101/fgedudb.fgedu_users.csv
## 4. 恢复验证
- 检查数据库状态:
[root@fgedu.net.cn ~]# mysql -h 192.168.1.1 -P 4000 -u fgedu -p -e "SHOW DATABASES;"
- 检查数据完整性:
[root@fgedu.net.cn ~]# mysql -h 192.168.1.1 -P 4000 -u fgedu -p -e "SELECT COUNT(*) FROM fgedu_users;"
3.3 备份管理
3.3.1 备份监控
## 1. 监控指标
– 备份成功率:监控备份是否成功
– 备份时间:监控备份执行时间
– 备份大小:监控备份文件大小
– 备份频率:确保按时执行备份
## 2. 监控工具
– Prometheus + Grafana:监控备份指标
– 日志监控:监控备份日志
– 告警系统:设置备份失败告警
## 3. 监控配置
– 配置Prometheus告警:
– 备份失败告警
– 备份时间过长告警
– 备份文件过大告警
– 配置日志监控:
– 监控备份日志中的错误信息
– 监控备份日志中的警告信息
## 4. 监控面板
– 创建Grafana面板:
– 备份成功率面板
– 备份时间趋势面板
– 备份文件大小趋势面板
– 备份频率面板
3.3.2 备份生命周期管理
## 1. 备份保留策略
– 全量备份:保留4周
– 增量备份:保留1周
– 重要备份:长期保留
## 2. 备份清理
– 自动清理:
[root@fgedu.net.cn ~]# cat > cleanup_backup.sh << 'EOF'
#!/bin/bash
# cleanup_backup.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: `http://www.fgedu.net.cn`
# 清理4周前的全量备份
find /tidb/backup -name "full-*" -mtime +28 -type d -exec rm -rf {} \;
# 清理1周前的增量备份
find /tidb/backup -name "incremental-*" -mtime +7 -type d -exec rm -rf {} \;
# 清理30天前的Dumpling备份
find /tidb/backup -name "dumpling-*" -mtime +30 -type d -exec rm -rf {} \;
EOF
[root@fgedu.net.cn ~]# chmod +x cleanup_backup.sh
- 添加到crontab:
[root@fgedu.net.cn ~]# crontab -e
# 每周日凌晨3点执行清理
0 3 * * 7 /root/cleanup_backup.sh >> /tidb/log/cleanup_backup.log 2>&1
## 3. 备份验证
– 定期验证备份完整性:
[root@fgedu.net.cn ~]# tiup br validate –storage “local:///tidb/backup/full-20240101”
– 定期测试恢复:
[root@fgedu.net.cn ~]# tiup br restore full –pd “192.168.1.2:2379” –storage “local:///tidb/backup/full-20240101”
## 4. 备份文档
– 记录备份策略:
– 备份频率
– 备份工具
– 备份存储
– 备份保留期
– 记录恢复流程:
– 恢复步骤
– 恢复验证
– 常见问题处理
– 记录备份历史:
– 备份时间
– 备份大小
– 备份状态
– 恢复测试结果
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
[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 > 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. 案例效果
– 备份成功:500GB数据成功备份
– 备份时间:约30分钟
– 备份验证:备份文件完整有效
– 自动化:定期执行备份,自动清理过期备份
4.2 增量备份实战案例
## 1. 案例背景
– 系统:TiDB 7.5.0
– 业务:金融系统
– 数据量:1TB
– 需求:每天增量备份,减少备份时间和存储空间
## 2. 实施步骤
### 步骤1:环境准备
– 确保已执行全量备份
– 安装BR工具:
[root@fgedu.net.cn ~]# tiup install br
### 步骤2:执行增量备份
– 执行备份命令:
[root@fgedu.net.cn ~]# tiup br backup incremental –pd “192.168.1.1:2379” –storage “local:///tidb/backup/incremental/$(date +%Y%m%d)” –last-backup “local:///tidb/backup/full/20240101”
输出:
[2024-01-02 01:00:00] [info] [backup.go:213] [“incremental backup start”]
[2024-01-02 01:00:05] [info] [backup.go:235] [“backup meta done”]
[2024-01-02 01:10:15] [info] [backup.go:257] [“backup data done”]
[2024-01-02 01:10:20] [info] [backup.go:279] [“incremental backup success”]
### 步骤3:验证备份
– 检查备份文件:
[root@fgedu.net.cn ~]# ls -la /tidb/backup/incremental/20240102/
输出:
total 12345678
drwxr-xr-x 2 tidb tidb 4096 Jan 2 01:10 .
drwxr-xr-x 3 tidb tidb 4096 Jan 2 01:00 ..
-rw-r–r– 1 tidb tidb 12345 Jan 2 01:00 backupmeta
-rw-r–r– 1 tidb tidb 1261440000 Jan 2 01:10 data.0
– 验证备份完整性:
[root@fgedu.net.cn ~]# tiup br validate –storage “local:///tidb/backup/incremental/20240102”
输出:
[2024-01-02 02:00:00] [info] [validate.go:123] [“validate start”]
[2024-01-02 02:00:05] [info] [validate.go:145] [“validate meta”]
[2024-01-02 02:00:10] [info] [validate.go:167] [“validate data”]
[2024-01-02 02:00:15] [info] [validate.go:189] [“validate success”]
### 步骤4:自动化备份
– 创建备份脚本:
[root@fgedu.net.cn ~]# cat > incremental_backup.sh << 'EOF'
#!/bin/bash
# incremental_backup.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: `http://www.fgedu.net.cn`
# 获取最新的全量备份
last_full=$(ls -t /tidb/backup/full/* | head -1)
# 执行增量备份
tiup br backup incremental --pd "192.168.1.1:2379" --storage "local:///tidb/backup/incremental/$(date +%Y%m%d)" --last-backup "local://$last_full"
# 清理7天前的增量备份
find /tidb/backup/incremental -name "*" -mtime +7 -type d -exec rm -rf {} \;
EOF
[root@fgedu.net.cn ~]# chmod +x incremental_backup.sh
- 添加到crontab:
[root@fgedu.net.cn ~]# crontab -e
# 每天凌晨1点执行增量备份
0 1 * * * /root/incremental_backup.sh >> /tidb/log/incremental_backup.log 2>&1
## 3. 案例效果
– 备份成功:增量数据成功备份
– 备份时间:约10分钟
– 备份空间:约12GB
– 自动化:定期执行增量备份,自动清理过期备份
4.3 恢复实战案例
## 1. 案例背景
– 系统:TiDB 7.5.0
– 业务:电商平台
– 问题:数据库误操作,需要恢复到之前的状态
– 备份:存在全量备份(20240101)和增量备份(20240102)
## 2. 实施步骤
### 步骤1:停止应用服务
– 停止应用服务:
[root@fgedu.net.cn ~]# systemctl stop app.service
### 步骤2:恢复全量备份
– 执行恢复命令:
[root@fgedu.net.cn ~]# tiup br restore full –pd “192.168.1.1:2379” –storage “local:///tidb/backup/full/20240101”
输出:
[2024-01-03 10:00:00] [info] [restore.go:123] [“full restore start”]
[2024-01-03 10:00:05] [info] [restore.go:145] [“restore meta done”]
[2024-01-03 10:30:15] [info] [restore.go:167] [“restore data done”]
[2024-01-03 10:30:20] [info] [restore.go:189] [“full restore success”]
### 步骤3:恢复增量备份
– 执行恢复命令:
[root@fgedu.net.cn ~]# tiup br restore incremental –pd “192.168.1.1:2379” –storage “local:///tidb/backup/incremental/20240102” –last-backup “local:///tidb/backup/full/20240101”
输出:
[2024-01-03 10:35:00] [info] [restore.go:213] [“incremental restore start”]
[2024-01-03 10:35:05] [info] [restore.go:235] [“restore meta done”]
[2024-01-03 10:40:15] [info] [restore.go:257] [“restore data done”]
[2024-01-03 10:40:20] [info] [restore.go:279] [“incremental restore success”]
### 步骤4:验证恢复
– 检查数据库状态:
[root@fgedu.net.cn ~]# mysql -h 192.168.1.1 -P 4000 -u fgedu -p -e “SHOW DATABASES;”
输出:
+——————–+
| Database |
+——————–+
| fgedudb |
| information_schema |
| mysql |
| performance_schema |
| sys |
+——————–+
– 检查数据完整性:
[root@fgedu.net.cn ~]# mysql -h 192.168.1.1 -P 4000 -u fgedu -p -e “SELECT COUNT(*) FROM fgedu_users;”
输出:
+———-+
| COUNT(*) |
+———-+
| 10000 |
+———-+
– 检查业务数据:
[root@fgedu.net.cn ~]# mysql -h 192.168.1.1 -P 4000 -u fgedu -p -e “SELECT * FROM fgedu_orders ORDER BY id DESC LIMIT 10;”
### 步骤5:启动应用服务
– 启动应用服务:
[root@fgedu.net.cn ~]# systemctl start app.service
## 3. 案例效果
– 恢复成功:数据库恢复到20240102的状态
– 恢复时间:约45分钟
– 数据完整:所有数据都已恢复
– 业务恢复:应用服务正常运行
Part05-风哥经验总结与分享
5.1 最佳实践
TiDB备份原理与方案选型的最佳实践:
- 备份策略最佳实践:
- 定期全量备份:每周至少1次
- 频繁增量备份:每天或每小时1次
- 实时备份:关键业务使用TiCDC
- 多副本存储:本地、云、异地存储
- 备份工具选择最佳实践:
- 大规模数据:使用BR
- 跨版本迁移:使用Dumpling
- 实时备份:使用TiCDC
- 混合场景:BR + Dumpling
- 备份管理最佳实践:
- 定期验证:每周验证备份完整性
- 恢复测试:每月进行恢复测试
- 自动清理:定期清理过期备份
- 监控告警:设置备份失败告警
- 灾难恢复最佳实践:
- 异地备份:将备份存储在不同地理位置
- 恢复演练:每季度进行灾难恢复演练
- 恢复计划:制定详细的恢复步骤
- 角色分工:明确恢复过程中的角色和职责
5.2 备份管理技巧
## 1. 备份策略优化
– 根据数据量调整备份频率:
– 小数据量:每天全量备份
– 中数据量:每周全量备份,每天增量备份
– 大数据量:每周全量备份,每小时增量备份
– 根据业务重要性调整备份策略:
– 关键业务:多副本,实时备份
– 一般业务:定期全量 + 增量
– 测试环境:按需备份
– 根据存储成本调整备份策略:
– 本地存储:用于近期备份
– 云存储:用于长期备份
– 异地存储:用于灾难恢复
## 2. 备份性能优化
– 选择合适的备份工具:
– 大规模数据:BR
– 小到中等规模数据:Dumpling
– 优化备份参数:
– BR:调整并发度
– Dumpling:调整线程数
– 选择合适的备份时间:
– 业务低峰期
– 系统负载低时
– 优化存储性能:
– 使用高性能存储
– 确保网络带宽充足
## 3. 备份安全管理
– 备份数据加密:
– 传输加密:使用HTTPS
– 存储加密:使用加密存储
– 访问控制:
– 限制备份文件的访问权限
– 使用密钥管理服务
– 多副本存储:
– 本地存储
– 云存储
– 异地存储
– 定期检查:
– 检查备份文件完整性
– 检查存储设备状态
## 4. 恢复管理技巧
– 制定恢复计划:
– 详细的恢复步骤
– 角色分工
– 时间预估
– 准备恢复环境:
– 确保目标集群已准备就绪
– 停止应用服务
– 清理目标数据库
– 执行恢复操作:
– 先恢复全量备份
– 再恢复增量备份
– 验证恢复结果
– 恢复后验证:
– 检查数据库状态
– 检查数据完整性
– 测试业务功能
5.3 常见问题与解决
## 1. 备份问题
### 问题1:备份失败
– 症状:备份过程中出现错误,备份失败
– 原因:
– 网络问题:网络中断或延迟
– 存储问题:存储空间不足或权限问题
– 系统问题:TiDB集群状态异常
– 资源问题:CPU、内存不足
– 解决:
– 检查网络连接
– 检查存储空间和权限
– 检查TiDB集群状态
– 增加系统资源
### 问题2:备份时间过长
– 症状:备份执行时间超过预期
– 原因:
– 数据量过大
– 网络带宽不足
– 存储性能不足
– 并发度设置不合理
– 解决:
– 增加备份并发度
– 优化网络带宽
– 使用高性能存储
– 考虑增量备份
### 问题3:备份文件过大
– 症状:备份文件大小超过预期
– 原因:
– 数据量增长过快
– 备份工具选择不当
– 备份策略不合理
– 解决:
– 使用增量备份
– 调整备份工具
– 优化备份策略
– 定期清理过期备份
### 问题4:备份验证失败
– 症状:备份验证过程中出现错误
– 原因:
– 备份文件损坏
– 存储介质故障
– 备份过程中断
– 解决:
– 重新执行备份
– 检查存储介质
– 确保备份过程不中断
## 2. 恢复问题
### 问题1:恢复失败
– 症状:恢复过程中出现错误,恢复失败
– 原因:
– 备份文件损坏
– 目标集群状态异常
– 网络问题
– 权限问题
– 解决:
– 检查备份文件完整性
– 检查目标集群状态
– 检查网络连接
– 确保权限正确
### 问题2:恢复时间过长
– 症状:恢复执行时间超过预期
– 原因:
– 数据量过大
– 网络带宽不足
– 存储性能不足
– 并发度设置不合理
– 解决:
– 增加恢复并发度
– 优化网络带宽
– 使用高性能存储
– 考虑分阶段恢复
### 问题3:数据不一致
– 症状:恢复后数据与预期不一致
– 原因:
– 备份文件不完整
– 恢复过程中断
– 增量备份与全量备份不匹配
– 解决:
– 验证备份文件完整性
– 确保恢复过程不中断
– 检查备份链的完整性
### 问题4:业务无法恢复
– 症状:恢复后业务无法正常运行
– 原因:
– 数据丢失
– 架构变更
– 依赖服务未恢复
– 解决:
– 确保备份完整性
– 记录架构变更
– 恢复所有依赖服务
## 3. 管理问题
### 问题1:备份策略不合理
– 症状:备份不能满足业务需求
– 原因:
– 备份频率过低
– 备份存储不足
– 备份验证不及时
– 解决:
– 调整备份频率
– 增加存储容量
– 定期验证备份
### 问题2:备份管理混乱
– 症状:备份文件管理混乱,找不到需要的备份
– 原因:
– 命名不规范
– 存储位置分散
– 文档不完善
– 解决:
– 统一命名规范
– 集中存储备份
– 完善备份文档
### 问题3:恢复演练不足
– 症状:真正需要恢复时手忙脚乱
– 原因:
– 未定期进行恢复演练
– 恢复流程不熟悉
– 恢复工具使用不熟练
– 解决:
– 定期进行恢复演练
– 熟悉恢复流程
– 熟练使用恢复工具
### 问题4:备份监控缺失
– 症状:备份失败未及时发现
– 原因:
– 未配置监控
– 未设置告警
– 监控工具使用不当
– 解决:
– 配置备份监控
– 设置备份告警
– 正确使用监控工具
本文档详细介绍了TiDB备份原理与方案选型的各个方面,包括基础概念、生产环境规划、实施方案、实战案例和经验总结。通过本文档的学习,读者可以掌握TiDB备份的原理和应用技巧,确保数据安全和业务连续性。学习交流加群风哥微信: itpux-com
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
