fgedu.net.cn
目录
一、基础概念
1.1 备份定义
备份是指将数据库的数据和结构复制到安全的存储位置,以便在数据丢失或损坏时进行恢复。TiDB支持多种备份方式,包括全量备份、增量备份和表级备份。
1.2 恢复定义
恢复是指将备份的数据和结构还原到数据库中,以恢复数据库的正常运行。TiDB支持多种恢复方式,包括全量恢复、增量恢复和表级恢复。
1.3 备份工具
- BR(Backup & Restore):TiDB的备份恢复工具,支持全量备份、增量备份和表级备份。
- Dumpling:TiDB的逻辑备份工具,支持导出数据为SQL或CSV格式。
- TiDB Lightning:TiDB的导入工具,用于快速导入数据。
1.4 备份存储
- 本地存储:将备份存储在本地文件系统中。
- 对象存储:将备份存储在对象存储服务中,如S3、OSS、GCS等。
- NFS存储:将备份存储在NFS共享存储中。
二、规划建议
2.1 备份策略
- 全量备份:定期执行全量备份,如每天或每周。
- 增量备份:在全量备份之间执行增量备份,如每小时。
- 表级备份:对重要表执行单独备份。
2.2 存储规划
- 存储容量:根据数据量规划存储容量。
- 存储类型:选择可靠的存储类型,如对象存储。
- 存储位置:选择地理位置不同的存储位置,防止单点故障。
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=AK...&secret-access-key=SK...®ion=us-east-1"
# OSS存储备份
tiup br backup full --pd "192.168.1.10:2379" --storage "s3://tidb-backup/full/20240409?access-key=AK...&secret-access-key=SK...&endpoint=http://oss-cn-hangzhou.aliyuncs.com"
# 查看备份状态
tiup br validate --storage "local:///tidb/backup/full/20240409"
Full backupsuccess, total backup size: 1.2GB, take 5m30s
增量备份
# 执行增量备份
tiup br backup incremental --pd "192.168.1.10:2379" --storage "local:///tidb/backup/incremental/20240409" --last-backup "local:///tidb/backup/full/20240409"
# 查看备份状态
tiup br validate --storage "local:///tidb/backup/incremental/20240409"
Incremental backupsuccess, total backup size: 100MB, take 1m15s
风哥提示:
表级备份
# 执行表级备份
tiup br backup table --pd "192.168.1.10:2379" --storage "local:///tidb/backup/table/20240409" --db fgedudb --table fgedu_users
# 查看备份状态
tiup br validate --storage "local:///tidb/backup/table/20240409"
Table backupsuccess, total backup size: 50MB, take 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=AK...&secret-access-key=SK...®ion=us-east-1"
# 查看恢复状态
tiup br validate --storage "local:///tidb/backup/full/20240409"
Full restoresuccess, total restore size: 1.2GB, take 8m45s
增量恢复
# 执行增量恢复
tiup br restore incremental --pd "192.168.1.10:2379" --storage "local:///tidb/backup/incremental/20240409"
# 查看恢复状态
tiup br validate --storage "local:///tidb/backup/incremental/20240409"
Incremental restoresuccess, total restore size: 100MB, take 2m30s
表级恢复
# 执行表级恢复
tiup br restore table --pd "192.168.1.10:2379" --storage "local:///tidb/backup/table/20240409" --db fgedudb --table fgedu_users
# 查看恢复状态
tiup br validate --storage "local:///tidb/backup/table/20240409"
Table restoresuccess, total restore size: 50MB, take 1m15s
3.3 使用Dumpling工具备份
导出数据为SQL格式
# 导出全库
tiup dumpling -h 192.168.1.13 -P 4000 -u root -p root123 -B fgedudb -o /tidb/backup/dumpling/20240409
# 导出特定表
tiup dumpling -h 192.168.1.13 -P 4000 -u root -p root123 -B fgedudb -T fgedu_users -o /tidb/backup/dumpling/20240409
# 查看导出文件
ls -la /tidb/backup/dumpling/20240409
total 102400 -rw-r--r-- 1 root root 104857600 Apr 9 10:00 fgedudb.fgedu_users.sql
使用TiDB Lightning导入数据
# 配置TiDB Lightning
cat > tidb-lightning.toml << EOF
[lightning]
# 日志
level = "info"
[tikv-importer]
# 导入模式
backend = "local"
# 本地临时存储
local = "/tidb/tmp"
[mydumper]
# 数据源目录
data-source-dir = "/tidb/backup/dumpling/20240409"
[tidb]
# TiDB连接信息
host = "192.168.1.13"
port = 4000
user = "root"
password = "root123"
# 表架构信息临时存储数据库
schema = "fgedudb"
EOF
# 执行导入
tiup tidb-lightning -config tidb-lightning.toml
# 查看导入状态
tiup tidb-lightning --check-requirements
tidb lightning import success, total rows: 100000, take 5m30s
3.4 备份自动化
使用crontab定期执行备份
学习交流加群风哥QQ113257174
# 编辑crontab
crontab -e
# 添加全量备份任务(每天凌晨2点执行)
0 2 * * * tiup br backup full --pd "192.168.1.10:2379" --storage "s3://tidb-backup/full/$(date +\%Y\%m\%d)" --access-key AK... --secret-access-key SK...
# 添加增量备份任务(每小时执行)
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)" --access-key AK... --secret-access-key SK...
# 查看crontab任务
crontab -l
使用脚本执行备份
# 创建备份脚本
cat > backup.sh << EOF
#!/bin/bash
# 配置
PD_ADDR="192.168.1.10:2379"
STORAGE="s3://tidb-backup"
ACCESS_KEY="AK..."
SECRET_KEY="SK..."
# 全量备份
FULL_BACKUP_DIR="${STORAGE}/full/$(date +%Y%m%d)"
tiup br backup full --pd "${PD_ADDR}" --storage "${FULL_BACKUP_DIR}?access-key=${ACCESS_KEY}&secret-access-key=${SECRET_KEY}"
# 增量备份
INCREMENTAL_BACKUP_DIR="${STORAGE}/incremental/$(date +%Y%m%d-%H)"
tiup br backup incremental --pd "${PD_ADDR}" --storage "${INCREMENTAL_BACKUP_DIR}?access-key=${ACCESS_KEY}&secret-access-key=${SECRET_KEY}" --last-backup "${FULL_BACKUP_DIR}"
# 清理过期备份
find ${STORAGE}/full -name "*" -mtime +7 -delete
find ${STORAGE}/incremental -name "*" -mtime +7 -delete
EOF
# 赋予执行权限
chmod +x backup.sh
# 执行备份
./backup.sh
3.5 备份监控
使用Prometheus监控备份
# 配置Prometheus告警规则
cat > backup-alerts.yaml << EOF
groups:
- name: backup-alerts
rules:
- alert: BackupFailed
expr: tidb_backup_failures_total > 0
for: 5m
labels:
severity: critical
annotations:
summary: "Backup failed"
description: "Backup has failed for more than 5 minutes"
- alert: BackupAge
expr: time() - tidb_last_backup_timestamp_seconds > 86400
for: 5m
labels:
severity: warning
annotations:
summary: "Backup too old"
description: "Last backup was more than 24 hours ago"
EOF
# 重启Prometheus
systemctl restart prometheus
使用TiDB Dashboard监控备份
# 访问TiDB Dashboard
# 地址:http://tidb-server:10080/dashboard
# 查看备份历史
# 在TiDB Dashboard > 备份恢复 > 备份历史
# 查看恢复历史
# 在TiDB Dashboard > 备份恢复 > 恢复历史
四、实战案例
4.1 生产环境备份策略
场景:企业需要在生产环境中制定完善的备份策略,确保数据安全。
步骤1:制定备份计划
# 备份计划
# 1. 全量备份:每天凌晨2点执行
# 2. 增量备份:每小时执行
# 3. 表级备份:每周执行一次重要表的备份
# 4. 备份存储:使用S3对象存储
# 5. 备份保留期:全量备份保留7天,增量备份保留24小时
步骤2:配置备份脚本
# 创建备份脚本
cat > production-backup.sh << EOF
#!/bin/bash
# 配置
PD_ADDR="192.168.1.10:2379"
STORAGE="s3://tidb-backup-prod"
ACCESS_KEY="AK..."
SECRET_KEY="SK..."
DATE=$(date +%Y%m%d)
HOUR=$(date +%H)
# 全量备份(每天凌晨2点执行)
if [ "$HOUR" = "02" ]; then
FULL_BACKUP_DIR="${STORAGE}/full/${DATE}"
echo "Starting full backup to ${FULL_BACKUP_DIR}"
tiup br backup full --pd "${PD_ADDR}" --storage "${FULL_BACKUP_DIR}?access-key=${ACCESS_KEY}&secret-access-key=${SECRET_KEY}"
echo "Full backup completed"
# 清理7天前的全量备份
OLD_DATE=$(date -d "7 days ago" +%Y%m%d)
echo "Cleaning up old full backup from ${OLD_DATE}"
aws s3 rm --recursive "s3://tidb-backup-prod/full/${OLD_DATE}"
fi
# 增量备份(每小时执行)
INCREMENTAL_BACKUP_DIR="${STORAGE}/incremental/${DATE}-${HOUR}"
LAST_FULL_BACKUP="${STORAGE}/full/${DATE}"
echo "Starting incremental backup to ${INCREMENTAL_BACKUP_DIR}"
tiup br backup incremental --pd "${PD_ADDR}" --storage "${INCREMENTAL_BACKUP_DIR}?access-key=${ACCESS_KEY}&secret-access-key=${SECRET_KEY}" --last-backup "${LAST_FULL_BACKUP}"
echo "Incremental backup completed"
# 清理24小时前的增量备份
OLD_HOUR=$(date -d "24 hours ago" +%Y%m%d-%H)
echo "Cleaning up old incremental backup from ${OLD_HOUR}"
aws s3 rm --recursive "s3://tidb-backup-prod/incremental/${OLD_HOUR}"
EOF
# 赋予执行权限
chmod +x production-backup.sh
# 添加到crontab
crontab -e
# 添加每小时执行的任务
0 * * * * /path/to/production-backup.sh >> /var/log/tidb-backup.log 2>&1
步骤3:执行恢复演练
# 创建测试集群
tiup cluster deploy test-cluster v7.5.0 topology.yaml --user root -p
# 启动测试集群
tiup cluster start test-cluster
# 执行全量恢复
tiup br restore full --pd "192.168.1.20:2379" --storage "s3://tidb-backup-prod/full/20240409?access-key=AK...&secret-access-key=SK..."
# 验证恢复结果
mysql -h 192.168.1.23 -P 4000 -u root -p -e "SHOW DATABASES;"
mysql -h 192.168.1.23 -P 4000 -u root -p -e "USE fgedudb; SELECT COUNT(*) FROM fgedu_users;"
# 停止测试集群
tiup cluster stop test-cluster
tiup cluster destroy test-cluster
+--------------------+ | Database | +--------------------+ | fgedudb | | information_schema | | mysql | | performance_schema | | sys | +--------------------+ +----------+ | COUNT(*) | +----------+ | 10000 | +----------+
4.2 灾难恢复
场景:生产环境发生数据丢失,需要从备份中恢复数据。
步骤1:停止服务
# 停止应用服务
systemctl stop application
# 停止TiDB服务
tiup cluster stop tidb-cluster
步骤2:执行恢复
# 执行全量恢复
tiup br restore full --pd "192.168.1.10:2379" --storage "s3://tidb-backup-prod/full/20240409?access-key=AK...&secret-access-key=SK..."
# 执行增量恢复
tiup br restore incremental --pd "192.168.1.10:2379" --storage "s3://tidb-backup-prod/incremental/20240409-10?access-key=AK...&secret-access-key=SK..."
# 启动TiDB服务
tiup cluster start tidb-cluster
步骤3:验证恢复结果
# 验证数据库状态
mysql -h 192.168.1.13 -P 4000 -u root -p -e "SHOW DATABASES;"
mysql -h 192.168.1.13 -P 4000 -u root -p -e "USE fgedudb; SELECT COUNT(*) FROM fgedu_users;"
mysql -h 192.168.1.13 -P 4000 -u root -p -e "USE fgedudb; SELECT * FROM fgedu_users ORDER BY id DESC LIMIT 10;"
# 启动应用服务
systemctl start application
+--------------------+ | Database | +--------------------+ | fgedudb | | information_schema | | mysql | | performance_schema | | sys | +--------------------+ +----------+ | COUNT(*) | +----------+ | 10000 | +----------+ +------+----------+------------------+-----+---------------------+ | id | username | email | age | created_at | +------+----------+------------------+-----+---------------------+ | 10000 | user10000 | user10000@example.com | 30 | 2024-04-09 10:00:00 | | 9999 | user9999 | user9999@example.com | 30 | 2024-04-09 09:59:59 | | 9998 | user9998 | user9998@example.com | 30 | 2024-04-09 09:59:58 | | 9997 | user9997 | user9997@example.com | 30 | 2024-04-09 09:59:57 | | 9996 | user9996 | user9996@example.com | 30 | 2024-04-09 09:59:56 | | 9995 | user9995 | user9995@example.com | 30 | 2024-04-09 09:59:55 | | 9994 | user9994 | user9994@example.com | 30 | 2024-04-09 09:59:54 | | 9993 | user9993 | user9993@example.com | 30 | 2024-04-09 09:59:53 | | 9992 | user9992 | user9992@example.com | 30 | 2024-04-09 09:59:52 | | 9991 | user9991 | user9991@example.com | 30 | 2024-04-09 09:59:51 | +------+----------+------------------+-----+---------------------+
五、经验总结
5.1 备份与恢复最佳实践
- 制定完善的备份策略:根据业务需求制定合理的备份计划
- 使用多种备份方式:结合全量备份、增量备份和表级备份
- 选择可靠的存储:使用对象存储等可靠的存储服务
- 定期执行恢复演练:确保备份可用
- 监控备份状态:及时发现和处理备份失败
- 自动化备份:使用脚本和定时任务自动执行备份
- 保留适当的备份:根据业务需求设置合理的备份保留期
- 加密备份数据:保护备份数据的安全
5.2 常见问题与解决方案
| 问题 | 原因 | 解决方案 |
|---|---|---|
| 备份失败 | 存储配置错误、权限不足、网络问题 | 检查存储配置,确保权限充足,检查网络连接 |
| 恢复失败 | 备份文件损坏、版本不兼容、存储问题 | 验证备份文件,确保版本兼容,检查存储 |
| 备份速度慢 | 网络带宽不足、存储性能差 | 增加网络带宽,使用高性能存储 |
| 恢复速度慢 | 存储性能差、TiDB配置不当 | 使用高性能存储,优化TiDB配置 |
| 备份占用空间大 | 数据量大、备份策略不合理 | 优化备份策略,使用增量备份 |
5.3 备份与恢复检查清单
| 检查项 | 配置要求 | 状态 |
|---|---|---|
| 备份策略 | 制定合理的备份计划 | □ |
| 存储配置 | 配置可靠的存储服务 | □ |
| 备份执行 | 定期执行备份 | □ |
| 备份验证 | 定期验证备份文件 | □ |
| 恢复演练 | 定期执行恢复演练 | □ |
| 监控配置 | 配置备份监控和告警 | □ |
| 自动化 | 自动化备份流程 | □ |
| 文档 | 编写备份与恢复文档 | □ |
更多视频教程www.fgedu.net.cn
© 2024 TiDB数据库培训文档
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
