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 backupsuccess 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 backupsuccess 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 restoresuccess 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 restoresuccess 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 backupsuccess 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 backupsuccess 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
