docs: document isolated MySQL 8 workflow (#5)

This commit is contained in:
ila
2026-08-20 22:54:02 +08:00
parent 9b9e7c33ec
commit 071745d948
+40 -12
View File
@@ -2,8 +2,8 @@
generated: true (请先修改 Gitea Wiki,禁止直接编辑本文件)
wiki_page: Local-Development-and-Verification
wiki_url: https://git.ilapage.cn/OPC/chorus/wiki/Local-Development-and-Verification.-
wiki_revision: 4cb7c477267bfc28c8582e275e02e20acfc2c83e
synchronized_at: 2026-08-20T07:01:16Z
wiki_revision: c5dd8e3415c206839b1252ae32c61f48bdb21198
synchronized_at: 2026-08-20T14:51:55Z
<!-- gitea-wiki-mirror:end -->
# 本地开发与验证
@@ -23,7 +23,7 @@ synchronized_at: 2026-08-20T07:01:16Z
| pnpm | 9.15.1,由 packageManager/Corepack 固定 | `pnpm --version` |
| Tailwind | standalone,仅 portal 样式 | `tailwindcss --help` |
2026-08-20 盘点:本机 Go 1.23.0、MySQL 5.7.38、未安装 migrate,不能用于产品构建或迁移验收;Node 22.22.1 可用,但当前全局 pnpm 11.21.0,应按 admin-ui 的 `packageManager` 使用 pnpm 9.15.1。升级环境必须单独完成,不伪造验证结果。
2026-08-20 已完成 MVP-0 环境基线:便携 Go 1.26.5、golang-migrate v4.19.1 和隔离 MySQL 8.4.8 已验证。Chorus 专用实例监听 `127.0.0.1:3308`,使用独立数据目录和测试账号;既有 `3307` 实例与 MySQL 5.7 不受影响。Node 22.22.1 可用;admin-ui 后续仍必须按 `packageManager` 使用 pnpm 9.15.1,不能直接采用全局 pnpm 11。
固定来源:
@@ -56,21 +56,49 @@ $env:GITEA_URL = "https://git.ilapage.cn"
python dev_scripts/harness.py sync --check
```
### 2. 准备隔离数据库(产品代码落地后)
### 2. 进入固定工具环境并连接隔离数据库
创建两个无生产数据的库:一个跑应用迁移测试,一个用于 go-admin 结构研究/代码生成。两者不得指向共享或生产实例。
工具和凭据都位于仓库外。以下占位路径由维护者替换为自己的本机工具目录;环境文件不得提交,也不得把展开后的 DSN 输出到终端、日志、工单或 Wiki。
```powershell
mysql -u root -p -e "CREATE DATABASE chorus_test DEFAULT CHARSET utf8mb4;"
mysql -u root -p -e "CREATE DATABASE chorus_codegen DEFAULT CHARSET utf8mb4;"
$env:CHORUS_DSN = "user:pass@tcp(127.0.0.1:3306)/chorus_test?parseTime=true&charset=utf8mb4"
migrate -path migrations -database "<golang-migrate MySQL URL>" up
migrate -path migrations -database "<golang-migrate MySQL URL>" down
migrate -path migrations -database "<golang-migrate MySQL URL>" up
$tools = "<本机工具目录>"
$env:PATH = "$tools\go1.26.5\bin;$tools\migrate-v4.19.1;$env:PATH"
. "$tools\chorus-test.env.ps1"
go version
migrate -version
mysql --version
```
连接串格式必须按 golang-migrate 的 MySQL driver 验证,不把 GORM DSN 直接拼成未经验证的 URL。每个迁移先 up、down、再 up;从空库重放全部迁移才算通过。
当前已验证变量包括 `CHORUS_MYSQL_HOST`、`CHORUS_MYSQL_PORT`、`CHORUS_MYSQL_DATABASE`、`CHORUS_MYSQL_USER`、`CHORUS_MYSQL_PASSWORD`、`CHORUS_DB_DSN` 和 `CHORUS_MIGRATE_URL`。应用使用 GORM DSN,迁移工具使用单独验证过的 MySQL URL,不在两种格式之间临时拼接。
专用实例的可复制启动和停止方式如下;`my.ini` 必须绑定 `127.0.0.1`,并指定独立端口、数据目录、日志和 PID 文件。
```powershell
$mysqlHome = "<MySQL 8 安装目录>"
$instance = "<Chorus MySQL 实例目录>"
Start-Process -FilePath "$mysqlHome\bin\mysqld.exe" `
-ArgumentList "--defaults-file=$instance\my.ini", "--console" `
-WindowStyle Hidden
$env:MYSQL_PWD = $env:CHORUS_MYSQL_ROOT_PASSWORD
& "$mysqlHome\bin\mysqladmin.exe" --protocol=tcp `
--host=127.0.0.1 --port=3308 --user=root shutdown
$env:MYSQL_PWD = $null
```
能力探测使用构造查询,不创建业务表:
```powershell
$env:MYSQL_PWD = $env:CHORUS_MYSQL_PASSWORD
mysql --protocol=tcp --host=$env:CHORUS_MYSQL_HOST `
--port=$env:CHORUS_MYSQL_PORT --user=$env:CHORUS_MYSQL_USER `
--database=$env:CHORUS_MYSQL_DATABASE `
--execute="START TRANSACTION; SELECT id FROM (SELECT 1 AS id) AS capability_probe FOR UPDATE SKIP LOCKED; ROLLBACK;"
$env:MYSQL_PWD = $null
```
业务迁移落地后,每个迁移必须在该隔离库执行 up、down、再 up,并从空库重放全部迁移。`chorus_codegen` 只在 MVP-1 的 go-admin 结构研究/代码生成工单中另行创建,不提前扩大当前账号权限。
### 3. go-admin schema-first 生成(MVP-1)
1. 先在 `chorus_codegen` 执行同一套版本化 SQL。