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

6.3 KiB
Raw Blame History

考培练系统数据库回滚指南

概述

考培练系统支持基于MySQL Binlog的数据库回滚功能可以快速恢复误操作导致的数据变更。本指南提供了完整的回滚操作流程和最佳实践。

回滚方案对比

方案 适用场景 优点 缺点 推荐度
Binlog回滚 精确时间点回滚 精确、完整 需要技术知识
软删除恢复 删除操作回滚 简单、安全 仅限软删除
备份恢复 大规模回滚 完整恢复 可能丢失新数据
手动修复 小范围修复 灵活 容易出错

一、Binlog回滚推荐

1.1 前提条件检查

# 检查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 使用专用回滚工具

查看最近变更

cd /Users/nongjun/Desktop/Ai公司/本地开发与测试/kaopeilian-backend
python scripts/kaopeilian_rollback.py --list --hours 24

回滚用户操作

# 模拟回滚(查看会执行什么操作)
python scripts/kaopeilian_rollback.py --rollback-user 123 --operation-type delete

# 实际执行回滚
python scripts/kaopeilian_rollback.py --rollback-user 123 --operation-type delete --execute

回滚课程操作

# 回滚课程删除
python scripts/kaopeilian_rollback.py --rollback-course 456 --operation-type delete --execute

# 回滚课程更新(需要手动处理)
python scripts/kaopeilian_rollback.py --rollback-course 456 --operation-type update

回滚考试操作

# 回滚考试记录(会同时删除考试和考试结果)
python scripts/kaopeilian_rollback.py --rollback-exam 789 --execute

1.3 使用简化回滚工具

查看Binlog文件

python scripts/simple_rollback.py --list

基于时间点回滚

# 模拟回滚到指定时间点
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工具

# 查看帮助
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 恢复用户

-- 恢复软删除的用户
UPDATE users SET is_deleted = FALSE, deleted_at = NULL WHERE id = 123;

2.2 恢复课程

-- 恢复软删除的课程
UPDATE courses SET is_deleted = FALSE, deleted_at = NULL WHERE id = 456;

2.3 恢复岗位

-- 恢复软删除的岗位
UPDATE positions SET is_deleted = FALSE, deleted_at = NULL WHERE id = 789;

三、备份恢复

3.1 创建完整备份

# 创建数据库完整备份
docker exec kaopeilian-mysql mysqldump -uroot -proot --single-transaction --routines --triggers kaopeilian > backup_$(date +%Y%m%d_%H%M%S).sql

3.2 恢复备份

# 恢复数据库备份
docker exec -i kaopeilian-mysql mysql -uroot -proot kaopeilian < backup_20241220_103000.sql

四、常见回滚场景

4.1 误删用户

# 1. 查看最近删除的用户
python scripts/kaopeilian_rollback.py --list --hours 1

# 2. 恢复软删除的用户
python scripts/kaopeilian_rollback.py --rollback-user 123 --operation-type delete --execute

4.2 误删课程

# 1. 恢复软删除的课程
python scripts/kaopeilian_rollback.py --rollback-course 456 --operation-type delete --execute

# 2. 恢复课程关联数据(如果需要)
# 手动执行SQL恢复课程资料、知识点等

4.3 误删考试记录

# 1. 恢复考试记录(会同时恢复考试结果)
python scripts/kaopeilian_rollback.py --rollback-exam 789 --execute

4.4 批量误操作

# 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未启用

# 检查MySQL配置
docker exec kaopeilian-mysql mysql -uroot -proot -e "SHOW VARIABLES LIKE 'log_bin';"

# 如果未启用需要修改MySQL配置并重启

6.2 Binlog文件过大

# 清理旧的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
  • 提交问题报告:包含错误信息、操作步骤、时间点等

重要提醒:数据库回滚是高风险操作,请务必在充分理解操作影响的前提下执行,建议在测试环境先验证回滚方案的有效性。