# 数据库迁移说明 本目录包含 KPL 考培练系统的数据库迁移脚本。 ## 迁移脚本列表 | 脚本 | 说明 | 创建时间 | |------|------|----------| | `add_level_badge_system.sql` | 等级与奖章系统 | 2026-01-29 | ## 执行迁移 ### 测试环境(Docker) KPL 测试环境数据库在服务器 Docker 容器中运行: ```bash # 1. SSH 登录 KPL 服务器 ssh root@ # 2. 进入项目目录 cd /www/wwwroot/kpl.ireborn.com.cn # 3. 执行迁移(方法一:直接执行) docker exec -i kpl-mysql-dev mysql -uroot -pnj861021 kpl_dev < backend/migrations/add_level_badge_system.sql # 或者(方法二:交互式执行) docker exec -it kpl-mysql-dev mysql -uroot -pnj861021 kpl_dev # 然后复制粘贴 SQL 脚本内容执行 # 方法三:从本地执行(需要先上传SQL文件到服务器) # scp backend/migrations/add_level_badge_system.sql root@<服务器IP>:/tmp/ # ssh root@<服务器IP> "docker exec -i kpl-mysql-dev mysql -uroot -pnj861021 kpl_dev < /tmp/add_level_badge_system.sql" ``` **注意**:MySQL 容器密码为 `nj861021`(之前通过 `docker exec kpl-mysql-dev env | grep MYSQL` 确认) ### 生产环境 生产环境迁移前请确保: 1. 已备份数据库 2. 在低峰期执行 3. 测试环境验证通过 ```bash # 执行迁移(替换为实际的生产数据库配置) mysql -h -u -p < backend/migrations/add_level_badge_system.sql ``` ## 回滚方法 如需回滚,执行以下 SQL: ```sql DROP TABLE IF EXISTS user_badges; DROP TABLE IF EXISTS badge_definitions; DROP TABLE IF EXISTS exp_history; DROP TABLE IF EXISTS level_configs; DROP TABLE IF EXISTS user_levels; ``` ## 验证迁移 执行以下查询验证表是否创建成功: ```sql SHOW TABLES LIKE '%level%'; SHOW TABLES LIKE '%badge%'; SHOW TABLES LIKE '%exp%'; -- 查看表结构 DESCRIBE user_levels; DESCRIBE exp_history; DESCRIBE badge_definitions; DESCRIBE user_badges; DESCRIBE level_configs; -- 验证初始数据 SELECT COUNT(*) FROM level_configs; -- 应该是 10 条 SELECT COUNT(*) FROM badge_definitions; -- 应该是 20 条 SELECT COUNT(*) FROM user_levels; -- 应该等于用户数 ```