1. 首页 > 国产数据库教程 > TiDB教程 > 正文

tidb教程FG109-TiDB备份与恢复最佳实践

本文档详细介绍TiDB备份与恢复最佳实践,包括备份方法、恢复流程、策略设计等内容。风哥教程参考TiDB官方文档备份恢复指南、BR工具手册等内容,适合DBA进行TiDB数据保护。

Part01-基础概念与理论知识

1.1 TiDB备份概述

TiDB提供多种备份方式,包括逻辑备份和物理备份。备份是数据安全的重要保障,建议制定完善的备份策略。

TiDB备份特点:

  • 支持逻辑备份(Dumpling)
  • 支持物理备份(BR)
  • 支持增量备份
  • 支持备份到本地或云存储

1.2 备份方法详解

# TiDB备份方法

# 1. 逻辑备份(Dumpling)
# 特点:
# – 生成SQL文件或CSV文件
# – 支持跨版本恢复
# – 备份速度较慢,适合小数据量

# 2. 物理备份(BR)
# 特点:
# – 直接备份数据文件
# – 备份速度快,适合大数据量
# – 恢复速度快
# – 支持增量备份

# 3. 增量备份
# 基于上一次全量备份的变更数据
# 减少备份时间和存储空间

# 4. 备份存储选项
# – 本地存储
# – NFS
# – S3兼容存储
# – GCS
# – OSS

1.3 恢复流程

TiDB恢复流程包括:准备恢复环境、执行恢复操作、验证数据完整性等步骤。

风哥提示:备份是为了在灾难发生时能够快速恢复数据。建议定期进行恢复演练,确保备份的有效性。更多视频教程www.fgedu.net.cn

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天的增量备份

生产环境建议:建立完善的备份策略,定期检查备份状态,确保在数据丢失时能够快速恢复。学习交流加群风哥微信: itpux-com

Part03-生产环境项目实施方案

3.1 全量备份实战

3.1.1 使用BR进行全量备份

# 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进行逻辑备份

# 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 时间点恢复

# 时间点恢复(PITR)

# 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’

风哥提示:时间点恢复是重要的灾备能力,可以将数据库恢复到指定的时间点,避免数据丢失。建议定期测试时间点恢复功能。学习交流加群风哥QQ113257174

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. 改进措施
# – 优化备份策略
# – 缩短恢复时间
# – 完善灾备流程

风哥提示:灾备演练是确保备份有效性的关键。建议每季度进行一次完整的灾备演练,验证恢复流程的可行性。更多学习教程公众号风哥教程itpux_com

Part05-风哥经验总结与分享

5.1 备份恢复最佳实践

  • 制定完善的备份策略:根据数据量和业务需求设计合理的备份计划
  • 多种备份方式结合:逻辑备份和物理备份结合使用
  • 备份到异地:确保数据安全,防止本地灾难
  • 定期验证备份:确保备份文件的完整性和可恢复性
  • 自动化备份:使用脚本自动化备份过程
  • 监控备份状态:及时发现备份失败

5.2 常见问题与解决方案

# 常见备份问题及解决方案

# 问题1:备份速度慢
# 原因:
# – 网络带宽不足
# – 存储IO瓶颈
# – 备份线程数不足
# 解决方案:
# – 增加网络带宽
# – 使用SSD存储
# – 增加备份线程数
# – 设置合理的速率限制

# 问题2:备份失败
# 原因:
# – 存储空间不足
# – 网络中断
# – 权限不足
# 解决方案:
# – 确保存储空间充足
# – 检查网络连接
# – 验证备份用户权限

# 问题3:恢复时间长
# 原因:
# – 数据量大
# – 存储IO慢
# – 网络带宽不足
# 解决方案:
# – 使用物理备份(BR)
# – 优化存储性能
# – 增加网络带宽
# – 并行恢复

# 问题4:备份文件损坏
# 原因:
# – 存储介质故障
# – 网络传输错误
# – 备份过程中断
# 解决方案:
# – 定期检查备份文件完整性
# – 使用校验和验证
# – 备份到多个位置

# 问题5:增量备份链断裂
# 原因:
# – 某份增量备份失败
# – 备份文件丢失
# 解决方案:
# – 定期创建新的全量备份
# – 监控增量备份状态
# – 建立备份链管理机制

5.3 备份恢复检查清单

#!/bin/bash
# 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

风哥提示:备份是数据库安全的最后一道防线。建立完善的备份策略,定期进行恢复演练,确保在灾难发生时能够快速恢复数据。from tidb视频:www.itpux.com

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息