pangu-user-platform/backend/pangu-modules/pangu-business/sql/DEPLOYMENT_GUIDE.md

113 lines
3.1 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.

# 生产环境部署指南 - 学校班级ID迁移
## 背景说明
由于雪花算法生成的 ID19位数字超出了 JavaScript 安全整数范围(`9007199254740991`),导致前端在处理 `pg_school_class.id` 时会丢失精度。
本次更新将 `pg_school_class` 表的 ID 生成策略从雪花算法改为数据库自增。
## 涉及的代码变更
| 文件 | 变更内容 |
|------|----------|
| `PgSchoolClass.java` | `@TableId(type = IdType.ASSIGN_ID)``@TableId(type = IdType.AUTO)` |
| `SchoolClassIdMigration.java` | 新增,应用启动时自动迁移(仅开发环境使用) |
## 部署步骤
### 1. 准备工作
- [ ] 通知相关人员,安排维护窗口
- [ ] 备份生产数据库(完整备份)
- [ ] 准备好回滚方案
### 2. 执行数据库迁移
**重要:在部署新代码之前执行!**
```bash
# 连接到生产数据库
mysql -h <host> -u <user> -p <database>
# 执行迁移脚本
source production_migrate_school_class_id.sql
```
脚本执行过程中会显示:
- 需要迁移的记录数
- ID 映射详情旧ID → 新ID
- 数据完整性验证结果
### 3. 验证迁移结果
确认脚本输出中所有检查项都显示 `✓ 通过`
- 数据完整性检查
- 学生关联检查
- ID范围检查
### 4. 部署新代码
```bash
# 停止应用服务
systemctl stop pangu-business
# 部署新版本 JAR
cp pangu-business-new.jar /opt/pangu/pangu-business.jar
# 启动应用服务
systemctl start pangu-business
```
**注意**:新代码中包含 `SchoolClassIdMigration.java`,但由于数据库已经迁移完成,该组件会检测到无需迁移并跳过。
### 5. 功能验证
- [ ] 登录系统,访问学生管理页面
- [ ] 查看学生列表,确认班级名称正常显示
- [ ] 编辑学生,选择班级后保存
- [ ] 再次编辑该学生,确认班级信息正确回显
- [ ] 新增班级,确认功能正常
### 6. 清理临时表
确认功能正常后,执行清理:
```sql
DROP TABLE IF EXISTS tmp_school_class_id_mapping;
DROP TABLE IF EXISTS pg_school_class_backup_prod;
DROP TABLE IF EXISTS pg_student_class_backup_prod;
```
## 回滚方案
如果迁移出现问题,执行回滚脚本:
```bash
mysql -h <host> -u <user> -p <database>
source production_rollback_school_class_id.sql
```
回滚后需要部署旧版本代码。
## 常见问题
### Q: 迁移脚本执行失败怎么办?
A: 脚本在执行过程中创建了备份表,可以通过回滚脚本恢复。如果回滚脚本也失败,使用完整数据库备份恢复。
### Q: 新代码部署后,自动迁移组件会重复执行吗?
A: 不会。`SchoolClassIdMigration.java` 会检测是否存在超出安全范围的 ID如果没有则跳过迁移。
### Q: 迁移后新增的班级 ID 是什么样的?
A: 新增班级的 ID 将是小的自增数字(如 113, 114, 115...),不再是 19 位的雪花 ID。
## 文件清单
| 文件 | 用途 |
|------|------|
| `production_migrate_school_class_id.sql` | 生产环境迁移脚本 |
| `production_rollback_school_class_id.sql` | 回滚脚本 |
| `DEPLOYMENT_GUIDE.md` | 本文档 |