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

tidb教程FG124-TiDB备份与恢复最佳实践生产实战

fgedu.net.cn

目录

一、基础概念

1.1 备份类型

  • 全量备份:备份整个数据库集群的数据
  • 增量备份:备份自上次备份以来的变更数据
  • 日志备份:备份TiDB的binlog日志

1.2 备份工具

  • BR(Backup & Restore):TiDB官方备份恢复工具,支持全量和增量备份
  • Dumpling:逻辑备份工具,支持导出SQL格式的数据
  • TiDB Lightning:高速导入工具,用于恢复Dumpling导出的数据

1.3 恢复类型

  • 全量恢复:使用全量备份恢复整个集群
  • 增量恢复:在全量备份的基础上应用增量备份
  • 点恢复:恢复到指定时间点的数据状态
  • 单库/表恢复:只恢复特定数据库或表的数据

二、规划建议

2.1 备份策略规划

  • 备份频率:根据数据重要性和变化频率确定备份频率
  • 备份保留期:根据业务需求和存储容量确定备份保留时间
  • 备份存储:选择安全、可靠的存储介质,如S3、NFS等
  • 备份验证:定期验证备份的可用性和完整性
  • 灾备方案:制定完善的灾难恢复计划

2.2 备份工具选择

  • BR工具:适用于全量备份和增量备份,备份速度快,恢复速度快
  • Dumpling:适用于逻辑备份,支持导出特定数据库或表,便于跨版本迁移
  • 混合使用:结合使用BR和Dumpling,满足不同场景的需求

2.3 恢复策略规划

  • 恢复时间目标(RTO):根据业务需求确定恢复时间目标
  • 恢复点目标(RPO):根据业务需求确定数据丢失容忍度
  • 恢复测试:定期进行恢复测试,确保备份的可用性
  • 恢复流程:制定详细的恢复流程和操作步骤

三、实施方案

3.1 使用BR工具备份

全量备份

# 备份到本地存储
tiup br backup full --pd "192.168.1.10:2379" --storage "local:///tidb/backup/full/20240409"

# 备份到S3存储
tiup br backup full --pd "192.168.1.10:2379" --storage "s3://tidb-backup/full/20240409?access-key=AKIAxxxx&secret-access-key=xxxx"
Full backup < BackupFull >: 
    Total regions: 1000
    Remote regions: 0
    Average backup speed: 100 MB/s
    Backup size: 10 GB
    Backup path: local:///tidb/backup/full/20240409
    Backup status: Success
    Duration: 1m30s

增量备份

# 基于上次全量备份创建增量备份
tiup br backup incremental --pd "192.168.1.10:2379" --storage "local:///tidb/backup/incremental/20240410" --last-backup "local:///tidb/backup/full/20240409"
Incremental backup < BackupIncremental >: 
    Total regions: 500
    Remote regions: 0
    Average backup speed: 80 MB/s
    Backup size: 2 GB
    Backup path: local:///tidb/backup/incremental/20240410风哥提示:
    Backup status: Success
    Duration: 30s

3.2 使用BR工具恢复

全量恢复

# 从本地存储恢复
tiup br restore full --pd "192.168.1.10:2379" --storage "local:///tidb/backup/full/20240409"

# 从S3存储恢复
tiup br restore full --pd "192.168.1.10:2379" --storage "s3://tidb-backup/full/20240409?access-key=AKIAxxxx&secret-access-key=xxxx"
Full restore < RestoreFull >: 
    Total regions: 1000
    Remote regions: 0
    Average restore speed: 120 MB/s
    Restore size: 10 GB
    Restore path: local:///tidb/backup/full/20240409
    Restore status: Success
    Duration: 1m15s

增量恢复

# 先恢复全量备份
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/20240410"

3.3 使用Dumpling备份

导出全库

# 导出全库
tiup dumpling -h 192.168.1.13 -P 4000 -u root -p root123 --output ./backup/dumpling/20240409
[2024/04/09 10:00:00] [INFO] [dump.go:100] dump database `fgedudb` started
[2024/04/09 10:00:05] [INFO] [dump.go:150] dump table `fgedu_users` started
[2024/04/09 10:00:10] [INFO] [dump.go:150] dump table `fgedu_orders` started
[2024/04/09 10:00:15] [INFO] [dump.go:200] dump database `fgedudb` completed
[2024/04/09 10:00:15] [INFO] [main.go:100] dump completed, total rows: 100000, total size: 500 MB, duration: 15s

导出特定数据库

# 导出特定数据库
tiup dumpling -h 192.168.1.13 -P 4000 -u root -p root123 -B fgedudb --output ./backup/dumpling/20240409

导出特定表

# 导出特定表
tiup dumpling -h 192.168.1.13 -P 4000 -u root -p root123 -B fgedudb -T fgedu_users,fgedu_orders --output ./backup/dumpling/20240409

3.4 使用TiDB Lightning恢复

恢复全库

# 配置文件 tidb-lightning.toml
[lightning]
backend = "local"
tmp-dir = "/tmp/tidb-lightning"

[mydumper]
source-dir = "./backup/dumpling/20240409"

[tidb]
host = "192.168.1.13"
port = 4000
user = "root"
password = "root123"
db-name = "fgedudb"

# 执行恢复
tiup tidb-lightning -config tidb-lightning.toml
[2024/04/09 11:00:00] [INFO] [main.go:100] TiDB Lightning started
[2024/04/09 11:00:05] [INFO] [mydumper.go:50] reading metadata
[2024/04/09 11:00:10] [INFO] [table.go:100] processing table `fgedu_users`
[2024/04/09 11:00:30] [INFO] [table.go:100] processing table `fgedu_orders`
[2024/04/09 11:01:00] [INFO] [main.go:150] TiDB Lightning completed, total rows: 100000, total size: 500 MB, duration: 1m

四、实战案例

4.1 企业级备份策略

场景:大型企业生产环境,需要制定完善的备份策略,确保数据安全。

步骤1:制定备份计划

# 全量备份:每天凌晨2点执行
0 2 * * * tiup br backup full --pd "192.168.1.10:2379" --storage "s3://tidb-backup/full/$(date +\%Y\%m\%d)" --log-file /tidb/log/backup-full-$(date +\%Y\%m\%d).log

# 增量备份:每小时执行一次
0 * * * * tiup br backup incremental --pd "192.168.1.10:2379" --storage "s3://tidb-backup/incremental/$(date +\%Y\%m\%d\%H)" --last-backup "s3://tidb-backup/full/$(date +\%Y\%m\%d)" --log-file /tidb/log/backup-incremental-$(date +\%Y\%m\%d\%H).log

# 逻辑备份:每周日执行一次
0 3 * * 0 tiup dumpling -h 192.168.1.13 -P 4000 -u root -p root123 --output s3://tidb-backup/dumpling/$(date +\%Y\%m\%d) --log-file /tidb/log/backup-dumpling-$(date +\%Y\%m\%d).log

学习交流加群风哥QQ113257174

步骤2:配置备份存储

# 创建S3存储桶
aws s3 mb s3://tidb-backup

# 配置存储生命周期
aws s3api put-bucket-lifecycle-configuration --bucket tidb-backup --lifecycle-configuration file://lifecycle.json

# lifecycle.json
{
  "Rules": [
    {
      "ID": "Delete old backups",
      "Status": "Enabled",
      "Filter": {
        "Prefix": "full/"
      },
      "Expiration": {
        "Days": 30
      }
    },
    {
      "ID": "Delete old incremental backups",
      "Status": "Enabled",
      "Filter": {
        "Prefix": "incremental/"
      },
      "Expiration": {
        "Days": 7
      }
    },
    {
      "ID": "Delete old dumpling backups",
      "Status": "Enabled",
      "Filter": {
        "Prefix": "dumpling/"
      },
      "Expiration": {
        "Days": 60
      }
    }
  ]
}

步骤3:验证备份

# 检查备份文件
aws s3 ls s3://tidb-backup/full/

# 验证备份完整性
tiup br validate --storage "s3://tidb-backup/full/20240409"
Validation result: Success
Backup size: 10 GB
Total regions: 1000
Backup files: 10

4.2 灾难恢复演练

场景:定期进行灾难恢复演练,确保备份的可用性和恢复流程的有效性。

步骤1:准备恢复环境

# 部署测试集群
tiup cluster deploy test-cluster v7.5.0 test-topology.yaml --user root -p
tiup cluster start test-cluster

步骤2:执行恢复操作

# 从全量备份恢复
tiup br restore full --pd "192.168.2.10:2379" --storage "s3://tidb-backup/full/20240409"

# 应用增量备份
tiup br restore incremental --pd "192.168.2.10:2379" --storage "s3://tidb-backup/incremental/2024040912"

# 验证恢复结果
mysql -h 192.168.2.13 -P 4000 -u root -p -e "SELECT COUNT(*) FROM fgedudb.fgedu_users;"
mysql -h 192.168.2.13 -P 4000 -u root -p -e "SELECT COUNT(*) FROM fgedudb.fgedu_orders;"
+----------+
| COUNT(*) |
+----------+
|    50000 |
+----------+

+----------+
| COUNT(*) |
+----------+
|   100000 |
+----------+

步骤3:记录恢复时间

# 记录恢复开始时间
start_time=$(date +%s)

# 执行恢复操作
tiup br restore full --pd "192.168.2.10:2379" --storage "s3://tidb-backup/full/20240409"

# 记录恢复结束时间
end_time=$(date +%s)

# 计算恢复时间
duration=$((end_time - start_time))
echo "恢复时间:$duration 秒"
恢复时间:450 秒

五、经验总结

5.1 备份最佳实践

  • 定期备份:根据数据重要性和变化频率制定合理的备份计划
  • 多重备份:使用不同的备份工具和存储介质
  • 异地备份:将备份存储在不同的地理位置
  • 备份验证:定期验证备份的可用性和完整性
  • 备份监控:监控备份过程,确保备份成功完成
  • 存储管理:合理管理备份存储空间,定期清理过期备份

5.2 恢复最佳实践

  • 定期演练:定期进行恢复测试,熟悉恢复流程
  • 恢复计划:制定详细的恢复计划和操作步骤
  • 恢复验证:恢复后验证数据的完整性和一致性
  • 恢复时间监控:记录恢复时间,确保满足RTO要求
  • 故障演练:模拟各种故障场景,测试恢复能力

5.3 常见问题与解决方案

问题 原因 解决方案
备份失败 网络问题、存储问题、权限问题 检查网络连接、存储状态、权限设置
恢复失败 备份文件损坏、版本不兼容、空间不足 验证备份完整性、使用兼容版本、确保足够空间
备份速度慢 网络带宽不足、存储性能差 优化网络环境、使用高性能存储
恢复速度慢 网络带宽不足、存储性能差 优化网络环境、使用高性能存储
备份占用空间大 数据量大、备份频率高 合理设置备份频率、使用增量备份、配置存储生命周期

5.4 备份与恢复检查清单

检查项 配置要求 状态
备份计划 制定合理的备份计划,包括全量和增量备份
备份存储 选择安全、可靠的存储介质
备份验证 定期验证备份的可用性和完整性
恢复测试 定期进行恢复测试
恢复计划 制定详细的恢复计划和操作步骤
监控告警 监控备份过程,设置告警
存储管理 合理管理备份存储空间
文档更新 及时更新备份与恢复文档

更多视频教程www.fgedu.net.cn

© 2024 TiDB数据库培训文档

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

联系我们

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

微信号:itpux-com

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