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