fgedu.net.cn
目录
一、基础概念
1.1 备份与恢复定义
备份是指将数据库数据复制到安全存储位置的过程,恢复是指在数据丢失或损坏时将备份数据还原到数据库的过程。TiDB提供多种备份与恢复工具,支持不同场景的需求。
1.2 备份类型
- 全量备份:备份整个数据库的所有数据
- 增量备份:只备份自上次备份以来变化的数据
- 日志备份:备份事务日志,用于点恢复
- 表级备份:只备份特定表的数据
1.3 备份工具
- BR (Backup & Restore):TiDB官方的分布式备份恢复工具
- Dumpling:逻辑备份工具,适用于小数据量
- TiDB Lightning:高速数据导入工具
- TiCDC:变更数据捕获工具,可用于增量同步
二、规划建议
2.1 备份策略规划
- 备份频率:根据数据重要性和变化频率确定备份频率
- 备份类型:结合全量备份和增量备份
- 备份存储:选择安全可靠的存储介质
- 备份保留期:根据业务需求确定备份保留时间
- 恢复测试:定期测试备份的可恢复性
2.2 存储规划
- 本地存储:适用于小规模部署
- NFS:网络文件系统,适用于中小规模部署
- S3:对象存储,适用于大规模部署
- 其他云存储:如阿里云OSS、腾讯云COS等
2.3 恢复策略规划
- 恢复时间目标 (RTO):从数据丢失到恢复完成的时间
- 恢复点目标 (RPO):允许丢失的数据量
- 恢复测试:定期进行恢复演练
- 故障切换:制定故障切换流程
三、实施方案
3.1 BR全量备份与恢复
全量备份到本地存储
# 执行全量备份
tiup br backup full --pd "192.168.1.10:2379" --storage "local:///tidb/backup/full/20240409"
Starting backup [2024-04-09 10:00:00]... [2024-04-09 10:00:00] [info] [backup.go:270] backup meta is saved to /tidb/backup/full/20240409/backupmeta [2024-04-09 10:05:00] [info] [backup.go:275] backup stats: total regions: 1000, total kvs: 1000000, total size: 1GB [2024-04-09 10:05:00] [info] [backup.go:280] backup successfully, total time: 5m0s
全量备份到S3
# 执行全量备份到S3
tiup br backup full --pd "192.168.1.10:2379" --storage "s3://tidb-backup/full/20240409?access-key=AKIA...&secret-access-key=...®ion=us-east-1"
Starting backup [2024-04-09 10:10:00]... [2024-04-09 10:10:00] [info] [backup.go:270] backup meta is saved to s3://tidb-backup/full/20240409/backupmeta [2024-04-09 10:15:00] [info] [backup.go:275] backup stats: total regions: 1000, total kvs: 1000000, total size: 1GB [2024-04-09 10:15:00] [info] [backup.go:280] backup successfully, total time: 5m0s
全量恢复
# 执行全量恢复
tiup br restore full --pd "192.168.1.10:2379" --storage "local:///tidb/backup/full/20240409"
Starting restore [2024-04-09 11:00:00]... [2024-04-09 11:00:00] [info] [restore.go:270] restore meta is loaded from /tidb/backup/full/20240409/backupmeta [2024-04-09 11:05:00] [info] [restore.go:275] restore stats: total regions: 1000, total kvs: 1000000, total size: 1GB [2024-04-09 11:05:00] [info] [restore.go:280] restore successfully, total time: 5m0s
风哥提示:
3.2 BR增量备份与恢复
增量备份
# 执行增量备份
tiup br backup incremental --pd "192.168.1.10:2379" --storage "local:///tidb/backup/incremental/20240409" --last-backup "local:///tidb/backup/full/20240409"
Starting incremental backup [2024-04-09 12:00:00]... [2024-04-09 12:00:00] [info] [backup.go:270] backup meta is saved to /tidb/backup/incremental/20240409/backupmeta [2024-04-09 12:01:00] [info] [backup.go:275] backup stats: total regions: 100, total kvs: 100000, total size: 100MB [2024-04-09 12:01:00] [info] [backup.go:280] backup successfully, total time: 1m0s
增量恢复
# 先恢复全量备份
tiup br restore full --pd "192.168.1.10:2379" --storage "local:///tidb/backup/full/20240409"
# 再恢复增量备份
tiup br restore incremental --pd "192.168.1.10:2379" --storage "local:///tidb/backup/incremental/20240409"
Starting restore [2024-04-09 13:00:00]... [2024-04-09 13:00:00] [info] [restore.go:270] restore meta is loaded from /tidb/backup/full/20240409/backupmeta [2024-04-09 13:05:00] [info] [restore.go:275] restore stats: total regions: 1000, total kvs: 1000000, total size: 1GB [2024-04-09 13:05:00] [info] [restore.go:280] restore successfully, total time: 5m0s Starting incremental restore [2024-04-09 13:06:00]... [2024-04-09 13:06:00] [info] [restore.go:270] restore meta is loaded from /tidb/backup/incremental/20240409/backupmeta [2024-04-09 13:06:30] [info] [restore.go:275] restore stats: total regions: 100, total kvs: 100000, total size: 100MB [2024-04-09 13:06:30] [info] [restore.go:280] restore successfully, total time: 30s
3.3 Dumpling逻辑备份与恢复
逻辑备份
# 执行逻辑备份
tiup dumpling -h 192.168.1.13 -P 4000 -u root -p root123 -B fgedudb -o /tidb/backup/dumpling/20240409
[2024-04-09 14:00:00] [info] [main.go:100] dumpling v7.5.0 [2024-04-09 14:00:00] [info] [main.go:101] connecting to 192.168.1.13:4000 [2024-04-09 14:00:01] [info] [main.go:102] dumping database: fgedudb [2024-04-09 14:00:30] [info] [main.go:103] dump completed, total rows: 1000000, total size: 500MB, total time: 30s
使用TiDB Lightning恢复
# 配置tidb-lightning.toml
[lightning]
backend = "tidb"
table-concurrency = 16
index-concurrency = 8
[mydumper]
data-source-dir = "/tidb/backup/dumpling/20240409"
[tidb]
host = "192.168.1.13"
port = 4000
user = "root"
password = "root123"
schema = "fgedudb"
# 执行恢复
tiup tidb-lightning -config tidb-lightning.toml
[2024-04-09 15:00:00] [info] [main.go:100] tidb-lightning v7.5.0 [2024-04-09 15:00:00] [info] [main.go:101] reading schema files [2024-04-09 15:00:01] [info] [main.go:102] starting table restore [2024-04-09 15:05:00] [info] [main.go:103] restore completed, total tables: 10, total rows: 1000000, total size: 500MB, total time: 5m0s
3.4 表级备份与恢复
表级备份
# 执行表级备份
tiup br backup table --pd "192.168.1.10:2379" --storage "local:///tidb/backup/table/20240409" --tables "fgedudb.fgedu_users,fgedudb.fgedu_orders"
Starting backup [2024-04-09 16:00:00]... [2024-04-09 16:00:00] [info] [backup.go:270] backup meta is saved to /tidb/backup/table/20240409/backupmeta [2024-04-09 16:01:00] [info] [backup.go:275] backup stats: total regions: 200, total kvs: 200000, total size: 200MB [2024-04-09 16:01:00] [info] [backup.go:280] backup successfully, total time: 1m0s
表级恢复
# 执行表级恢复
tiup br restore table --pd "192.168.1.10:2379" --storage "local:///tidb/backup/table/20240409" --tables "fgedudb.fgedu_users,fgedudb.fgedu_orders"
Starting restore [2024-04-09 17:00:00]... [2024-04-09 17:00:00] [info] [restore.go:270] restore meta is loaded from /tidb/backup/table/20240409/backupmeta [2024-04-09 17:01:00] [info] [restore.go:275] restore stats: total regions: 200, total kvs: 200000, total size: 200MB [2024-04-09 17:01:00] [info] [restore.go:280] restore successfully, total time: 1m0s
四、实战案例
4.1 生产环境备份策略
场景:企业生产环境需要制定完善的备份策略,确保数据安全。
步骤1:制定备份计划
# 备份计划
1. 每日凌晨2:00执行全量备份到S3
2. 每小时执行增量备份到S3
3. 全量备份保留30天,增量备份保留7天学习交流加群风哥QQ113257174
4. 每周进行一次恢复测试
步骤2:编写备份脚本
#!/bin/bash
# 全量备份脚本
BACKUP_DATE=$(date +%Y%m%d)
S3_BUCKET="s3://tidb-backup"
PD_ADDR="192.168.1.10:2379"
# 执行全量备份
tiup br backup full --pd "$PD_ADDR" --storage "$S3_BUCKET/full/$BACKUP_DATE"
# 清理过期备份
aws s3 rm --recursive "$S3_BUCKET/full/$(date -d '30 days ago' +%Y%m%d)"
# 增量备份脚本
BACKUP_HOUR=$(date +%Y%m%d%H)
LAST_BACKUP=$(aws s3 ls "$S3_BUCKET/full/" | sort -r | head -1 | awk '{print $2}')
# 执行增量备份
tiup br backup incremental --pd "$PD_ADDR" --storage "$S3_BUCKET/incremental/$BACKUP_HOUR" --last-backup "$S3_BUCKET/full/$LAST_BACKUP"
# 清理过期增量备份
aws s3 rm --recursive "$S3_BUCKET/incremental/$(date -d '7 days ago' +%Y%m%d)"
步骤3:设置定时任务
# 编辑crontab
crontab -e
# 添加定时任务
# 每日凌晨2:00执行全量备份
0 2 * * * /path/to/full_backup.sh >> /var/log/tidb_backup.log 2>&1
# 每小时执行增量备份
0 * * * * /path/to/incremental_backup.sh >> /var/log/tidb_backup.log 2>&1
# 每周日凌晨3:00执行恢复测试
0 3 * * 0 /path/to/restore_test.sh >> /var/log/tidb_restore_test.log 2>&1
4.2 灾难恢复演练
场景:企业需要定期进行灾难恢复演练,确保在数据丢失时能够快速恢复。
步骤1:准备恢复环境
# 部署测试环境
# 使用tiup部署一个小型TiDB集群作为测试环境
tiup cluster deploy test-tidb v7.5.0 test-tidb-topology.yaml --user root -p
tiup cluster start test-tidb
步骤2:执行恢复测试
# 从S3恢复全量备份
tiup br restore full --pd "192.168.1.20:2379" --storage "s3://tidb-backup/full/20240409?access-key=AKIA...&secret-access-key=...®ion=us-east-1"
# 恢复最近的增量备份
LATEST_INCREMENTAL=$(aws s3 ls "s3://tidb-backup/incremental/" | sort -r | head -1 | awk '{print $2}')
tiup br restore incremental --pd "192.168.1.20:2379" --storage "s3://tidb-backup/incremental/$LATEST_INCREMENTAL?access-key=AKIA...&secret-access-key=...®ion=us-east-1"
# 验证数据
mysql -h 192.168.1.23 -P 4000 -u root -p root123 -e "SELECT COUNT(*) FROM fgedudb.fgedu_users; SELECT COUNT(*) FROM fgedudb.fgedu_orders;"
+----------+ | COUNT(*) | +----------+ | 100000 | +----------+ +----------+ | COUNT(*) | +----------+ | 500000 | +----------+
步骤3:记录恢复时间
# 记录恢复时间
# 全量恢复时间:5分钟
# 增量恢复时间:30秒
# 总恢复时间:5分30秒
# 验证RTO和RPO
# RTO:5分30秒,符合业务要求(目标10分钟)
# RPO:1小时,符合业务要求(目标2小时)
五、经验总结
5.1 备份与恢复最佳实践
- 制定完善的备份策略:根据业务需求制定合理的备份频率和保留期
- 使用多种备份方式:结合全量备份和增量备份
- 选择可靠的存储介质:使用S3等云存储或磁带库等离线存储
- 定期测试备份:确保备份可恢复
- 监控备份过程:及时发现备份失败
- 制定恢复计划:明确恢复流程和责任
- 保持备份文档更新:记录备份策略和恢复流程
5.2 性能优化建议
- 调整BR参数:根据集群规模调整并发数和批次大小
- 使用并行备份:利用BR的并行能力提高备份速度
- 选择合适的备份时间:在业务低峰期执行备份
- 优化存储性能:使用高性能存储介质
- 压缩备份数据:减少存储开销
- 使用增量备份:减少备份时间和存储开销
5.3 常见问题与解决方案
| 问题 | 原因 | 解决方案 |
|---|---|---|
| 备份失败 | 网络中断、存储故障、权限问题 | 检查网络连接,确保存储可用,验证权限 |
| 恢复失败 | 备份文件损坏、版本不兼容 | 验证备份文件完整性,使用相同版本的BR |
| 备份速度慢 | 网络带宽不足、存储性能差 | 增加网络带宽,使用高性能存储 |
| 恢复时间长 | 数据量大、存储性能差 | 使用增量备份,优化存储性能 |
| 备份占用空间大 | 未使用压缩、备份频率过高 | 启用压缩,调整备份频率 |
5.4 备份与恢复检查清单
| 检查项 | 配置要求 | 状态 |
|---|---|---|
| 备份策略 | 制定合理的备份频率和保留期 | □ |
| 备份存储 | 选择可靠的存储介质 | □ |
| 备份工具 | 正确配置BR、Dumpling等工具 | □ |
| 定时任务 | 设置自动备份定时任务 | □ |
| 监控告警 | 监控备份过程,设置告警 | □ |
| 恢复测试 | 定期进行恢复测试 | □ |
| 文档更新 | 及时更新备份与恢复文档 | □ |
| 灾难恢复计划 | 制定详细的灾难恢复计划 | □ |
更多视频教程www.fgedu.net.cn
© 2024 TiDB数据库培训文档
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
