备份与恢复 #

一、备份概述 #

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