Files
012-kaopeilian/backend/docs/database_rollback_guide.md
111 998211c483 feat: 初始化考培练系统项目
- 从服务器拉取完整代码
- 按框架规范整理项目结构
- 配置 Drone CI 测试环境部署
- 包含后端(FastAPI)、前端(Vue3)、管理端

技术栈: Vue3 + TypeScript + FastAPI + MySQL
2026-01-24 19:33:28 +08:00

228 lines
6.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 考培练系统数据库回滚指南
## 概述
考培练系统支持基于MySQL Binlog的数据库回滚功能可以快速恢复误操作导致的数据变更。本指南提供了完整的回滚操作流程和最佳实践。
## 回滚方案对比
| 方案 | 适用场景 | 优点 | 缺点 | 推荐度 |
|------|----------|------|------|--------|
| **Binlog回滚** | 精确时间点回滚 | 精确、完整 | 需要技术知识 | ⭐⭐⭐⭐⭐ |
| **软删除恢复** | 删除操作回滚 | 简单、安全 | 仅限软删除 | ⭐⭐⭐⭐ |
| **备份恢复** | 大规模回滚 | 完整恢复 | 可能丢失新数据 | ⭐⭐⭐ |
| **手动修复** | 小范围修复 | 灵活 | 容易出错 | ⭐⭐ |
## 一、Binlog回滚推荐
### 1.1 前提条件检查
```bash
# 检查Binlog是否启用
docker exec kaopeilian-mysql mysql -uroot -proot -e "SHOW VARIABLES LIKE 'log_bin';"
# 检查Binlog格式推荐ROW格式
docker exec kaopeilian-mysql mysql -uroot -proot -e "SHOW VARIABLES LIKE 'binlog_format';"
# 查看可用的Binlog文件
docker exec kaopeilian-mysql mysql -uroot -proot -e "SHOW BINARY LOGS;"
```
### 1.2 使用专用回滚工具
#### 查看最近变更
```bash
cd /Users/nongjun/Desktop/Ai公司/本地开发与测试/kaopeilian-backend
python scripts/kaopeilian_rollback.py --list --hours 24
```
#### 回滚用户操作
```bash
# 模拟回滚(查看会执行什么操作)
python scripts/kaopeilian_rollback.py --rollback-user 123 --operation-type delete
# 实际执行回滚
python scripts/kaopeilian_rollback.py --rollback-user 123 --operation-type delete --execute
```
#### 回滚课程操作
```bash
# 回滚课程删除
python scripts/kaopeilian_rollback.py --rollback-course 456 --operation-type delete --execute
# 回滚课程更新(需要手动处理)
python scripts/kaopeilian_rollback.py --rollback-course 456 --operation-type update
```
#### 回滚考试操作
```bash
# 回滚考试记录(会同时删除考试和考试结果)
python scripts/kaopeilian_rollback.py --rollback-exam 789 --execute
```
### 1.3 使用简化回滚工具
#### 查看Binlog文件
```bash
python scripts/simple_rollback.py --list
```
#### 基于时间点回滚
```bash
# 模拟回滚到指定时间点
python scripts/simple_rollback.py --time "2024-12-20 10:30:00"
# 实际执行回滚
python scripts/simple_rollback.py --time "2024-12-20 10:30:00" --execute
```
### 1.4 使用完整Binlog工具
```bash
# 查看帮助
python scripts/binlog_rollback_tool.py --help
# 列出Binlog文件
python scripts/binlog_rollback_tool.py --list-binlogs
# 回滚到指定时间点
python scripts/binlog_rollback_tool.py --time "2024-12-20 10:30:00" --execute
```
## 二、软删除恢复
### 2.1 恢复用户
```sql
-- 恢复软删除的用户
UPDATE users SET is_deleted = FALSE, deleted_at = NULL WHERE id = 123;
```
### 2.2 恢复课程
```sql
-- 恢复软删除的课程
UPDATE courses SET is_deleted = FALSE, deleted_at = NULL WHERE id = 456;
```
### 2.3 恢复岗位
```sql
-- 恢复软删除的岗位
UPDATE positions SET is_deleted = FALSE, deleted_at = NULL WHERE id = 789;
```
## 三、备份恢复
### 3.1 创建完整备份
```bash
# 创建数据库完整备份
docker exec kaopeilian-mysql mysqldump -uroot -proot --single-transaction --routines --triggers kaopeilian > backup_$(date +%Y%m%d_%H%M%S).sql
```
### 3.2 恢复备份
```bash
# 恢复数据库备份
docker exec -i kaopeilian-mysql mysql -uroot -proot kaopeilian < backup_20241220_103000.sql
```
## 四、常见回滚场景
### 4.1 误删用户
```bash
# 1. 查看最近删除的用户
python scripts/kaopeilian_rollback.py --list --hours 1
# 2. 恢复软删除的用户
python scripts/kaopeilian_rollback.py --rollback-user 123 --operation-type delete --execute
```
### 4.2 误删课程
```bash
# 1. 恢复软删除的课程
python scripts/kaopeilian_rollback.py --rollback-course 456 --operation-type delete --execute
# 2. 恢复课程关联数据(如果需要)
# 手动执行SQL恢复课程资料、知识点等
```
### 4.3 误删考试记录
```bash
# 1. 恢复考试记录(会同时恢复考试结果)
python scripts/kaopeilian_rollback.py --rollback-exam 789 --execute
```
### 4.4 批量误操作
```bash
# 1. 基于时间点回滚
python scripts/simple_rollback.py --time "2024-12-20 10:30:00" --execute
# 2. 或使用完整备份恢复
docker exec -i kaopeilian-mysql mysql -uroot -proot kaopeilian < backup_before_operation.sql
```
## 五、最佳实践
### 5.1 回滚前准备
1. **创建备份**:回滚前必须创建当前数据备份
2. **确认时间点**:精确确定需要回滚到的时间点
3. **评估影响**:评估回滚操作对系统的影响
4. **通知用户**:必要时通知相关用户
### 5.2 回滚操作流程
1. **停止服务**:停止可能影响数据的服务
2. **创建备份**:备份当前状态
3. **执行回滚**:使用合适的回滚工具
4. **验证数据**:验证回滚结果
5. **重启服务**:恢复服务运行
6. **记录日志**:记录回滚操作日志
### 5.3 安全注意事项
- 回滚操作不可逆,务必谨慎
- 生产环境回滚前必须在测试环境验证
- 重要操作需要多人确认
- 保留回滚操作日志
## 六、故障排除
### 6.1 Binlog未启用
```bash
# 检查MySQL配置
docker exec kaopeilian-mysql mysql -uroot -proot -e "SHOW VARIABLES LIKE 'log_bin';"
# 如果未启用需要修改MySQL配置并重启
```
### 6.2 Binlog文件过大
```bash
# 清理旧的Binlog文件
docker exec kaopeilian-mysql mysql -uroot -proot -e "PURGE BINARY LOGS BEFORE DATE_SUB(NOW(), INTERVAL 7 DAY);"
```
### 6.3 回滚工具执行失败
1. 检查数据库连接
2. 确认权限设置
3. 查看错误日志
4. 手动执行SQL语句
## 七、监控与预防
### 7.1 设置监控
- 监控Binlog文件大小
- 监控数据库操作日志
- 设置异常操作告警
### 7.2 预防措施
- 定期备份数据库
- 设置操作权限控制
- 实施操作审计
- 提供操作确认机制
## 八、联系支持
如遇到回滚问题,请联系技术支持:
- 查看系统日志:`docker logs kaopeilian-mysql`
- 查看应用日志:`docker logs kaopeilian-backend`
- 提交问题报告:包含错误信息、操作步骤、时间点等
---
**重要提醒**:数据库回滚是高风险操作,请务必在充分理解操作影响的前提下执行,建议在测试环境先验证回滚方案的有效性。