备份与恢复 #
一、备份概述 #
1.1 备份类型 #
text
TiDB 备份类型
┌─────────────────────────────────────────────────────────────┐
│ │
│ 全量备份 │
│ ├── 备份所有数据 │
│ ├── 包含表结构 │
│ ├── 恢复时需要全量备份 │
│ └── 数据量大,时间长 │
│ │
│ 增量备份 │
│ ├── 只备份变化的数据 │
│ ├── 基于全量备份 │
│ ├── 数据量小,时间短 │
│ └── 恢复时需要全量+增量 │
│ │
│ 日志备份 │
│ ├── 实时备份变更日志 │
│ ├── 支持时间点恢复 │
│ └── 最小化数据丢失 │
│ │
└─────────────────────────────────────────────────────────────┘
1.2 备份工具 #
text
TiDB 备份工具
┌─────────────────────────────────────────────────────────────┐
│ │
│ BR (Backup & Restore) │
│ ├── 官方备份恢复工具 │
│ ├── 支持分布式备份 │
│ ├── 高性能 │
│ └── 支持 S3、GCS、本地存储 │
│ │
│ Dumpling │
│ ├── 数据导出工具 │
│ ├── 导出为 SQL 文件 │
│ ├── 适合小数据量 │
│ └── 支持数据迁移 │
│ │
│ Lightning │
│ ├── 数据导入工具 │
│ ├── 高性能导入 │
│ └── 配合 Dumpling 使用 │
│ │
└─────────────────────────────────────────────────────────────┘
二、BR工具使用 #
2.1 安装BR #
bash
# 使用 TiUP 安装
tiup install br
# 查看版本
tiup br --version
2.2 全量备份 #
bash
# 备份到本地
tiup br backup full \
--pd "pd:2379" \
--storage "local:///backup/full" \
--ratelimit 100 \
--log-file backup.log
# 备份到 S3
tiup br backup full \
--pd "pd:2379" \
--storage "s3://my-bucket/backup/full" \
--s3.region "us-east-1" \
--s3.endpoint "https://s3.amazonaws.com" \
--log-file backup.log
# 备份指定数据库
tiup br backup db \
--pd "pd:2379" \
--db "mydb" \
--storage "local:///backup/mydb" \
--log-file backup.log
# 备份指定表
tiup br backup table \
--pd "pd:2379" \
--db "mydb" \
--table "users" \
--storage "local:///backup/users" \
--log-file backup.log
2.3 增量备份 #
bash
# 增量备份 (基于上次备份的TSO)
tiup br backup full \
--pd "pd:2379" \
--storage "local:///backup/incr" \
--lastbackupts 431434047158620160
# 查看上次备份的TSO
tiup br validate decode \
--storage "local:///backup/full" \
-f "backupmeta"
2.4 日志备份 #
bash
# 启动日志备份
tiup br log start \
--pd "pd:2379" \
--storage "s3://my-bucket/log-backup"
# 查看日志备份状态
tiup br log status \
--pd "pd:2379"
# 停止日志备份
tiup br log stop \
--pd "pd:2379"
# 清理日志备份
tiup br log truncate \
--storage "s3://my-bucket/log-backup" \
--until "2024-03-27 00:00:00"
三、数据恢复 #
3.1 全量恢复 #
bash
# 恢复全量备份
tiup br restore full \
--pd "pd:2379" \
--storage "local:///backup/full" \
--log-file restore.log
# 恢复到 S3
tiup br restore full \
--pd "pd:2379" \
--storage "s3://my-bucket/backup/full" \
--s3.region "us-east-1" \
--log-file restore.log
# 恢复指定数据库
tiup br restore db \
--pd "pd:2379" \
--db "mydb" \
--storage "local:///backup/mydb" \
--log-file restore.log
# 恢复指定表
tiup br restore table \
--pd "pd:2379" \
--db "mydb" \
--table "users" \
--storage "local:///backup/users" \
--log-file restore.log
3.2 时间点恢复(PITR) #
bash
# 恢复到指定时间点
tiup br restore point \
--pd "pd:2379" \
--storage "s3://my-bucket/log-backup" \
--full-backup-storage "s3://my-bucket/backup/full" \
--restored-ts "2024-03-27T10:00:00+08:00"
# 恢复到最新时间点
tiup br restore point \
--pd "pd:2379" \
--storage "s3://my-bucket/log-backup" \
--full-backup-storage "s3://my-bucket/backup/full"
四、Dumpling导出 #
4.1 基本导出 #
bash
# 导出所有数据
tiup dumpling \
-u root \
-P 4000 \
-h 127.0.0.1 \
-o /backup/dump
# 导出指定数据库
tiup dumpling \
-u root \
-P 4000 \
-h 127.0.0.1 \
-B mydb \
-o /backup/dump
# 导出指定表
tiup dumpling \
-u root \
-P 4000 \
-h 127.0.0.1 \
-B mydb \
-T users,orders \
-o /backup/dump
4.2 导出选项 #
bash
# 只导出表结构
tiup dumpling \
-u root \
-P 4000 \
-h 127.0.0.1 \
--no-data \
-o /backup/schema
# 只导出数据
tiup dumpling \
-u root \
-P 4000 \
-h 127.0.0.1 \
--no-create-info \
-o /backup/data
# 指定文件大小
tiup dumpling \
-u root \
-P 4000 \
-h 127.0.0.1 \
-F 256MiB \
-o /backup/dump
# 并发导出
tiup dumpling \
-u root \
-P 4000 \
-h 127.0.0.1 \
-t 8 \
-o /backup/dump
五、Lightning导入 #
5.1 导入数据 #
bash
# 导入 Dumpling 导出的数据
tiup tidb-lightning \
--config lightning.toml
# lightning.toml 配置
[lightning]
level = "info"
[tikv-importer]
backend = "local"
[mydumper]
data-source-dir = "/backup/dump"
[tidb]
host = "127.0.0.1"
port = 4000
user = "root"
password = ""
[checkpoint]
enable = true
5.2 导入模式 #
bash
# Local 后端模式 (最快)
[tikv-importer]
backend = "local"
# TiDB 后端模式 (兼容性好)
[tikv-importer]
backend = "tidb"
# Importer 后端模式 (已弃用)
[tikv-importer]
backend = "importer"
六、备份策略 #
6.1 备份计划 #
text
推荐备份策略
┌─────────────────────────────────────────────────────────────┐
│ │
│ 全量备份: │
│ ├── 频率: 每天1次 │
│ ├── 时间: 业务低峰期 (凌晨) │
│ ├── 保留: 7-30天 │
│ └── 存储: S3/GCS │
│ │
│ 增量备份: │
│ ├── 频率: 每小时1次 │
│ ├── 保留: 7天 │
│ └── 基于全量备份 │
│ │
│ 日志备份: │
│ ├── 频率: 实时 │
│ ├── 保留: 7天 │
│ └── 支持时间点恢复 │
│ │
└─────────────────────────────────────────────────────────────┘
6.2 自动化备份脚本 #
bash
#!/bin/bash
# backup.sh
DATE=$(date +%Y%m%d)
BACKUP_DIR="/backup/$DATE"
PD_ADDR="pd:2379"
S3_BUCKET="s3://my-bucket/backup"
# 创建备份目录
mkdir -p $BACKUP_DIR
# 执行全量备份
tiup br backup full \
--pd $PD_ADDR \
--storage "$S3_BUCKET/full/$DATE" \
--log-file "$BACKUP_DIR/backup.log"
# 检查备份结果
if [ $? -eq 0 ]; then
echo "Backup completed successfully"
# 发送成功通知
else
echo "Backup failed"
# 发送失败告警
fi
# 清理旧备份 (保留7天)
find /backup -type d -mtime +7 -exec rm -rf {} \;
七、恢复演练 #
7.1 恢复测试 #
bash
# 定期进行恢复演练
# 1. 搭建测试环境
# 2. 执行恢复
# 3. 验证数据完整性
# 4. 记录恢复时间
# 恢复测试脚本
#!/bin/bash
# 恢复到测试集群
tiup br restore full \
--pd "test-pd:2379" \
--storage "s3://my-bucket/backup/full/20240327" \
--log-file restore_test.log
# 验证数据
mysql -h test-tidb -P 4000 -u root -e "
SELECT COUNT(*) FROM mydb.users;
SELECT COUNT(*) FROM mydb.orders;
"
八、总结 #
备份恢复要点:
| 类型 | 工具 | 说明 |
|---|---|---|
| 全量备份 | BR | 备份所有数据 |
| 增量备份 | BR | 只备份变化 |
| 日志备份 | BR | 实时备份 |
| 数据导出 | Dumpling | SQL格式导出 |
| 数据导入 | Lightning | 高性能导入 |
下一步,让我们学习性能优化!
最后更新:2026-03-27