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

tidb教程FG129-TiDB备份与恢复高级实践

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

联系我们

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

微信号:itpux-com

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