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,节假日休息