3.1 KiB
3.1 KiB
78 Admin:建立 MySQL 8 配置、连接与迁移基线
- 类型:重构
- 父级大工单:#76
- 所属 MVP / 版本:#77
- 状态:已完成,用户验收通过
- 日期:2026-08-10
- Gitea 工单:http://ilaer.eicp.net:8418/chengma/cmautobuy/issues/78
背景与目标
Admin 原来只支持 SQLite。本任务先建立 MySQL 8.4 的安全连接、版本化 schema 和技术基线,不切换生产业务 SQL,也不修改原 admin.db。
最终方案
- 生产驱动固定
go-sql-driver/mysqlv1.9.2,兼容 Go 1.23;许可证为 MPL-2.0,发布仍需项目负责人确认。 - 数据库密码只从环境变量读取;配置的字符串表示自动打码。
- 默认连接同机
127.0.0.1:3307,连接会话固定 UTC、utf8mb4、严格 SQL mode,并设置超时和有限连接池。 - 启动连接检查 MySQL 8 主版本、目标库、会话时区和字符集。
- MySQL 使用独立
schema_migrations;考虑 DDL 隐式提交,语句可重放,全部完成并通过 schema 自检后才记录版本。 - 当前 SQLite v8 的最终结构已建立为 MySQL schema v1;当前客户端归属唯一性用生成列加唯一索引表达。
- 真实集成测试必须显式开启,且库名必须以
_test结尾,防止清理生产库。 - 历史 SQLite 驱动只保留给单向迁移工具和旧库回归,不再作为最终生产运行时。
改了哪些
admin/config/config.go、config_test.go:MySQL 环境变量配置、默认地址和密码打码测试。admin/repository/mysql_db.go:连接池、运行参数检查、MySQL schema v1、迁移和 schema 自检。admin/repository/mysql_db_integration_test.go:受_test库名门禁保护的真实 MySQL 8 集成测试。admin/go.mod、go.sum:固定 MySQL 驱动 v1.9.2。admin/AGENTS.md与docs/admin/00~03/06:更新最终 MySQL-only 生产决策、迁移期边界和测试门禁。
验收结果
| 验收标准 | 结果 |
|---|---|
| 固定 Go 1.23 构建 MySQL 驱动并记录版本/许可证 | 通过 |
| DSN 来源安全且错误/字符串不泄露密码 | 通过 |
| 空 MySQL 8.4 建立完整 schema,重复执行无副作用 | 通过(真实 8.4.8) |
| 版本、UTC、utf8mb4、表和关键列自检 | 通过 |
| 基线明确 MySQL-only、不双写、不开放公网端口 | 通过 |
| SQLite 仍可用于后续只读迁移和历史回归 | 通过 |
测试
- 执行的命令:
$env:GOTOOLCHAIN='go1.23.0'; go build ./...; go test ./... -count=1; go vet ./...; go mod verify- 通过 SSH 隧道对服务器
/tmp/cmautobuy-mysql8-test-78的隔离 MySQL 8.4.8 实例运行TestMySQLMigrate_真实MySQL8。
- 结果:固定 Go 1.23 全量构建、测试、静态检查和模块校验通过;MySQL schema 首次迁移及重复迁移通过。
- 没验证到的部分:尚未获得线上 3307 实例的 MySQL 管理账号,因此未创建生产数据库/账号;生产切换属于 #81。隔离临时实例保留到后续 MySQL repository 和迁移工具测试完成后统一删除。
相关提交
7e74bf2建立 MySQL 8 数据库基础