feat: 建立 MySQL 8 数据库基础 (#78)

This commit is contained in:
chengma
2026-08-10 01:22:22 +08:00
parent 93bbca88a8
commit 7e74bf210d
12 changed files with 623 additions and 41 deletions
+10 -6
View File
@@ -48,7 +48,7 @@
### 2.2 集成测试
用临时 SQLite 覆盖:
用独立、库名以 `_test` 结尾的真实 MySQL 8.4 测试库覆盖:
- 完整导入 → 建采集任务 → 模拟 Client 提交结果 → `collect_status` 变 `collected`;
- 并发 `claim`:两个客户端同时领,只有一个拿到;
@@ -93,7 +93,8 @@
| 迁移前备份或用可回滚步骤 | `data/` 在升级时保留,迁移失败会毁掉全部历史 |
| **不得在启动时删库重建** | 同上 |
`[建议]` 导入前自动把 `admin.db` 复制一份到 `data/backup/`,保留最近几份。
`[必须]` 生产变更前执行 MySQL 备份;SQLite 最终迁移前把 `admin.db` 复制到
`data/backup/` 并保持只读,至少保留到生产验收完成。
## 4. Web 安全
@@ -166,7 +167,7 @@
## 7. 性能
规模很小(个位数操作员、单机运行),不要提前优化。但下面几条是基本功:
规模很小(个位数操作员、集中部署),不要提前优化。但下面几条是基本功:
- `[必须]` 搜索、排序、分页走**数据库查询**,不要一次查全量再在内存里过滤。
- `[必须]` 常用查询有索引(见 [03 数据模型](03-data-model.md) 里的 `CREATE INDEX`)。
@@ -182,7 +183,7 @@
| 3 | `go test ./...` 全绿 | 不允许有跳过而未说明的用例 | 开发者 |
| 4 | 五个页面能正常打开 | 起服务跑一遍 | 开发者 |
| 5 | 样本导入条数正确 | 导入参考样本(需向项目负责人索取,放 `raw_data/`),应得 5195 商品 + 6092 SKU | 开发者 |
| 6 | 数据库从上一版本迁移成功 | 拿旧 `admin.db` 副本启动新版本,人工数据不丢 | 开发者 |
| 6 | 数据库升级和 SQLite 单向迁移成功 | 隔离 MySQL 升级通过;旧 `admin.db` 迁移后逐表核对一致 | 开发者 |
| 7 | 契约测试通过 | [04 §9 清单](04-client-api.md)逐条 | 开发者 |
| 8 | 干净环境启动 | 没装过本项目的机器上 `go run .` 或跑 exe | 开发者 |
| 9 | 日志和页面无敏感信息 | 翻一遍 `data/logs/` | 开发者 |
@@ -194,6 +195,9 @@
第 10 项开发者**不要自己判断放行**,把包名和许可证类型报给项目负责人。
当前新增生产数据库驱动:`github.com/go-sql-driver/mysql` v1.9.2,许可证
**MPL-2.0**。技术验证通过不代表许可证已获发布批准,仍需项目负责人确认门禁 10。
## 9. 打包
`[待定]` 打包动作属于 MVP 之后,但策略现在定下来:
@@ -203,7 +207,7 @@
- 模板和静态文件用 `//go:embed` 打进 exe,**不要散在外面**,
否则用户可能改坏或删掉;
- `data/` 留在 exe 旁边,**升级时保留**,见 [02 架构](02-architecture.md) §6;
- 升级方式:换掉 exe,`data/` 不动,靠 `PRAGMA user_version` 自动迁移。
- 升级方式:替换服务程序,先备份 MySQL,再由 `schema_migrations` 追加升级。
产出目录:
@@ -211,7 +215,7 @@
CMAutoBuyAdmin/
├── admin.exe 单文件,模板和静态资源都在里面
└── data/ 数据,升级时保留
├── admin.db
├── backup/ 迁移前 SQLite 只读备份
├── logs/
└── uploads/
```