本文档详细介绍TiDB备份与恢复最佳实践,包括备份方法、恢复流程、策略设计等内容。风哥教程参考TiDB官方文档备份恢复指南、BR工具手册等内容,适合DBA进行TiDB数据保护。
Part01-基础概念与理论知识
1.1 TiDB备份概述
TiDB提供多种备份方式,包括逻辑备份和物理备份。备份是数据安全的重要保障,建议制定完善的备份策略。
- 支持逻辑备份(Dumpling)
- 支持物理备份(BR)
- 支持增量备份
- 支持备份到本地或云存储
1.2 备份方法详解
# 1. 逻辑备份(Dumpling)
# 特点:
# – 生成SQL文件或CSV文件
# – 支持跨版本恢复
# – 备份速度较慢,适合小数据量
# 2. 物理备份(BR)
# 特点:
# – 直接备份数据文件
# – 备份速度快,适合大数据量
# – 恢复速度快
# – 支持增量备份
# 3. 增量备份
# 基于上一次全量备份的变更数据
# 减少备份时间和存储空间
# 4. 备份存储选项
# – 本地存储
# – NFS
# – S3兼容存储
# – GCS
# – OSS
1.3 恢复流程
TiDB恢复流程包括:准备恢复环境、执行恢复操作、验证数据完整性等步骤。
Part02-生产环境规划与建议
2.1 备份策略设计
# 1. 备份频率
# – 全量备份:每周1次
# – 增量备份:每天1次
# – 日志备份:实时
# 2. 备份时间
# 选择业务低峰期进行备份
# 例如:凌晨2:00-6:00
# 3. 备份类型选择
# – 小集群(< 100GB):Dumpling逻辑备份
# - 中集群(100GB-1TB):BR物理备份
# - 大集群(> 1TB):BR物理备份 + 增量备份
# 4. 备份验证
# 定期验证备份文件的完整性
# 每季度进行一次恢复演练
# 5. 灾备方案
# 跨地域备份
# 异地灾备集群
2.2 存储规划
# 1. 存储容量计算
# 全量备份大小 = 数据库大小 × 1.2(预留空间)
# 增量备份大小 = 日增量 × 备份保留天数
# 2. 存储介质选择
# – 本地SSD:速度快,适合临时备份
# – NFS:网络存储,适合中小规模
# – 云存储:S3、OSS等,适合大规模
# 3. 存储配置示例
# 本地备份目录
mkdir -p /tidb/backup/full
mkdir -p /tidb/backup/incremental
# 云存储配置
# S3配置
cat > backup-config.toml << EOF
[storage]
backend = "s3"
[storage.s3]
bucket = "tidb-backup"
prefix = "fgedudb"
region = "us-east-1"
access-key = "AKI..."
secret-access-key = "SK..."
EOF
# OSS配置
cat > backup-config.toml << EOF
[storage]
backend = "oss"
[storage.oss]
bucket = "tidb-backup"
prefix = "fgedudb"
endpoint = "oss-cn-beijing.aliyuncs.com"
access-key = "LTA..."
secret-access-key = "bPx..."
EOF
2.3 备份保留策略
# 1. 全量备份保留
# – 近期:保留4周
# – 中期:每月保留1份,保留3个月
# – 长期:每季度保留1份,保留1年
# 2. 增量备份保留
# 保留到下一次全量备份为止
# 3. 备份清理
# 自动清理过期备份
# 确保存储空间充足
# 4. 保留策略示例
# 全量备份:
# – 周备份:保留4个
# – 月备份:保留3个
# – 季度备份:保留4个风哥提示:
# 增量备份:
# 保留7天的增量备份
Part03-生产环境项目实施方案
3.1 全量备份实战
3.1.1 使用BR进行全量备份
# 1. 备份到本地
# tiup br backup full –pd “192.168.1.10:2379” –storage “local:///tidb/backup/full/20240409” –ratelimit 128
# 执行命令
[root@fgedu.net.cn ~]# tiup br backup full –pd “192.168.1.10:2379” –storage “local:///tidb/backup/full/20240409”
# 输出日志
[2024/04/09 02:00:00] [INFO] [backup.go:442] [“full backup start”] [pd=192.168.1.10:2379]
[2024/04/09 02:00:01] [INFO] [backup.go:465] [“backup meta”] [meta=20240409-020000.meta]
[2024/04/09 02:30:00] [INFO] [backup.go:500] [“full backup success”] [size=500GB] [duration=30m0s]
# 2. 备份到S3
[root@fgedu.net.cn ~]# tiup br backup full –pd “192.168.1.10:2379” \
–storage “s3://tidb-backup/fgedudb/full/20240409” \
–s3.endpoint “s3.amazonaws.com” \
–s3.access-key “AKI…” \
–s3.secret-access-key “SK…”
# 3. 查看备份状态
[root@fgedu.net.cn ~]# tiup br list –storage “local:///tidb/backup/full”
+——————+———————+———-+——–+
| Name | Backup Time | Size | Status |
+——————+———————+———-+——–+
| 20240409-020000 | 2024-04-09 02:00:00 | 500.0 GB | done |
| 20240402-020000 | 2024-04-02 02:00:00 | 480.0 GB | done |
+——————+———————+———-+——–+
# 4. 验证备份文件
[root@fgedu.net.cn ~]# ls -la /tidb/backup/full/20240409/
-rw-r–r– 1 root root 500G Apr 9 02:30 backupmeta
-rw-r–r– 1 root root 10M Apr 9 02:30 backup.lock
-rw-r–r– 1 root root 50G Apr 9 02:10 tikv-1-backup.tar.gz
-rw-r–r– 1 root root 50G Apr 9 02:15 tikv-2-backup.tar.gz
-rw-r–r– 1 root root 50G Apr 9 02:20 tikv-3-backup.tar.gz
3.1.2 使用Dumpling进行逻辑备份
# 1. 备份到本地
[root@fgedu.net.cn ~]# tiup dumpling -h 192.168.1.10 -P 4000 -u root -p ‘root123’ \
-B fgedudb \
-o /tidb/backup/logical/20240409 \
–threads 8
# 输出日志
[2024/04/09 02:00:00] [INFO] [dumpling.go:450] [“dump database”] [db=fgedudb]
[2024/04/09 02:05:00] [INFO] [dumpling.go:480] [“dump table”] [table=fgedu_users]
[2024/04/09 02:10:00] [INFO] [dumpling.go:500] [“dump completed”] [tables=20] [size=50GB] [duration=10m0s]
# 2. 备份为SQL文件
[root@fgedu.net.cn ~]# tiup dumpling -h 192.168.1.10 -P 4000 -u root -p ‘root123’ \
-B fgedudb \
-o /tidb/backup/sql/20240409 \
–filetype sql
# 3. 查看备份文件
[root@fgedu.net.cn ~]# ls -la /tidb/backup/logical/20240409/
-rw-r–r– 1 root root 50M Apr 9 02:05 fgedu_users.000000.sql
-rw-r–r– 1 root root 100M Apr 9 02:06 fgedu_orders.000000.sql
-rw-r–r– 1 root root 20M Apr 9 02:10 metadata
# 4. 备份特定表
[root@fgedu.net.cn ~]# tiup dumpling -h 192.168.1.10 -P 4000 -u root -p ‘root123’ \
-B fgedudb \
-T fgedu_users,fgedu_orders \
-o /tidb/backup/tables/20240409
3.2 增量备份实战
# 1. 基于上一次全量备份创建增量备份
[root@fgedu.net.cn ~]# tiup br backup incremental –pd “192.168.1.10:2379” \
–storage “local:///tidb/backup/incremental/20240410” \
–last-backup “local:///tidb/backup/full/20240409”
# 输出日志
[2024/04/10 02:00:00] [INFO] [backup.go:600] [“incremental backup start”]
[2024/04/10 02:00:01] [INFO] [backup.go:620] [“read last backup meta”] [meta=20240409-020000.meta]
[2024/04/10 02:05:00] [INFO] [backup.go:650] [“incremental backup success”] [size=10GB] [duration=5m0s]
# 2. 查看增量备份
[root@fgedu.net.cn ~]# tiup br list –storage “local:///tidb/backup/incremental”
+——————+———————+———-+——–+
| Name | Backup Time | Size | Status |
+——————+———————+———-+——–+
| 20240410-020000 | 2024-04-10 02:00:00 | 10.0 GB | done |
| 20240409-020000 | 2024-04-09 02:00:00 | 8.0 GB | done |
+——————+———————+———-+——–+
# 3. 增量备份链
# 全量备份 -> 增量备份1 -> 增量备份2 -> 增量备份3
# 4. 增量备份恢复学习交流加群风哥QQ113257174
# 需要按顺序恢复全量备份和所有增量备份
3.3 时间点恢复
# 1. 准备恢复环境
# 确保目标集群已启动
# 清理目标数据库
# 2. 执行时间点恢复
[root@fgedu.net.cn ~]# tiup br restore point –pd “192.168.1.20:2379” \
–storage “local:///tidb/backup/full/20240409” \
–incremental-storage “local:///tidb/backup/incremental” \
–recovery-time “2024-04-10 12:00:00”
# 输出日志
[2024/04/10 13:00:00] [INFO] [restore.go:500] [“point in time recovery start”]
[2024/04/10 13:00:01] [INFO] [restore.go:520] [“restore full backup”] [backup=20240409-020000]
[2024/04/10 13:30:00] [INFO] [restore.go:540] [“restore incremental backups”]
[2024/04/10 13:35:00] [INFO] [restore.go:560] [“recover to specified time”] [time=2024-04-10 12:00:00]
[2024/04/10 13:40:00] [INFO] [restore.go:580] [“point in time recovery success”] [duration=40m0s]
# 3. 使用Dumpling进行时间点恢复
# 先恢复全量备份
[root@fgedu.net.cn ~]# tiup lightning -h 192.168.1.20 -P 4000 -u root -p ‘root123’ \
–backend local \
–sorted-kv-dir /tidb/tmp \
/tidb/backup/logical/20240409
# 然后应用binlog(如果启用了binlog)
[root@fgedu.net.cn ~]# tiup binlogctl decode –input /tidb/binlog/binlog.000001 | mysql -h 192.168.1.20 -P 4000 -u root -p ‘root123’
Part04-生产案例与实战讲解
4.1 大规模集群备份
# 场景:10TB数据,10节点TiDB集群
# 1. 备份策略
# – 全量备份:每周日凌晨2:00
# – 增量备份:每天凌晨2:00
# – 备份到S3存储
# 2. 备份脚本
#!/bin/bash
# backup-large-cluster.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: `http://www.fgedu.net.cn`
DATE=$(date +%Y%m%d)
FULL_BACKUP_DIR=”s3://tidb-backup/fgedudb/full/$DATE”
INCR_BACKUP_DIR=”s3://tidb-backup/fgedudb/incremental/$DATE”
LAST_FULL_BACKUP=”s3://tidb-backup/fgedudb/full/$(date -d ‘-7 days’ +%Y%m%d)”
# 全量备份(每周日)
if [ $(date +%u) -eq 7 ]; then
echo “开始全量备份…”
tiup br backup full –pd “192.168.1.10:2379” \
–storage “$FULL_BACKUP_DIR” \
–s3.endpoint “s3.amazonaws.com” \
–s3.access-key “AKI…” \
–s3.secret-access-key “SK…” \
–ratelimit 512
echo “全量备份完成”
else
echo “开始增量备份…”
tiup br backup incremental –pd “192.168.1.10:2379” \
–storage “$INCR_BACKUP_DIR” \
–last-backup “$LAST_FULL_BACKUP” \
–s3.endpoint “s3.amazonaws.com” \
–s3.access-key “AKI…” \
–s3.secret-access-key “SK…” \
–ratelimit 512
echo “增量备份完成”
fi
# 3. 备份性能优化
# – 使用多线程备份
# – 设置合理的速率限制
# – 选择业务低峰期
# 4. 备份验证
# 每季度进行一次恢复演练
# 验证数据完整性
# 执行结果
# 全量备份:10TB数据,耗时4小时
# 增量备份:平均100GB/天,耗时30分钟
4.2 云存储备份
# 1. AWS S3备份
[root@fgedu.net.cn ~]# tiup br backup full –pd “192.168.1.10:2379” \
–storage “s3://tidb-backup/fgedudb/full/20240409” \
–s3.endpoint “s3.amazonaws.com” \
–s3.access-key “AKIA…” \
–s3.secret-access-key “SK…” \
–s3.region “us-east-1”
# 2. 阿里云OSS备份
[root@fgedu.net.cn ~]# tiup br backup full –pd “192.168.1.10:2379” \
–storage “oss://tidb-backup/fgedudb/full/20240409” \
–oss.endpoint “oss-cn-beijing.aliyuncs.com” \
–oss.access-key “LTA…” \
–oss.secret-access-key “bPx…”
# 3. 腾讯云COS备份
[root@fgedu.net.cn ~]# tiup br backup full –pd “192.168.1.10:2379” \
–storage “cos://tidb-backup/fgedudb/full/20240409” \
–cos.endpoint “cos.ap-beijing.myqcloud.com” \
–cos.access-key “AKID…” \
–cos.secret-access-key “SK…”
# 4. 云存储优势
# – 高可靠性
# – 弹性扩展
# – 跨地域复制
# – 成本优化
# 5. 云存储恢复
[root@fgedu.net.cn ~]# tiup br restore full –pd “192.168.1.20:2379” \
–storage “s3://tidb-backup/fgedudb/full/20240409” \
–s3.endpoint “s3.amazonaws.com” \
–s3.access-key “AKI…” \
–s3.secret-access-key “SK…”
# 恢复输出
[2024/04/10 10:00:00] [INFO] [restore.go:400] [“full restore start”]
[2024/04/10 10:30:00] [INFO] [restore.go:450] [“restore success”] [size=500GB] [duration=30m0s]
4.3 灾备演练
# 1. 演练准备
# – 制定演练计划
# – 准备测试环境
# – 通知相关人员
# 2. 演练步骤
# 步骤1:模拟灾难
# 停止主集群
[root@fgedu.net.cn ~]# tiup cluster stop fgedudb
# 步骤2:启动灾备集群
[root@fgedu-dr.net.cn ~]# tiup cluster start fgedudb-dr
# 步骤3:恢复最近备份
[root@fgedu-dr.net.cn ~]# tiup br restore full –pd “192.168.2.10:2379” \
–storage “s3://tidb-backup/fgedudb/full/20240409”
# 步骤4:应用增量备份
[root@fgedu-dr.net.cn ~]# tiup br restore incremental –pd “192.168.2.10:2379” \
–storage “s3://tidb-backup/fgedudb/incremental/20240410” \
–last-backup “s3://tidb-backup/fgedudb/full/20240409″
# 步骤5:验证数据
# 检查关键表数据
[root@fgedu-dr.net.cn ~]# mysql -h192.168.2.10 -P4000 -u root -p’root123′ -e ”
SELECT COUNT(*) FROM fgedudb.fgedu_users;
SELECT COUNT(*) FROM fgedudb.fgedu_orders;
”
# 步骤6:验证应用
# 测试应用连接
# 执行业务操作
# 3. 演练报告
# – 演练时间:2024-04-10 14:00-16:00
# – 演练结果:成功
# – 恢复时间:45分钟
# – 数据完整性:100%
# 4. 改进措施
# – 优化备份策略
# – 缩短恢复时间
# – 完善灾备流程
Part05-风哥经验总结与分享
5.1 备份恢复最佳实践
- 制定完善的备份策略:根据数据量和业务需求设计合理的备份计划
- 多种备份方式结合:逻辑备份和物理备份结合使用
- 备份到异地:确保数据安全,防止本地灾难
- 定期验证备份:确保备份文件的完整性和可恢复性
- 自动化备份:使用脚本自动化备份过程
- 监控备份状态:及时发现备份失败
5.2 常见问题与解决方案
# 问题1:备份速度慢
# 原因:
# – 网络带宽不足
# – 存储IO瓶颈
# – 备份线程数不足
# 解决方案:
# – 增加网络带宽
# – 使用SSD存储
# – 增加备份线程数
# – 设置合理的速率限制
# 问题2:备份失败
# 原因:
# – 存储空间不足
# – 网络中断
# – 权限不足
# 解决方案:
# – 确保存储空间充足
# – 检查网络连接
# – 验证备份用户权限
# 问题3:恢复时间长
# 原因:
# – 数据量大
# – 存储IO慢
# – 网络带宽不足
# 解决方案:
# – 使用物理备份(BR)
# – 优化存储性能
# – 增加网络带宽
# – 并行恢复
# 问题4:备份文件损坏
# 原因:
# – 存储介质故障
# – 网络传输错误
# – 备份过程中断
# 解决方案:
# – 定期检查备份文件完整性
# – 使用校验和验证
# – 备份到多个位置
# 问题5:增量备份链断裂
# 原因:
# – 某份增量备份失败
# – 备份文件丢失
# 解决方案:
# – 定期创建新的全量备份
# – 监控增量备份状态
# – 建立备份链管理机制
5.3 备份恢复检查清单
# tidb-backup-checklist.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: `http://www.fgedu.net.cn`
# TiDB备份恢复检查清单
echo “=== TiDB备份恢复检查清单 ===”
# 1. 备份策略检查
echo “[ ] 备份策略是否合理?”
echo “[ ] 备份频率是否适当?”
echo “[ ] 备份时间是否选择低峰期?”
# 2. 存储检查
echo “[ ] 存储容量是否充足?”
echo “[ ] 存储介质是否可靠?”
echo “[ ] 是否备份到异地?”
# 3. 备份执行检查
echo “[ ] 备份是否自动执行?”
echo “[ ] 备份是否有监控告警?”
echo “[ ] 备份失败是否有通知?”
# 4. 备份验证检查
echo “[ ] 是否定期验证备份文件?”
echo “[ ] 是否每季度进行恢复演练?”
echo “[ ] 恢复演练是否有记录?”
# 5. 恢复准备检查
echo “[ ] 恢复流程是否文档化?”
echo “[ ] 恢复环境是否就绪?”
echo “[ ] 恢复工具是否可用?”
# 6. 灾备检查
echo “[ ] 是否有灾备方案?”
echo “[ ] 灾备集群是否正常?”
echo “[ ] 跨地域备份是否配置?”
echo “=== 检查完成 ===”
# 执行检查示例
# 检查备份状态
[root@fgedu.net.cn ~]# tiup br list –storage “s3://tidb-backup/fgedudb/full”
# 检查备份文件大小
[root@fgedu.net.cn ~]# aws s3 ls s3://tidb-backup/fgedudb/full/ –human-readable
# 检查恢复环境
[root@fgedu-dr.net.cn ~]# tiup cluster status fgedudb-dr
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
