feat: 建立 MySQL 8 数据库基础 (#78)
This commit is contained in:
@@ -13,13 +13,12 @@
|
||||
|---|---|---|
|
||||
| Go | **1.23.0** | `go version` 输出 `go version go1.23.0 windows/amd64` |
|
||||
| Git | 任意较新版本 | `git --version` 有输出 |
|
||||
| DB Browser for SQLite | 任意 | 用来看数据库,可选但强烈建议装 |
|
||||
| MySQL Client | 8.4 | 用于连接独立的 MySQL 8.4 开发/测试库 |
|
||||
|
||||
版本已定为 **go1.23.0**,写在 `admin/go.mod` 里。低于这个版本可能编译不过。
|
||||
|
||||
**不需要装 gcc。** 本项目的 SQLite 驱动是纯 Go 实现的
|
||||
(`modernc.org/sqlite`),不依赖 cgo,这也是选它的原因——
|
||||
`go build` 直接出单个 exe,不用配 C 编译器。
|
||||
**不需要装 gcc。** 生产 MySQL 驱动和历史 SQLite 迁移驱动都是纯 Go;
|
||||
`go build` 不依赖 C 编译器。
|
||||
|
||||
## 2. 拉依赖
|
||||
|
||||
@@ -47,6 +46,7 @@ go mod download
|
||||
```powershell
|
||||
go get github.com/gin-gonic/gin@v1.11.0
|
||||
go get modernc.org/sqlite@v1.38.0
|
||||
go get github.com/go-sql-driver/mysql@v1.9.2
|
||||
go mod tidy
|
||||
```
|
||||
|
||||
@@ -57,13 +57,13 @@ go mod tidy
|
||||
go get github.com/xuri/excelize/v2@v2.9.1
|
||||
```
|
||||
|
||||
这三个是**在 Go 1.23.0 下实测能编译通过的最高版本**,
|
||||
这些是在 Go 1.23.0 下实测能编译通过的固定版本,
|
||||
为什么不能更高见 [admin/AGENTS.md](../../admin/AGENTS.md) 技术栈一节。
|
||||
|
||||
`[必须]` `go.mod` 和 `go.sum` 都要提交 Git,否则别人拉下来版本对不上。
|
||||
|
||||
> SQLite 驱动**不要**换成 `mattn/go-sqlite3`,那个需要 cgo,
|
||||
> 得装 gcc,还会让 `go build` 出不了单文件 exe。
|
||||
> `go-sql-driver/mysql` v1.9.3 起要求 Go 1.24,本项目固定 v1.9.2。
|
||||
> SQLite 驱动只用于历史库迁移,仍不要换成需要 cgo 的 `mattn/go-sqlite3`。
|
||||
|
||||
## 3. 跑起来
|
||||
|
||||
@@ -157,21 +157,34 @@ syb:
|
||||
| `database is locked` | 有别的程序占着数据库 | 关掉 DB Browser 再试;程序运行时只读打开是可以的 |
|
||||
| 导入 Excel 报错但没说哪一行 | 解析器没带行号 | 这是 bug,报错必须带行号,见 [06](06-quality-security.md) §2 |
|
||||
|
||||
## 6. 数据库在哪、怎么看
|
||||
## 6. 数据库在哪里、怎样配置
|
||||
|
||||
跟 Client 一样是**便携模式**——数据都在程序旁边的 `data/` 里:
|
||||
生产数据在 MySQL 8.4 中。Admin 从环境变量读取连接信息:
|
||||
|
||||
```text
|
||||
CMAUTOBUY_DB_HOST=127.0.0.1
|
||||
CMAUTOBUY_DB_PORT=3307
|
||||
CMAUTOBUY_DB_NAME=<独立数据库名>
|
||||
CMAUTOBUY_DB_USER=<最小权限账号>
|
||||
CMAUTOBUY_DB_PASSWORD=<只保存在服务器环境文件中的密码>
|
||||
```
|
||||
|
||||
密码不得写入 `config.yaml`、仓库、日志或工单。线上 MySQL 只监听本机,
|
||||
本地开发通过 SSH 隧道连接独立的 `_test` 数据库。
|
||||
|
||||
程序旁边的 `data/` 只保留日志、上传文件和迁移前的 SQLite 只读备份:
|
||||
|
||||
```text
|
||||
admin/data/
|
||||
├── admin.db 数据库
|
||||
├── backup/ 迁移前的 admin.db 只读备份
|
||||
├── logs/ 运行日志
|
||||
└── uploads/ 上传的 Excel 原件
|
||||
```
|
||||
|
||||
跑源码时在 `admin\data\`;将来打包成 exe 后,在 exe 旁边。
|
||||
|
||||
用 **DB Browser for SQLite** 打开 `admin.db` 就能看数据。
|
||||
每张表什么意思见 [03 数据模型](03-data-model.md)。
|
||||
每张表什么意思见 [03 数据模型](03-data-model.md)。旧 `admin.db` 只能通过
|
||||
单向迁移命令读取,生产 Admin 不再直接打开它。
|
||||
|
||||
> 写代码时**不要自己拼这个路径**,用统一的 `DataDir()` 函数,
|
||||
> 见 [02 架构](02-architecture.md) §6。
|
||||
|
||||
Reference in New Issue
Block a user