TiDB闪回案例:误删表快速恢复实践
案例背景
某金融企业核心交易系统使用TiDB集群(v6.5.0),因运维人员误操作执行DROP TABLE命令,导致关键业务表transactions被删除。该表存储当日交易数据,数据量约120GB,删除时间点为2025-06-15 14:30:22。
技术原理
TiDB通过MVCC机制实现闪回功能,其核心逻辑为:
- 版本链保留:每个Key的修改会生成带时间戳的版本(如
Key1_Version3) - GC安全点控制:通过
tikv_gc_safe_point参数确定可恢复时间窗口(默认10分钟) - 闪回实现方式:将数据恢复到指定时间点的最后一个有效版本
操作步骤
1. 确认可闪回时间窗口
SELECT VARIABLE_NAME, VARIABLE_VALUE
FROM mysql.tidb
WHERE variable_name IN ('tikv_gc_safe_point', 'tidb_gc_life_time');
输出结果:
+--------------------+-----------------------------+
| VARIABLE_NAME | VARIABLE_VALUE |
+--------------------+-----------------------------+
| tikv_gc_safe_point | 2025-06-15 14:25:18 +0800 |
| tidb_gc_life_time | 10m0s |
+--------------------+-----------------------------+
确认删除时间点14:30:22在安全点14:25:18之后,且tidb_gc_life_time为10分钟,当前时间14:32:00仍在可恢复窗口内。
2. 执行闪回恢复
FLASHBACK TABLE transactions TO transactions_20250615;
执行结果:
Query OK, 0 rows affected (1.24 sec)
-- 系统自动生成新表transactions_20250615,包含14:30:22前的数据
3. 数据验证
-- 检查记录数
SELECT COUNT(*) FROM transactions_20250615;
-- 输出:12,456,789(与删除前一致)
-- 验证关键交易
SELECT * FROM transactions_20250615
WHERE transaction_id = 'TX20250615000123';
-- 成功返回被删除的交易记录
4. 业务切换 将应用连接重定向至恢复表,或通过重命名操作:
RENAME TABLE transactions TO transactions_deleted,
transactions_20250615 TO transactions;
关键点分析
-
时间窗口控制:
- 默认GC生命周期为10分钟,可通过调整
tidb_gc_life_time参数延长(最大建议72小时) - 实际可恢复时间 =
tikv_gc_safe_point~ 当前时间
- 默认GC生命周期为10分钟,可通过调整
-
性能影响:
- 闪回操作耗时1.24秒,远低于物理备份恢复的15分钟
- 对线上业务无感知,无需停止服务
-
限制条件:
- 仅支持表级恢复,不支持行级闪回
- 目标表必须不存在或为空
- 恢复前后排序规则(
new_collations_enabled_on_first_bootstrap)需一致
最佳实践建议
-
安全点监控:
SHOW VARIABLES LIKE 'tidb_gc_life_time'; -- 建议生产环境设置为1小时(3600s) -
应急预案:
- 预先配置闪回权限:
GRANT FLASHBACK ON *.* TO 'recovery_user'@'%'; - 制定《数据误操作恢复SOP》,明确闪回操作审批流程
- 预先配置闪回权限:
-
混合恢复策略:
- 对于超过GC窗口的数据,采用BR全量备份+Binlog增量恢复:
# 全量恢复 tiup br restore full --pd "172.20.12.52:2379" \ --storage "s3://tidb-backup/20250615" # 增量恢复至14:30:22 tiup br restore incremental --pd "172.20.12.52:2379" \ --lastbackupts "2025-06-15 14:25:18" \ --stop-datetime "2025-06-15 14:30:22"
- 对于超过GC窗口的数据,采用BR全量备份+Binlog增量恢复:
扩展
-
>=6.4版本也支持集群和数据库闪回,具体可以参考官网。