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

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

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 backup  success, 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 backup  success, 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 backup  success, 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 restore  success, 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 restore  success, 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 restore  success, 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

联系我们

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

微信号:itpux-com

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