Files
cmautobuy/docs/task/78-mysql8数据库基础.md

3.1 KiB
Raw Permalink Blame History

78 Admin:建立 MySQL 8 配置、连接与迁移基线

背景与目标

Admin 原来只支持 SQLite。本任务先建立 MySQL 8.4 的安全连接、版本化 schema 和技术基线,不切换生产业务 SQL,也不修改原 admin.db。

最终方案

  • 生产驱动固定 go-sql-driver/mysql v1.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 数据库基础