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

tidb教程FG039-TiDB单表恢复与库级恢复

本文档详细介绍TiDB单表恢复与库级恢复,包括恢复基础、恢复类型、恢复原理、生产环境规划、实施方案、实战案例等内容。风哥教程参考TiDB官方文档BR工具相关内容,适合DBA在日常维护TiDB数据库时参考。更多视频教程www.fgedu.net.cn

Part01-基础概念与理论知识

1.1 恢复基础

数据恢复是指将备份的数据还原到数据库中的过程,是保证数据安全的重要手段。

  • 恢复的定义:恢复是指将备份的数据还原到数据库中的过程,以恢复数据库到某个时间点的状态。
  • 恢复的重要性:
    • 数据安全:防止数据丢失
    • 业务连续性:确保业务在故障后快速恢复
    • 数据迁移:支持数据迁移和升级
    • 数据验证:验证备份的有效性
  • 恢复的类型:
    • 全量恢复:恢复整个数据库
    • 增量恢复:恢复自上次备份以来的变化
    • 单表恢复:恢复单个表的数据
    • 库级恢复:恢复单个数据库的数据
恢复的特点:

  • 针对性:根据需要恢复特定的数据
  • 灵活性:可以选择恢复的范围和时间点
  • 效率性:相比全库恢复,单表或库级恢复更高效
  • 安全性:减少对其他数据的影响

1.2 恢复类型

风哥提示:

根据恢复的范围和方式,TiDB的恢复可以分为多种类型。

1.2.1 按恢复范围分类

# 按恢复范围分类

## 1. 全量恢复
– 定义:恢复整个数据库集群的数据
– 特点:
– 恢复范围大
– 恢复时间长
– 影响整个集群
– 适用场景:
– 集群灾难恢复
– 数据迁移
– 系统重建

## 2. 库级恢复
– 定义:恢复单个数据库的数据
– 特点:
– 恢复范围中等
– 恢复时间适中
– 影响单个数据库
– 适用场景:
– 数据库误操作
– 数据库损坏
– 数据库迁移

## 3. 单表恢复
– 定义:恢复单个表的数据
– 特点:
– 恢复范围小
– 恢复时间短
– 影响单个表
– 适用场景:
– 表误操作
– 表数据损坏
– 表结构变更

## 4. 行级恢复
– 定义:恢复表中的特定行数据
– 特点:
– 恢复范围最小
– 恢复时间最短
– 影响最小
– 适用场景:
– 单行数据误操作
– 单行数据损坏

1.2.2 按恢复方式分类

# 按恢复方式分类

## 1. 物理恢复
– 定义:使用物理备份文件进行恢复
– 特点:
– 恢复速度快
– 适合大规模数据
– 对数据库版本有要求
– 工具:
– TiDB BR工具

## 2. 逻辑恢复
– 定义:使用逻辑备份文件进行恢复
– 特点:
– 跨版本兼容
– 恢复速度慢
– 适合小数据量
– 工具:
– TiDB Dumpling工具
– MySQL客户端(导入SQL文件)

## 3. 增量恢复
– 定义:恢复自上次备份以来的变化
– 特点:
– 恢复时间点精确
– 依赖全量备份
– 恢复过程复杂
– 工具:
– TiDB BR工具

## 4. 实时恢复
– 定义:使用实时同步工具进行恢复
– 特点:
– 近实时恢复
– 低延迟
– 持续同步
– 工具:
– TiCDC

1.3 恢复原理

TiDB的恢复原理基于备份文件和恢复工具的工作机制。

1.3.1 单表恢复原理

# 单表恢复原理

## 1. 基于BR工具的单表恢复学习交流加群风哥QQ113257174
– 原理:
– BR工具支持按表进行备份和恢复
– 使用`–table`参数指定要恢复的表
– 从备份文件中提取指定表的数据
– 将数据恢复到目标表

– 特点:
– 支持物理备份和恢复
– 恢复速度快
– 适合大规模数据
– 对表结构有要求

## 2. 基于Dumpling的单表恢复
– 原理:
– Dumpling工具支持按表导出数据
– 使用`-t`参数指定要导出的表
– 生成SQL或CSV文件
– 使用MySQL客户端导入数据

– 特点:
– 跨版本兼容
– 恢复速度慢
– 适合小数据量
– 表结构可以不同

## 3. 基于TiCDC的单表恢复
– 原理:
– TiCDC实时同步表数据
– 支持按表过滤
– 近实时恢复
– 持续同步

– 特点:
– 低延迟
– 近实时恢复
– 适合灾备场景
– 配置复杂

1.3.2 库级恢复原理

# 库级恢复原理

## 1. 基于BR工具的库级恢复
– 原理:
– BR工具支持按数据库进行备份和恢复
– 使用`–db`参数指定要恢复的数据库
– 从备份文件中提取指定数据库的数据
– 将数据恢复到目标数据库

– 特点:
– 支持物理备份和恢复
– 恢复速度快
– 适合大规模数据
– 对数据库结构有要求

## 2. 基于Dumpling的库级恢复
– 原理:
– Dumpling工具支持按数据库导出数据
– 使用`-B`参数指定要导出的数据库
– 生成SQL或CSV文件
– 使用MySQL客户端导入数据

– 特点:
– 跨版本兼容
– 恢复速度慢
– 适合小数据量
– 数据库结构可以不同

## 3. 基于TiCDC的库级恢复
– 原理:
– TiCDC实时同步数据库数据
– 支持按数据库过滤
– 近实时恢复
– 持续同步

– 特点:
– 低延迟
– 近实时恢复
– 适合灾备场景
– 配置复杂

风哥提示:了解TiDB单表恢复与库级恢复的原理和类型,有助于选择合适的恢复方式,确保数据安全和业务连续性。学习交流加群风哥微信: itpux-com

Part02-生产环境规划与建议

2.1 恢复规划

2.1.1 恢复需求分析

# 恢复需求分析

## 1. 业务需求分析
– 业务重要性:评估数据对业务的重要程度
– RTO (Recovery Time Objective):恢复时间目标
– RPO (Recovery Point Objective):恢复点目标
– 业务连续性:确保业务连续运行的要求

## 2. 数据量分析
– 数据库大小:评估数据库的总大小
– 表大小:评估单个表的大小
– 数据变更率:评估数据变更的频率和数量
– 恢复时间窗口:可用的恢复时间

## 3. 系统环境分析
– 硬件资源:CPU、内存、存储、网络
– 软件版本:TiDB版本,恢复工具版本
– 部署架构:集群规模,节点分布
– 网络环境:网络带宽,延迟

## 4. 风险分析
– 数据丢失风险:评估数据丢失的可能性和影响
– 恢复失败风险:评估恢复失败的可能性和影响
– 业务中断风险:评估恢复过程中业务中断的影响
– 性能影响风险:评估恢复过程对系统性能的影响

2.1.2 恢复策略制定

# 恢复策略制定

## 1. 恢复工具选择
– 物理恢复:
– 工具:TiDB BR工具
– 适用场景:大规模数据,快速恢复
– 优势:恢复速度快,适合大规模数据
– 劣势:对版本有要求,表结构必须一致

– 逻辑恢复:
– 工具:TiDB Dumpling工具
– 适用场景:小数据量,跨版本恢复
– 优势:跨版本兼容,表结构可以不同
– 劣势:恢复速度慢,适合小数据量

– 实时恢复:
– 工具:TiCDC
– 适用场景:灾备,近实时恢复
– 优势:低延迟,近实时恢复
– 劣势:配置复杂,需要额外资源

## 2. 恢复流程制定
– 准备阶段:
– 确认恢复需求
– 准备恢复环境
– 选择恢复工具
– 获取备份文件

– 执行阶段:
– 停止相关服务
– 执行恢复操作
– 监控恢复过程
– 验证恢复结果

– 完成阶段:
– 启动相关服务
– 验证业务功能
– 记录恢复过程
– 清理恢复环境

## 3. 恢复时间预估
– 全量恢复:
– 时间:数小时到数天
– 因素:数据量,存储性能,网络带宽

– 库级恢复:
– 时间:数十分钟到数小时
– 因素:数据库大小,存储性能,网络带宽

– 单表恢复:
– 时间:数分钟到数十分钟
– 因素:表大小,存储性能,网络带宽

## 4. 恢复验证策略
– 数据完整性验证:
– 检查数据量
– 检查关键数据
– 检查数据一致性

– 业务功能验证:
– 测试业务查询
– 测试业务操作
– 测试业务流程

– 性能验证:
– 检查系统性能
– 检查查询性能
– 检查写入性能

2.2 恢复工具

# 恢复工具

## 1. TiDB BR工具
– 简介:
– TiDB Backup & Restore工具
– 支持物理备份和恢复
– 支持全量和增量备份
– 支持按库和表备份恢复

– 安装:
[root@fgedu.net.cn ~]# tiup install br

– 常用命令:
– 备份全库:tiup br backup full
– 备份指定库:tiup br backup db
– 备份指定表:tiup br backup table
– 恢复全库:tiup br restore full
– 恢复指定库:tiup br restore db
– 恢复指定表:tiup br restore table

– 优势:
– 恢复速度快
– 适合大规模数据
– 支持增量恢复

– 劣势:
– 对版本有要求
– 表结构必须一致
– 配置复杂

## 2. TiDB Dumpling工具
– 简介:
– TiDB逻辑备份工具
– 支持导出SQL或CSV文件
– 支持按库和表导出
– 跨版本兼容

– 安装:
[root@fgedu.net.cn ~]# tiup install dumpling

– 常用命令:
– 导出全库:tiup dumpling
– 导出指定库:tiup dumpling -B dbname
– 导出指定表:tiup dumpling -t dbname.table
– 导入数据:mysql -h host -P port -u user -p < dump.sql - 优势: - 跨版本兼容 - 表结构可以不同 - 配置简单 - 劣势: - 恢复速度慢 - 适合小数据量 - 不支持增量恢复 ## 3. TiCDC工具 - 简介: - TiDB Change Data Capture - 实时同步数据 - 支持按库和表过滤 - 近实时恢复 - 安装: [root@fgedu.net.cn ~]# tiup install cdc - 常用命令: - 创建同步任务:tiup cdc cli changefeed create - 查看同步任务:tiup cdc cli changefeed list - 管理同步任务:tiup cdc cli changefeed pause/resume - 优势: - 低延迟 - 近实时恢复 - 持续同步 - 劣势: - 配置复杂 - 需要额外资源 - 不支持历史数据恢复

2.3 恢复策略

# 恢复策略

## 1. 全量恢复策略
– 适用场景:
– 集群灾难恢复
– 数据迁移
– 系统重建

– 恢复步骤:
1. 停止应用服务
2. 清理目标集群
3. 执行全量恢复
4. 验证恢复结果
5. 启动应用服务

– 注意事项:
– 确保目标集群已准备就绪
– 确保备份文件完整
– 监控恢复过程
– 验证恢复结果

## 2. 库级恢复策略
– 适用场景:
– 数据库误操作
– 数据库损坏
– 数据库迁移

– 恢复步骤:
1. 停止相关应用服务
2. 备份目标数据库(可选)
3. 执行库级恢复
4. 验证恢复结果
5. 启动相关应用服务

– 注意事项:
– 确保目标数据库已准备就绪
– 确保备份文件完整
– 避免影响其他数据库
– 验证恢复结果

## 3. 单表恢复策略
– 适用场景:
– 表误操作
– 表数据损坏
– 表结构变更

– 恢复步骤:
1. 停止相关应用服务
2. 备份目标表(可选)
3. 执行单表恢复
4. 验证恢复结果
5. 启动相关应用服务

– 注意事项:
– 确保目标表已准备就绪
– 确保备份文件完整
– 避免影响其他表
– 验证恢复结果

## 4. 增量恢复策略
– 适用场景:
– 数据丢失后的恢复
– 时间点恢复
– 灾备演练

– 恢复步骤:
1. 停止应用服务
2. 执行全量恢复
3. 执行增量恢复
4. 验证恢复结果
5. 启动应用服务

– 注意事项:
– 确保备份链完整
– 确保时间点正确
– 监控恢复过程
– 验证恢复结果

生产环境建议:根据业务需求、数据量和系统资源选择合适的恢复工具和策略,确保恢复过程高效、安全。学习交流加群风哥QQ113257174

Part03-生产环境项目实施方案

3.1 单表恢复

3.1.1 使用BR工具进行单表恢复

# 使用BR工具进行单表恢复

## 1. 准备工作
– 检查TiDB集群状态:
[root@fgedu.net.cn ~]# tiup cluster status fgedu-tidb

输出:
Cluster type: tidb
Cluster name: fgedu-tidb
Cluster version: v7.5.0
Deploy user: tidb
SSH type: builtin
ID Role Host Ports Status Data Dir Deploy Dir
— —- —- —– —— ——– ———-
192.168.1.1:9093 alertmanager 192.168.1.1 9093/9094 Up /tidb/fgdata/alertmanager-9093
/tidb/app/alertmanager-9093
192.168.1.1:3000 grafana 192.168.1.1 3000 Up /tidb/fgdata/grafana-3000 /tidb/app/grafana-3000
192.168.1.1:2379 pd 192.168.1.1 2379/2380 Up /tidb/fgdata/pd-2379 /tidb/app/pd-2379
192.168.1.2:2379 pd 192.168.1.2 2379/2380 Up /tidb/fgdata/pd-2379 /tidb/app/pd-2379
192.168.1.3:2379 pd 192.168.1.3 2379/2380 Up /tidb/fgdata/pd-2379 /tidb/app/pd-2379
192.168.1.4:4000 tidb 192.168.1.4 4000/10080 Up /tidb/fgdata/tidb-4000 /tidb/app/tidb-4000
192.168.1.5:4000 tidb 192.168.1.5 4000/10080 Up /tidb/fgdata/tidb-4000 /tidb/app/tidb-4000
192.168.1.6:20160 tikv 192.168.1.6 20160/20180 Up /tidb/fgdata/tikv-20160 /tidb/app/tikv-20160
192.168.1.7:20160 tikv 192.168.1.7 20160/20180 Up /tidb/fgdata/tikv-20160 /tidb/app/tikv-20160
192.168.1.8:20160 tikv 192.168.1.8 20160/20180 Up /tidb/fgdata/tikv-20160 /tidb/app/tikv-20160

– 准备备份文件:
[root@fgedu.net.cn ~]# ls -la /tidb/backup/full/20240101-000000/

输出:
total 48567890
drwxr-xr-x 2 tidb tidb 4096 Jan 1 00:30 .
drwxr-xr-x 3 tidb tidb 4096 Jan 1 00:00 ..
-rw-r–r– 1 tidb tidb 12345 Jan 1 00:00 backupmeta
-rw-r–r– 1 tidb tidb 4972589012 Jan 1 00:30 data.0

– 停止相关应用服务:
[root@fgedu.net.cn ~]# systemctl stop app.service

## 2. 执行单表恢复
– 执行单表恢复命令:
[root@fgedu.net.cn ~]# tiup br restore table –pd “192.168.1.1:2379” –storage
“local:///tidb/backup/full/20240101-000000” –db fgedudb –table fgedu_users

输出:
[2024-01-04 10:00:00] [info] [restore.go:123] [“table restore start”]
[2024-01-04 10:00:05] [info] [restore.go:145] [“restore meta done”]
[2024-01-04 10:05:15] [info] [restore.go:167] [“restore data done”]
[2024-01-04 10:05:20] [info] [restore.go:189] [“table restore success”]

## 3. 验证恢复结果
– 检查表数据:
[root@fgedu.net.cn ~]# mysql -h 192.168.1.1 -P 4000 -u fgedu -p -e “SELECT COUNT(*) FROM fgedudb.fgedu_users;”

输出:
+———-+
| COUNT(*) |
+———-+
| 10000 |
+———-+

– 检查表结构:
[root@fgedu.net.cn ~]# mysql -h 192.168.1.1 -P 4000 -u fgedu -p -e “DESCRIBE fgedudb.fgedu_users;”

– 检查关键数据:
[root@fgedu.net.cn ~]# mysql -h 192.168.1.1 -P 4000 -u fgedu -p -e “SELECT * FROM fgedudb.fgedu_users ORDER BY
id DESC LIMIT 10;”

## 4. 启动应用服务
– 启动应用服务:
[root@fgedu.net.cn ~]# systemctl start app.service

3.1.2 使用Dumpling工具进行单表恢复

# 使用Dumpling工具进行单表恢复

## 1. 准备工作
– 安装Dumpling工具:
[root@fgedu.net.cn ~]# tiup install dumpling

– 导出单表数据:
[root@fgedu.net.cn ~]# tiup dumpling -h 192.168.1.1 -P 4000 -u fgedu -p -B fgedudb -t fgedu_users -o
/tidb/backup/dump/

输出:
[2024-01-01 00:00:00] [info] [dumpling.go:123] [“dump start”]
[2024-01-01 00:00:05] [info] [dumpling.go:145] [“dump schema done”]
[2024-01-01 00:01:15] [info] [dumpling.go:167] [“dump data done”]
[2024-01-01 00:01:20] [info] [dumpling.go:189] [“dump success”]

– 查看导出文件:
[root@fgedu.net.cn ~]# ls -la /tidb/backup/dump/

输出:
total 123456
drwxr-xr-x 2 root root 4096 Jan 1 00:01 .
drwxr-xr-x 3 root root 4096 Jan 1 00:00 ..
-rw-r–r– 1 root root 12345 Jan 1 00:00 fgedudb.fgedu_users-schema.sql
-rw-r–r– 1 root root 12345678 Jan 1 00:01 fgedudb.fgedu_users.sql

– 停止相关应用服务:
[root@fgedu.net.cn ~]# systemctl stop app.service

## 2. 执行单表恢复
– 导入单表数据:
[root@fgedu.net.cn ~]# mysql -h 192.168.1.1 -P 4000 -u fgedu -p fgedudb < /tidb/backup/dump/fgedudb.fgedu_users.sql 输出: (无错误输出表示导入成功) ## 3. 验证恢复结果 - 检查表数据: [root@fgedu.net.cn ~]# mysql -h 192.168.1.1 -P 4000 -u fgedu -p -e "SELECT COUNT(*) FROM fgedudb.fgedu_users;" 输出: +----------+ | COUNT(*) | +----------+ | 10000 | +----------+ - 检查表结构: [root@fgedu.net.cn ~]# mysql -h 192.168.1.1 -P 4000 -u fgedu -p -e "DESCRIBE fgedudb.fgedu_users;" - 检查关键数据: [root@fgedu.net.cn ~]# mysql -h 192.168.1.1 -P 4000 -u fgedu -p -e "SELECT * FROM fgedudb.fgedu_users ORDER BY id DESC LIMIT 10;" ## 4. 启动应用服务 - 启动应用服务: [root@fgedu.net.cn ~]# systemctl start app.service

3.2 库级恢复

3.2.1 使用BR工具进行库级恢复

# 使用BR工具进行库级恢复

## 1. 准备工作
– 检查TiDB集群状态:
[root@fgedu.net.cn ~]# tiup cluster status fgedu-tidb

– 准备备份文件:
[root@fgedu.net.cn ~]# ls -la /tidb/backup/full/20240101-000000/

– 停止相关应用服务:
[root@fgedu.net.cn ~]# systemctl stop app.service

## 2. 执行库级恢复
– 执行库级恢复命令:
[root@fgedu.net.cn ~]# tiup br restore db –pd “192.168.1.1:2379” –storage
“local:///tidb/backup/full/20240101-000000” –db fgedudb

输出:
[2024-01-04 10:00:00] [info] [restore.go:123] [“db restore start”]
[2024-01-04 10:00:05] [info] [restore.go:145] [“restore meta done”]
[2024-01-04 10:15:15] [info] [restore.go:167] [“restore data done”]
[2024-01-04 10:15:20] [info] [restore.go:189] [“db restore success”]

## 3. 验证恢复结果
– 检查数据库:
[root@fgedu.net.cn ~]# mysql -h 192.168.1.1 -P 4000 -u fgedu -p -e “SHOW DATABASES;”

输出:
+——————–+
| Database |
+——————–+
| fgedudb |
| information_schema |
| mysql |
| performance_schema |
| sys |
+——————–+

– 检查表:
[root@fgedu.net.cn ~]# mysql -h 192.168.1.1 -P 4000 -u fgedu -p -e “SHOW TABLES IN fgedudb;”

– 检查数据量:
[root@fgedu.net.cn ~]# mysql -h 192.168.1.1 -P 4000 -u fgedu -p -e “SELECT COUNT(*) FROM
fgedudb.fgedu_users;”
[root@fgedu.net.cn ~]# mysql -h 192.168.1.1 -P 4000 -u fgedu -p -e “SELECT COUNT(*) FROM
fgedudb.fgedu_orders;”

## 4. 启动应用服务
– 启动应用服务:
[root@fgedu.net.cn ~]# systemctl start app.service

3.2.2 使用Dumpling工具进行库级恢复

# 使用Dumpling工具进行库级恢复

## 1. 准备工作
– 安装Dumpling工具:
[root@fgedu.net.cn ~]# tiup install dumpling

– 导出数据库数据:
[root@fgedu.net.cn ~]# tiup dumpling -h 192.168.1.1 -P 4000 -u fgedu -p -B fgedudb -o /tidb/backup/dump/

输出:
[2024-01-01 00:00:00] [info] [dumpling.go:123] [“dump start”]
[2024-01-01 00:00:05] [info] [dumpling.go:145] [“dump schema done”]
[2024-01-01 00:10:15] [info] [dumpling.go:167] [“dump data done”]
[2024-01-01 00:10:20] [info] [dumpling.go:189] [“dump success”]

– 查看导出文件:
[root@fgedu.net.cn ~]# ls -la /tidb/backup/dump/

输出:
total 2345678
drwxr-xr-x 2 root root 4096 Jan 1 00:10 .
drwxr-xr-x 3 root root 4096 Jan 1 00:00 ..
-rw-r–r– 1 root root 1234 Jan 1 00:00 fgedudb-schema-create.sql
-rw-r–r– 1 root root 12345 Jan 1 00:00 fgedudb.fgedu_users-schema.sql
-rw-r–r– 1 root root 12345678 Jan 1 00:05 fgedudb.fgedu_users.sql
-rw-r–r– 1 root root 12345 Jan 1 00:05 fgedudb.fgedu_orders-schema.sql
-rw-r–r– 1 root root 23456789 Jan 1 00:10 fgedudb.fgedu_orders.sql

– 停止相关应用服务:
[root@fgedu.net.cn ~]# systemctl stop app.service

## 2. 执行库级恢复
– 创建数据库(如果不存在):
[root@fgedu.net.cn ~]# mysql -h 192.168.1.1 -P 4000 -u fgedu -p -e “CREATE DATABASE IF NOT EXISTS
fgedudb;”

– 导入数据库结构:
[root@fgedu.net.cn ~]# mysql -h 192.168.1.1 -P 4000 -u fgedu -p fgedudb < /tidb/backup/dump/fgedudb-schema-create.sql - 导入表结构: [root@fgedu.net.cn ~]# mysql -h 192.168.1.1 -P 4000 -u fgedu -p fgedudb < /tidb/backup/dump/fgedudb.fgedu_users-schema.sql [root@fgedu.net.cn ~]# mysql -h 192.168.1.1 -P 4000 -u fgedu -p fgedudb < /tidb/backup/dump/fgedudb.fgedu_orders-schema.sql - 导入表数据: [root@fgedu.net.cn ~]# mysql -h 192.168.1.1 -P 4000 -u fgedu -p fgedudb < /tidb/backup/dump/fgedudb.fgedu_users.sql [root@fgedu.net.cn ~]# mysql -h 192.168.1.1 -P 4000 -u fgedu -p fgedudb < /tidb/backup/dump/fgedudb.fgedu_orders.sql 输出: (无错误输出表示导入成功) ## 3. 验证恢复结果 - 检查数据库: [root@fgedu.net.cn ~]# mysql -h 192.168.1.1 -P 4000 -u fgedu -p -e "SHOW DATABASES;" - 检查表: [root@fgedu.net.cn ~]# mysql -h 192.168.1.1 -P 4000 -u fgedu -p -e "SHOW TABLES IN fgedudb;" - 检查数据量: [root@fgedu.net.cn ~]# mysql -h 192.168.1.1 -P 4000 -u fgedu -p -e "SELECT COUNT(*) FROM fgedudb.fgedu_users;" [root@fgedu.net.cn ~]# mysql -h 192.168.1.1 -P 4000 -u fgedu -p -e "SELECT COUNT(*) FROM fgedudb.fgedu_orders;" ## 4. 启动应用服务 - 启动应用服务: [root@fgedu.net.cn ~]# systemctl start app.service

3.3 恢复自动化

3.3.1 恢复脚本创建

# 恢复脚本创建

## 1. 单表恢复脚本
– 创建单表恢复脚本:
[root@fgedu.net.cn ~]# cat > restore_table.sh << 'EOF' #!/bin/bash # restore_table.sh # from:www.itpux.com.qq113257174.wx:itpux-com # web: `http://www.fgedu.net.cn` # 检查参数 if [ $# -ne 4 ]; then echo "Usage: $0

” exit 1 fi PD_ADDR=$1 BACKUP_PATH=$2
DATABASE=$3 TABLE=$4 # 执行单表恢复 echo “Starting table restore for ${DATABASE}.${TABLE}…” tiup br
restore table –pd “$PD_ADDR” –storage “$BACKUP_PATH” –db “$DATABASE” –table “$TABLE” if [ $? -eq
0 ]; then echo “Table restore completed successfully” # 验证恢复结果 echo “Verifying restore result…”
mysql -h $(echo $PD_ADDR | cut -d’:’ -f1) -P 4000 -u fgedu -p
-e “SELECT COUNT(*) FROM ${DATABASE}.${TABLE};” else echo “Table restore failed” exit 1 fi EOF
[root@fgedu.net.cn ~]# chmod +x restore_table.sh ## 2. 库级恢复脚本 – 创建库级恢复脚本: [root@fgedu.net.cn ~]#
cat> restore_db.sh << 'EOF' #!/bin/bash # restore_db.sh # from:www.itpux.com.qq113257174.wx:itpux-com # web: `http://www.fgedu.net.cn` # 检查参数 if [ $# -ne 3 ]; then echo "Usage: $0 ” exit 1 fi PD_ADDR=$1 BACKUP_PATH=$2
DATABASE=$3 # 执行库级恢复 echo “Starting database restore for ${DATABASE}…” tiup br restore db
–pd “$PD_ADDR” –storage “$BACKUP_PATH” –db “$DATABASE” if [ $? -eq 0 ]; then
echo “Database restore completed successfully” # 验证恢复结果 echo “Verifying restore result…” mysql
-h $(echo $PD_ADDR | cut -d’:’ -f1) -P 4000 -u fgedu -p -e “SHOW TABLES IN ${DATABASE};” else
echo “Database restore failed” exit 1 fi EOF [root@fgedu.net.cn ~]# chmod +x restore_db.sh ## 3.
恢复验证脚本 – 创建恢复验证脚本: [root@fgedu.net.cn ~]# cat> verify_restore.sh << 'EOF' #!/bin/bash # verify_restore.sh # from:www.itpux.com.qq113257174.wx:itpux-com # web: `http://www.fgedu.net.cn` # 检查参数 if [ $# -ne 2 ]; then echo "Usage: $0

” exit 1 fi DATABASE=$1 TABLE=$2 #
检查表是否存在 echo “Checking if table ${DATABASE}.${TABLE} exists…” TABLE_EXISTS=$(mysql -h
192.168.1.1 -P 4000 -u fgedu -p -e “SHOW TABLES IN ${DATABASE} LIKE ‘${TABLE}’;” | wc -l) if [
$TABLE_EXISTS -eq 2 ]; then echo “Table ${DATABASE}.${TABLE} exists” # 检查数据量
echo “Checking data count…” DATA_COUNT=$(mysql -h 192.168.1.1 -P 4000 -u fgedu -p
-e “SELECT COUNT(*) FROM ${DATABASE}.${TABLE};” | tail -1) echo “Data count: $DATA_COUNT” #
检查表结构 echo “Checking table structure…” mysql -h 192.168.1.1 -P 4000 -u fgedu -p
-e “DESCRIBE ${DATABASE}.${TABLE};” # 检查关键数据 echo “Checking sample data…” mysql -h 192.168.1.1
-P 4000 -u fgedu -p -e “SELECT * FROM ${DATABASE}.${TABLE} ORDER BY id DESC LIMIT 5;” else
echo “Table ${DATABASE}.${TABLE} does not exist” exit 1 fi EOF [root@fgedu.net.cn ~]# chmod +x
verify_restore.sh

3.3.2 恢复流程自动化

# 恢复流程自动化

## 1. 全流程恢复脚本
– 创建全流程恢复脚本:
[root@fgedu.net.cn ~]# cat > full_restore_flow.sh << 'EOF' #!/bin/bash # full_restore_flow.sh # from:www.itpux.com.qq113257174.wx:itpux-com # web: `http://www.fgedu.net.cn` # 定义变量 PD_ADDR="192.168.1.1:2379" BACKUP_PATH="local:///tidb/backup/full/20240101-000000" DATABASE="fgedudb" TABLE="fgedu_users" APP_SERVICE="app.service" # 停止应用服务 echo "Stopping application service..." systemctl stop $APP_SERVICE # 执行恢复 echo "Starting recovery..." if [ ! -z "$TABLE" ]; then # 单表恢复 tiup br restore table --pd "$PD_ADDR" --storage "$BACKUP_PATH" --db "$DATABASE" --table "$TABLE" else # 库级恢复 tiup br restore db --pd "$PD_ADDR" --storage "$BACKUP_PATH" --db "$DATABASE" fi if [ $? -eq 0 ]; then echo "Recovery completed successfully" # 验证恢复结果 echo "Verifying recovery result..." if [ ! -z "$TABLE" ]; then mysql -h $(echo $PD_ADDR | cut -d':' -f1) -P 4000 -u fgedu -p -e "SELECT COUNT(*) FROM ${DATABASE}.${TABLE};" else mysql -h $(echo $PD_ADDR | cut -d':' -f1) -P 4000 -u fgedu -p -e "SHOW TABLES IN ${DATABASE};" fi # 启动应用服务 echo "Starting application service..." systemctl start $APP_SERVICE echo "Full restore flow completed successfully" else echo "Recovery failed" # 启动应用服务 echo "Starting application service..." systemctl start $APP_SERVICE exit 1 fi EOF [root@fgedu.net.cn ~]# chmod +x full_restore_flow.sh ## 2. 恢复监控脚本 - 创建恢复监控脚本: [root@fgedu.net.cn ~]# cat> monitor_restore.sh << 'EOF' #!/bin/bash # monitor_restore.sh # from:www.itpux.com.qq113257174.wx:itpux-com # web: `http://www.fgedu.net.cn` # 定义变量 LOG_FILE="/tidb/log/restore.log" # 监控恢复过程 echo "Monitoring restore process..." tail -f $LOG_FILE | while read line; do echo $line # 检查恢复是否完成 if echo $line | grep -q "restore success" ; then echo "Restore completed successfully" break fi # 检查恢复是否失败 if echo $line | grep -q "restore failed" ; then echo "Restore failed" break fi done EOF [root@fgedu.net.cn ~]# chmod +x monitor_restore.sh ## 3. 恢复报告生成脚本 - 创建恢复报告生成脚本: [root@fgedu.net.cn ~]# cat> generate_restore_report.sh << 'EOF' #!/bin/bash # generate_restore_report.sh # from:www.itpux.com.qq113257174.wx:itpux-com # web: `http://www.fgedu.net.cn` # 定义变量 REPORT_FILE="/tidb/report/restore_$(date +%Y%m%d_%H%M%S).txt" DATABASE="fgedudb" # 创建报告目录 mkdir -p /tidb/report # 生成报告 echo "===== TiDB Restore Report ======">
$REPORT_FILE
echo “Report generated at: $(date)” >> $REPORT_FILE
echo “Database: $DATABASE” >> $REPORT_FILE
echo “” >> $REPORT_FILE

# 数据库状态
echo “===== Database Status ======” >> $REPORT_FILE
mysql -h 192.168.1.1 -P 4000 -u fgedu -p -e “SHOW DATABASES;” >> $REPORT_FILE
echo “” >> $REPORT_FILE

# 表状态
echo “===== Table Status ======” >> $REPORT_FILE
mysql -h 192.168.1.1 -P 4000 -u fgedu -p -e “SHOW TABLES IN $DATABASE;” >> $REPORT_FILE
echo “” >> $REPORT_FILE

# 数据量
echo “===== Data Count ======” >> $REPORT_FILE
for table in $(mysql -h 192.168.1.1 -P 4000 -u fgedu -p -e “SHOW TABLES IN $DATABASE;” |
tail -n +2); do
count=$(mysql -h 192.168.1.1 -P 4000 -u fgedu -p -e “SELECT COUNT(*) FROM
${DATABASE}.${table};” | tail -1)
echo “${table}: $count” >> $REPORT_FILE
done
echo “” >> $REPORT_FILE

# 恢复日志
echo “===== Restore Log ======” >> $REPORT_FILE
tail -50 /tidb/log/restore.log >> $REPORT_FILE

echo “Restore report generated: $REPORT_FILE”
EOF

[root@fgedu.net.cn ~]# chmod +x generate_restore_report.sh

风哥提示:定期验证恢复流程,确保在数据丢失时能够快速、准确地恢复数据。更多学习教程公众号风哥教程itpux_com

Part04-生产案例与实战讲解

4.1 单表恢复实战案例

# 单表恢复实战案例

## 1. 案例背景
– 系统:TiDB 7.5.0
– 业务:电商平台
– 问题:fgedu_users表误操作,数据被删除
– 备份:存在全量备份(20240101-000000)
– 需求:恢复fgedu_users表的数据

## 2. 实施步骤

### 步骤1:环境准备
– 检查TiDB集群状态:
[root@fgedu.net.cn ~]# tiup cluster status fgedu-tidb

– 检查备份文件:
[root@fgedu.net.cn ~]# ls -la /tidb/backup/full/20240101-000000/

– 停止相关应用服务:
[root@fgedu.net.cn ~]# systemctl stop app.service

### 步骤2:执行单表恢复
– 执行单表恢复命令:
[root@fgedu.net.cn ~]# tiup br restore table –pd “192.168.1.1:2379” –storage
“local:///tidb/backup/full/20240101-000000” –db fgedudb –table fgedu_users

输出:
[2024-01-04 10:00:00] [info] [restore.go:123] [“table restore start”]
[2024-01-04 10:00:05] [info] [restore.go:145] [“restore meta done”]
[2024-01-04 10:05:15] [info] [restore.go:167] [“restore data done”]
[2024-01-04 10:05:20] [info] [restore.go:189] [“table restore success”]

### 步骤3:验证恢复结果
– 检查表数据:
[root@fgedu.net.cn ~]# mysql -h 192.168.1.1 -P 4000 -u fgedu -p -e “SELECT COUNT(*) FROM
fgedudb.fgedu_users;”

输出:
+———-+
| COUNT(*) |
+———-+
| 10000 |
+———-+

– 检查表结构:
[root@fgedu.net.cn ~]# mysql -h 192.168.1.1 -P 4000 -u fgedu -p -e “DESCRIBE
fgedudb.fgedu_users;”

– 检查关键数据:
[root@fgedu.net.cn ~]# mysql -h 192.168.1.1 -P 4000 -u fgedu -p -e “SELECT * FROM
fgedudb.fgedu_users ORDER BY id DESC LIMIT 10;”

### 步骤4:启动应用服务
– 启动应用服务:
[root@fgedu.net.cn ~]# systemctl start app.service

## 3. 案例效果
– 恢复成功:fgedu_users表数据已恢复
– 恢复时间:约5分钟
– 数据完整:所有数据都已恢复
– 业务影响:最小化,只停止了相关应用服务
– 验证结果:数据量和结构与备份一致

4.2 库级恢复实战案例

# 库级恢复实战案例

## 1. 案例背景
– 系统:TiDB 7.5.0
– 业务:金融系统
– 问题:fgedudb数据库损坏,需要从备份恢复
– 备份:存在全量备份(20240101-000000)
– 需求:恢复fgedudb数据库的所有数据

## 2. 实施步骤

### 步骤1:环境准备
– 检查TiDB集群状态:
[root@fgedu.net.cn ~]# tiup cluster status fgedu-tidb

– 检查备份文件:
[root@fgedu.net.cn ~]# ls -la /tidb/backup/full/20240101-000000/

– 停止相关应用服务:
[root@fgedu.net.cn ~]# systemctl stop finance.service

### 步骤2:执行库级恢复
– 执行库级恢复命令:
[root@fgedu.net.cn ~]# tiup br restore db –pd “192.168.1.1:2379” –storage
“local:///tidb/backup/full/20240101-000000” –db fgedudb

输出:
[2024-01-04 10:00:00] [info] [restore.go:123] [“db restore start”]
[2024-01-04 10:00:05] [info] [restore.go:145] [“restore meta done”]
[2024-01-04 10:15:15] [info] [restore.go:167] [“restore data done”]
[2024-01-04 10:15:20] [info] [restore.go:189] [“db restore success”]

### 步骤3:验证恢复结果
– 检查数据库:
[root@fgedu.net.cn ~]# mysql -h 192.168.1.1 -P 4000 -u fgedu -p -e “SHOW DATABASES;”

输出:
+——————–+
| Database |
+——————–+
| fgedudb |
| information_schema |
| mysql |
| performance_schema |
| sys |
+——————–+

– 检查表:
[root@fgedu.net.cn ~]# mysql -h 192.168.1.1 -P 4000 -u fgedu -p -e “SHOW TABLES IN fgedudb;”

– 检查数据量:
[root@fgedu.net.cn ~]# mysql -h 192.168.1.1 -P 4000 -u fgedu -p -e “SELECT COUNT(*) FROM
fgedudb.fgedu_users;”
[root@fgedu.net.cn ~]# mysql -h 192.168.1.1 -P 4000 -u fgedu -p -e “SELECT COUNT(*) FROM
fgedudb.fgedu_transactions;”

### 步骤4:启动应用服务
– 启动应用服务:
[root@fgedu.net.cn ~]# systemctl start finance.service

## 3. 案例效果
– 恢复成功:fgedudb数据库已恢复
– 恢复时间:约15分钟
– 数据完整:所有表和数据都已恢复
– 业务影响:中等,停止了金融服务
– 验证结果:数据库结构和数据与备份一致

4.3 灾难恢复实战案例

# 灾难恢复实战案例

## 1. 案例背景
– 系统:TiDB 7.5.0
– 业务:医疗系统
– 灾难:主数据中心发生火灾,需要从异地备份恢复
– 备份:存在异地存储的全量备份(20240101-000000)
– 需求:在新的数据中心恢复医疗系统数据

## 2. 实施步骤

### 步骤1:环境准备
– 部署新的TiDB集群:
[root@fgedu.net.cn ~]# tiup cluster deploy fgedu-tidb-new v7.5.0 topology.yaml –user root -p
[root@fgedu.net.cn ~]# tiup cluster start fgedu-tidb-new

– 从异地存储复制备份:
[root@fgedu.net.cn ~]# rsync -avz 192.168.2.100:/tidb/backup/dr/full/20240101-000000
/tidb/restore/

### 步骤2:执行全库恢复
– 执行全库恢复命令:
[root@fgedu.net.cn ~]# tiup br restore full –pd “192.168.1.10:2379” –storage
“local:///tidb/restore/20240101-000000”

输出:
[2024-01-04 14:00:00] [info] [restore.go:123] [“full restore start”]
[2024-01-04 14:00:05] [info] [restore.go:145] [“restore meta done”]
[2024-01-04 14:45:15] [info] [restore.go:167] [“restore data done”]
[2024-01-04 14:45:20] [info] [restore.go:189] [“full restore success”]

### 步骤3:验证恢复结果
– 检查数据库:
[root@fgedu.net.cn ~]# mysql -h 192.168.1.10 -P 4000 -u fgedu -p -e “SHOW DATABASES;”

– 检查表:
[root@fgedu.net.cn ~]# mysql -h 192.168.1.10 -P 4000 -u fgedu -p -e “SHOW TABLES IN fgedudb;”

– 检查数据量:
[root@fgedu.net.cn ~]# mysql -h 192.168.1.10 -P 4000 -u fgedu -p -e “SELECT COUNT(*) FROM
fgedudb.fgedu_patients;”
[root@fgedu.net.cn ~]# mysql -h 192.168.1.10 -P 4000 -u fgedu -p -e “SELECT COUNT(*) FROM
fgedudb.fgedu_medical_records;”

### 步骤4:切换业务流量
– 更新DNS:将业务流量指向新集群
– 启动应用服务:
[root@fgedu.net.cn ~]# systemctl start medical.service

## 3. 案例效果
– 灾难恢复成功:从异地备份恢复数据
– 恢复时间:约2小时(包括集群部署)
– 数据完整:所有数据都已恢复
– 业务连续性:在可接受的时间内恢复业务
– 灾备方案有效:验证了异地备份的重要性

生产环境建议:根据业务需求和数据量选择合适的恢复工具和策略,确保恢复过程高效、安全。from tidb视频:www.itpux.com

Part05-风哥经验总结与分享

5.1 最佳实践

TiDB单表恢复与库级恢复的最佳实践:

  • 恢复工具选择最佳实践:
    • 大规模数据:使用BR工具进行物理恢复
    • 小数据量:使用Dumpling工具进行逻辑恢复
    • 近实时恢复:使用TiCDC进行实时同步
    • 跨版本恢复:使用Dumpling工具
  • 恢复策略最佳实践:
    • 制定详细的恢复计划
    • 定期测试恢复流程
    • 备份验证与恢复测试相结合
    • 建立恢复演练机制
  • 恢复流程最佳实践:
    • 准备充分:确认备份文件完整性
    • 操作规范:严格按照恢复流程执行
    • 监控到位:实时监控恢复过程
    • 验证全面:确保恢复结果正确
  • 恢复管理最佳实践:
    • 文档化:记录恢复过程和结果
    • 自动化:使用脚本自动执行恢复
    • 告警化:设置恢复过程告警
    • 优化化:持续优化恢复流程

5.2 恢复技巧

# 恢复技巧

## 1. 单表恢复技巧
– 选择合适的恢复工具:
– 大规模表:使用BR工具
– 小规模表:使用Dumpling工具

– 优化恢复性能:
– 调整BR工具的并发度:–concurrency
– 确保存储性能充足
– 确保网络带宽充足

– 避免影响其他表:
– 停止相关应用服务
– 备份目标表(可选)
– 恢复后验证其他表

– 处理表结构变更:
– 如果表结构变更,使用Dumpling工具
– 先恢复表结构,再恢复数据
– 处理结构不兼容的情况

## 2. 库级恢复技巧
– 选择合适的恢复工具:
– 大规模数据库:使用BR工具
– 小规模数据库:使用Dumpling工具

– 优化恢复性能:
– 调整BR工具的并发度:–concurrency
– 确保存储性能充足
– 确保网络带宽充足

– 避免影响其他数据库:
– 停止相关应用服务
– 备份目标数据库(可选)
– 恢复后验证其他数据库

– 处理数据库结构变更:
– 如果数据库结构变更,使用Dumpling工具
– 先恢复数据库结构,再恢复数据
– 处理结构不兼容的情况

## 3. 恢复验证技巧
– 数据完整性验证:
– 检查数据量
– 检查关键数据
– 检查数据一致性

– 业务功能验证:
– 测试业务查询
– 测试业务操作
– 测试业务流程

– 性能验证:
– 检查系统性能
– 检查查询性能
– 检查写入性能

– 安全验证:
– 检查权限设置
– 检查数据加密
– 检查访问控制

## 4. 恢复故障处理技巧
– 恢复失败处理:
– 检查错误日志
– 分析失败原因
– 采取相应措施
– 重新执行恢复

– 恢复超时处理:
– 检查系统资源
– 调整恢复参数
– 优化存储性能
– 重新执行恢复

– 恢复数据不一致处理:
– 检查备份文件
– 检查恢复过程
– 重新执行恢复
– 验证恢复结果

– 恢复后业务异常处理:
– 检查业务日志
– 分析异常原因
– 采取相应措施
– 验证业务功能

5.3 常见问题与解决

# 常见问题与解决

## 1. 单表恢复问题

### 问题1:单表恢复失败
– 症状:单表恢复过程中出现错误,恢复失败
– 原因:
– 备份文件损坏
– 表结构不匹配
– 权限不足
– 存储空间不足
– 解决:
– 检查备份文件完整性
– 确保表结构匹配
– 确保权限正确
– 确保存储空间充足

### 问题2:单表恢复时间过长
– 症状:单表恢复执行时间超过预期
– 原因:
– 表数据量大
– 存储性能不足
– 网络带宽不足
– 并发度设置不合理
– 解决:
– 增加并发度
– 优化存储性能
– 确保网络带宽充足
– 考虑使用BR工具

### 问题3:单表恢复后数据不一致
– 症状:单表恢复后数据与预期不一致
– 原因:
– 备份文件不完整
– 恢复过程中断
– 表结构变更
– 数据冲突
– 解决:
– 验证备份文件完整性
– 确保恢复过程不中断
– 处理表结构变更
– 解决数据冲突

### 问题4:单表恢复后业务异常
– 症状:单表恢复后业务无法正常运行
– 原因:
– 数据不完整
– 表结构不匹配
– 依赖关系破坏
– 业务逻辑错误
– 解决:
– 确保数据完整
– 确保表结构匹配
– 恢复依赖表
– 检查业务逻辑

## 2. 库级恢复问题

### 问题1:库级恢复失败
– 症状:库级恢复过程中出现错误,恢复失败
– 原因:
– 备份文件损坏
– 数据库结构不匹配
– 权限不足
– 存储空间不足
– 解决:
– 检查备份文件完整性
– 确保数据库结构匹配
– 确保权限正确
– 确保存储空间充足

### 问题2:库级恢复时间过长
– 症状:库级恢复执行时间超过预期
– 原因:
– 数据库数据量大
– 存储性能不足
– 网络带宽不足
– 并发度设置不合理
– 解决:
– 增加并发度
– 优化存储性能
– 确保网络带宽充足
– 考虑使用BR工具

### 问题3:库级恢复后数据不一致
– 症状:库级恢复后数据与预期不一致
– 原因:
– 备份文件不完整
– 恢复过程中断
– 数据库结构变更
– 数据冲突
– 解决:
– 验证备份文件完整性
– 确保恢复过程不中断
– 处理数据库结构变更
– 解决数据冲突

### 问题4:库级恢复后业务异常
– 症状:库级恢复后业务无法正常运行
– 原因:
– 数据不完整
– 数据库结构不匹配
– 依赖关系破坏
– 业务逻辑错误
– 解决:
– 确保数据完整
– 确保数据库结构匹配
– 恢复依赖数据库
– 检查业务逻辑

## 3. 恢复工具问题

### 问题1:BR工具恢复失败
– 症状:使用BR工具恢复时出现错误
– 原因:
– 备份文件格式错误
– TiDB版本不兼容
– 权限不足
– 网络问题
– 解决:
– 检查备份文件格式
– 确保TiDB版本兼容
– 确保权限正确
– 检查网络连接

### 问题2:Dumpling工具恢复失败
– 症状:使用Dumpling工具恢复时出现错误
– 原因:
– SQL语法错误
– 表结构不匹配
– 权限不足
– 存储空间不足
– 解决:
– 检查SQL语法
– 确保表结构匹配
– 确保权限正确
– 确保存储空间充足

### 问题3:TiCDC同步失败
– 症状:使用TiCDC同步时出现错误

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

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

微信号:itpux-com

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