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

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

fgedu.net.cn

目录

一、基础概念

1.1 备份定义

备份是指将数据库中的数据复制到安全的存储位置,以防止数据丢失。TiDB的备份包括全量备份和增量备份。

1.2 恢复定义

恢复是指将备份的数据还原到数据库中,以恢复系统的正常运行。TiDB的恢复包括全量恢复和增量恢复。

1.3 备份工具

  • BR(Backup & Restore):TiDB的备份恢复工具,支持全量备份和增量备份。
  • Dumpling:TiDB的逻辑备份工具,支持导出数据为SQL或CSV格式。
  • TiDB Binlog:TiDB的binlog工具,用于记录数据变更,支持增量备份和数据同步。
  • TiCDC:TiDB的变更数据捕获工具,用于捕获数据变更,支持增量备份和数据同步。

1.4 备份策略

  • 全量备份:备份所有数据,适用于初始备份和定期备份。
  • 增量备份:备份自上次备份以来的变更数据,适用于日常备份。
  • 差异备份:备份自上次全量备份以来的变更数据,适用于介于全量和增量之间的备份。

1.5 恢复策略

  • 全量恢复:从全量备份中恢复数据。
  • 增量恢复:在全量恢复的基础上,应用增量备份的数据。
  • 时间点恢复(PITR):恢复到指定的时间点。

二、规划建议

2.1 备份策略规划

  • 备份频率:根据业务需求和数据变更频率,确定备份频率。
  • 备份类型:根据数据重要性和恢复时间要求,选择合适的备份类型。
  • 备份存储:选择安全、可靠的存储介质,如本地磁盘、NAS、云存储等。
  • 备份保留期:根据业务需求和法规要求,确定备份保留期。

2.2 恢复策略规划

  • 恢复时间目标(RTO):确定从故障到恢复的最大允许时间。
  • 恢复点目标(RPO):确定从故障到恢复的最大允许数据丢失。
  • 恢复测试:定期进行恢复测试,确保备份的可用性。
  • 恢复演练:定期进行恢复演练,提高恢复效率。

2.3 存储规划

  • 存储容量:根据备份数据量,预留足够的存储空间。
  • 存储类型:选择高性能、可靠的存储类型。
  • 存储位置:选择安全的存储位置,最好与生产环境分离。
  • 存储加密:加密存储备份数据,确保数据安全。

2.4 监控与告警

  • 备份监控:监控备份任务的执行状态。
  • 恢复监控:监控恢复任务的执行状态。
  • 存储监控:监控备份存储的使用情况。
  • 告警配置:配置告警规则,及时发现和解决问题。

三、实施方案

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=AKIA...&secret-access-key=...®ion=us-east-1"

# 查看备份状态
tiup br status --storage "local:///tidb/backup/full/20240409"
Full backup  success summary:
- Backup took 1m23s风哥提示:
- Total backup size: 102.4 MB
- Backup files: 10

增量备份

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

# 增量备份到S3存储
tiup br backup incremental --pd "192.168.1.10:2379" --storage "s3://tidb-backup/incremental/20240409?access-key=AKIA...&secret-access-key=...®ion=us-east-1" --last-backup "s3://tidb-backup/full/20240409?access-key=AKIA...&secret-access-key=...®ion=us-east-1"

# 查看备份状态
tiup br status --storage "local:///tidb/backup/incremental/20240409"
Incremental backup  success summary:
- Backup took 30s
- Total backup size: 10.2 MB
- Backup files: 2

全量恢复

# 全量恢复从本地存储
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=AKIA...&secret-access-key=...®ion=us-east-1"

# 查看恢复状态
tiup br status --storage "local:///tidb/backup/full/20240409"
Full restore  success summary:
- Restore took 1m45s
- Total restore size: 102.4 MB
- Restore files: 10

增量恢复

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

# 增量恢复从S3存储
tiup br restore incremental --pd "192.168.1.10:2379" --storage "s3://tidb-backup/incremental/20240409?access-key=AKIA...&secret-access-key=...®ion=us-east-1"

# 查看恢复状态
tiup br status --storage "local:///tidb/backup/incremental/20240409"
Incremental restore  success summary:
- Restore took 45s
- Total restore size: 10.2 MB
- Restore files: 2

3.2 Dumpling工具备份与恢复

逻辑备份

# 导出数据为SQL格式
tiup dumpling -h 192.168.1.13 -P 4000 -u root -p root123 -B fgedudb -o /tidb/backup/dumpling/20240409

# 导出数据为CSV格式
tiup dumpling -h 192.168.1.13 -P 4000 -u root -p root123 -B fgedudb --format csv -o /tidb/backup/dumpling/20240409-csv

# 导出指定表
tiup dumpling -h 192.168.1.13 -P 4000 -u root -p root123 -B fgedudb -T fgedu_users,fgedu_orders -o /tidb/backup/dumpling/20240409-tables
Dumping data from fgedudb.fgedu_users...
Dumping data from fgedudb.fgedu_orders...
Dumping completed successfully!

逻辑恢复

# 使用lightning恢复数据
tiup lightning --backend tidb --host 192.168.1.13 --port 4000 --user root --password root123 --db fgedudb --table fgedu_users /tidb/backup/dumpling/20240409

# 使用mysql客户端恢复数据
mysql -h 192.168.1.13 -P 4000 -u root -p root123 fgedudb < /tidb/backup/dumpling/20240409/fgedudb.fgedu_users.sql
2024-04-09 10:00:00.000 INFO [lightning] starting restore process
2024-04-09 10:00:15.000 INFO [lightning] restore completed successfully!

3.3 备份自动化

使用crontab自动化备份

# 编辑crontab
crontab -e

# 添加全量备份任务(每周日凌晨2点执行)
0 2 * * 0 /bin/bash /tidb/scripts/backup-full.sh

# 添加增量备份任务(每天凌晨2点执行)学习交流加群风哥QQ113257174
0 2 * * 1-6 /bin/bash /tidb/scripts/backup-incremental.sh

# 查看crontab任务
crontab -l

备份脚本示例

# 全量备份脚本
cat > /tidb/scripts/backup-full.sh << EOF
#!/bin/bash

BACKUP_DIR="/tidb/backup/full/$(date +%Y%m%d)"
LOG_FILE="/tidb/log/backup-full-$(date +%Y%m%d).log"

mkdir -p $BACKUP_DIR

# 执行全量备份
tiup br backup full --pd "192.168.1.10:2379" --storage "local://$BACKUP_DIR" > $LOG_FILE 2>&1

# 检查备份结果
if grep -q "success" $LOG_FILE; then
    echo "Full backup completed successfully"
else
    echo "Full backup failed"
    # 发送告警
    # mail -s "TiDB Full Backup Failed" admin@example.com < $LOG_FILE
fi

# 清理过期备份(保留30天)
find /tidb/backup/full -type d -mtime +30 -exec rm -rf {} \;
EOF

# 增量备份脚本
cat > /tidb/scripts/backup-incremental.sh << EOF
#!/bin/bash

# 查找最新的全量备份
LATEST_FULL_BACKUP=$(ls -d /tidb/backup/full/* | sort -r | head -n 1)
BACKUP_DIR="/tidb/backup/incremental/$(date +%Y%m%d)"
LOG_FILE="/tidb/log/backup-incremental-$(date +%Y%m%d).log"

mkdir -p $BACKUP_DIR

# 执行增量备份
tiup br backup incremental --pd "192.168.1.10:2379" --storage "local://$BACKUP_DIR" --last-backup "local://$LATEST_FULL_BACKUP" > $LOG_FILE 2>&1

# 检查备份结果
if grep -q "success" $LOG_FILE; then
    echo "Incremental backup completed successfully"
else
    echo "Incremental backup failed"
    # 发送告警
    # mail -s "TiDB Incremental Backup Failed" admin@example.com < $LOG_FILE
fi

# 清理过期备份(保留7天)
find /tidb/backup/incremental -type d -mtime +7 -exec rm -rf {} \;
EOF

# 赋予执行权限
chmod +x /tidb/scripts/backup-full.sh
chmod +x /tidb/scripts/backup-incremental.sh

3.4 监控与告警

配置Prometheus监控

# 编辑Prometheus配置文件
vi /etc/prometheus/prometheus.yml

# 添加TiDB备份监控
scrape_configs:
  - job_name: 'tidb-backup'
    static_configs:
      - targets: ['192.168.1.10:9090']
    metrics_path: /metrics

# 重启Prometheus
systemctl restart prometheus

# 配置Grafana仪表板
# 导入TiDB备份监控仪表板

配置告警规则

# 编辑告警规则文件
vi /etc/prometheus/rules/tidb-backup.rules.yml

# 添加告警规则
groups:
- name: tidb-backup-alerts
  rules:
  - alert: TiDBBackupFailed
    expr: tidb_backup_failed_total > 0
    for: 5m
    labels:
      severity: critical
    annotations:
      summary: "TiDB Backup Failed"
      description: "TiDB backup failed on {{ $labels.instance }}"

  - alert: TiDBBackupStorageLow
    expr: (node_filesystem_size_bytes{mountpoint="/tidb/backup"} - node_filesystem_free_bytes{mountpoint="/tidb/backup"}) / node_filesystem_size_bytes{mountpoint="/tidb/backup"} > 0.9
    for: 5m
    labels:
      severity: warning
    annotations:
      summary: "TiDB Backup Storage Low"
      description: "TiDB backup storage usage on {{ $labels.instance }} is above 90%"

# 重启Prometheus
systemctl restart prometheus

四、实战案例

4.1 生产环境备份与恢复

场景:企业需要为TiDB生产环境配置备份与恢复策略,确保数据安全。

步骤1:配置全量备份

# 执行全量备份
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"

# 查看备份状态
tiup br status --storage "s3://tidb-backup/full/20240409?access-key=AKIA...&secret-access-key=...®ion=us-east-1"
Full backup  success summary:
- Backup took 1m23s
- Total backup size: 102.4 MB
- Backup files: 10

步骤2:配置增量备份

# 执行增量备份
tiup br backup incremental --pd "192.168.1.10:2379" --storage "s3://tidb-backup/incremental/20240410?access-key=AKIA...&secret-access-key=...®ion=us-east-1" --last-backup "s3://tidb-backup/full/20240409?access-key=AKIA...&secret-access-key=...®ion=us-east-1"

# 查看备份状态
tiup br status --storage "s3://tidb-backup/incremental/20240410?access-key=AKIA...&secret-access-key=...®ion=us-east-1"
Incremental backup  success summary:
- Backup took 30s
- Total backup size: 10.2 MB
- Backup files: 2

步骤3:配置自动化备份

# 编辑crontab
crontab -e

# 添加全量备份任务(每周日凌晨2点执行)
0 2 * * 0 /bin/bash /tidb/scripts/backup-full.sh

# 添加增量备份任务(每天凌晨2点执行)
0 2 * * 1-6 /bin/bash /tidb/scripts/backup-incremental.sh

步骤4:恢复测试

# 模拟数据丢失
DELETE FROM fgedu_users WHERE id > 5;

# 执行全量恢复
tiup br restore full --pd "192.168.1.10:2379" --storage "s3://tidb-backup/full/20240409?access-key=AKIA...&secret-access-key=...®ion=us-east-1"

# 执行增量恢复
tiup br restore incremental --pd "192.168.1.10:2379" --storage "s3://tidb-backup/incremental/20240410?access-key=AKIA...&secret-access-key=...®ion=us-east-1"

# 验证数据恢复
SELECT * FROM fgedu_users;
+----+----------+---------------------+-----+---------------------+
| id | username | email               | age | created_at          |
+----+----------+---------------------+-----+---------------------+
|  1 | admin    | admin@example.com   |  34 | 2024-04-09 10:00:00 |
|  2 | user1    | user1@example.com   |  25 | 2024-04-09 10:00:00 |
|  3 | user2    | user2@example.com   |  26 | 2024-04-09 10:00:00 |
|  4 | user3    | user3@example.com   |  27 | 2024-04-09 10:00:00 |
|  5 | user4    | user4@example.com   |  28 | 2024-04-09 10:00:00 |
|  6 | user5    | user5@example.com   |  29 | 2024-04-10 10:00:00 |
|  7 | user6    | user6@example.com   |  30 | 2024-04-10 10:00:00 |
+----+----------+---------------------+-----+---------------------+
7 rows in set (0.01 sec)

4.2 时间点恢复(PITR)

场景:企业需要将TiDB数据库恢复到指定的时间点,以恢复误操作导致的数据丢失。

步骤1:准备备份

# 执行全量备份
tiup br backup full --pd "192.168.1.10:2379" --storage "local:///tidb/backup/full/20240409"

# 执行增量备份
tiup br backup incremental --pd "192.168.1.10:2379" --storage "local:///tidb/backup/incremental/20240409-1200" --last-backup "local:///tidb/backup/full/20240409"

# 模拟误操作
DELETE FROM fgedu_users WHERE id > 3;

# 查看当前数据
SELECT * FROM fgedu_users;
+----+----------+---------------------+-----+---------------------+
| id | username | email               | age | created_at          |
+----+----------+---------------------+-----+---------------------+
|  1 | admin    | admin@example.com   |  34 | 2024-04-09 10:00:00 |
|  2 | user1    | user1@example.com   |  25 | 2024-04-09 10:00:00 |
|  3 | user2    | user2@example.com   |  26 | 2024-04-09 10:00:00 |
+----+----------+---------------------+-----+---------------------+
3 rows in set (0.01 sec)

步骤2:执行时间点恢复

# 执行时间点恢复
tiup br restore full --pd "192.168.1.10:2379" --storage "local:///tidb/backup/full/20240409" --restore-ts "2024-04-09 11:59:59"

# 验证数据恢复
SELECT * FROM fgedu_users;
+----+----------+---------------------+-----+---------------------+
| id | username | email               | age | created_at          |
+----+----------+---------------------+-----+---------------------+
|  1 | admin    | admin@example.com   |  34 | 2024-04-09 10:00:00 |
|  2 | user1    | user1@example.com   |  25 | 2024-04-09 10:00:00 |
|  3 | user2    | user2@example.com   |  26 | 2024-04-09 10:00:00 |
|  4 | user3    | user3@example.com   |  27 | 2024-04-09 10:00:00 |
|  5 | user4    | user4@example.com   |  28 | 2024-04-09 10:00:00 |
+----+----------+---------------------+-----+---------------------+
5 rows in set (0.01 sec)

五、经验总结

5.1 备份与恢复最佳实践

  • 定期备份:根据业务需求,定期执行全量备份和增量备份。
  • 多存储介质:将备份数据存储在多个介质上,确保数据安全。
  • 备份验证:定期验证备份的可用性,确保备份数据可以正常恢复。
  • 恢复测试:定期进行恢复测试,提高恢复效率。
  • 自动化备份:使用自动化工具,确保备份任务的定时执行。
  • 监控与告警:配置监控和告警,及时发现和解决备份问题。
  • 文档记录:记录备份和恢复的流程,便于操作和培训。
  • 灾备演练:定期进行灾备演练,提高应对灾难的能力。

5.2 常见问题与解决方案

问题 原因 解决方案
备份失败 存储不足,网络问题,权限不足 检查存储空间,网络连接,权限设置
恢复失败 备份数据损坏,版本不兼容,权限不足 检查备份数据完整性,使用兼容版本,检查权限设置
备份时间过长 数据量过大,网络带宽不足 增加网络带宽,使用增量备份,优化备份策略
恢复时间过长 数据量过大,存储性能不足 使用高性能存储,优化恢复策略
备份数据丢失 存储故障,自然灾害 使用多存储介质,异地备份

5.3 备份与恢复检查清单

检查项 配置要求 状态
备份策略 根据业务需求,配置合适的备份策略
备份存储 选择安全、可靠的存储介质
自动化备份 配置自动化备份任务
备份验证 定期验证备份的可用性
恢复测试 定期进行恢复测试
监控与告警 配置监控和告警,及时发现和解决问题
文档记录 记录备份和恢复的流程
灾备演练 定期进行灾备演练

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

© 2024 TiDB数据库培训文档

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

联系我们

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

微信号:itpux-com

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