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