# 考培练系统数据库回滚指南 ## 概述 考培练系统支持基于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` - 提交问题报告:包含错误信息、操作步骤、时间点等 --- **重要提醒**:数据库回滚是高风险操作,请务必在充分理解操作影响的前提下执行,建议在测试环境先验证回滚方案的有效性。