feat(agent-db): 引入 db-conn.sh 统一数据库入口,各 agent 改用专用账号

- 新增 scripts/db-conn.sh:按 agent id 反查中文名,读 .env 后经 MYSQL_PWD 转发给 docker exec,口令不进 argv/stdout,--print 只输出占位符
- new-agent.sh 新增 --adopt 模式(为既有 agent 补建库/账号),与 --reset-password 互斥
- AGENTS.md.tpl 与 11 个 workspace-*/AGENTS.md 改用 db-conn.sh,禁用 root 与 docker exec 直连
- mysql-schema-sync 技能改用 MYSQL_PWD_SQL 环境变量,不再硬编码密码
- 设计文档补附录 A 第 8 条:中文键名无法注入 agent 环境的三条实测依据
This commit is contained in:
2026-09-16 11:30:55 +08:00
parent 75d3aa8067
commit 31c9958741
16 changed files with 315 additions and 14 deletions
@@ -1,6 +1,6 @@
---
name: "mysql-schema-sync"
description: "MySQL 表结构同步最佳实践:跨环境同步 DDL,处理 CREATE/ALTER 失败场景"
description: "MySQL 表结构同步:使用 mysqldump 导出 DDL,生成审核脚本,处理跨环境同步的边界场景"
---
# MySQL 表结构同步最佳实践
@@ -12,20 +12,23 @@ description: "MySQL 表结构同步最佳实践:跨环境同步 DDL,处理 C
## 核心原则
1. **表名必须带数据库前缀** - 如 `dmp_smdm.dmp_md_item_info`,因为生产实例有多个库
2. **不暴露敏感信息** - 脚本中只写库名和表名,IP/密码用环境变量
2. **不暴露敏感信息** - 脚本中不写密码,使用 `${MYSQL_PWD_SQL}` 环境变量
3. **先验证后执行** - 先 SELECT 确认表结构和数据量
4. **CREATE 优先于 ALTER** - 能新建不修改,减少冲突
5. **脚本供审核,不直接执行** - 生成的 SQL 脚本需经审核后再执行
## 脚本生成规范
### 使用 mysqldump 导出结构
```bash
mysqldump -h SOURCE_HOST -P PORT -u USER -p"PASSWORD" \
mysqldump -h SOURCE_HOST -P PORT -u USER -p"${MYSQL_PWD_SQL}" \
--no-data --skip-lock-tables \
DB_NAME > db_struct.sql
```
> 注意:密码从环境变量读取,不硬编码在脚本中。
### 脚本格式要求
```sql
@@ -55,10 +58,12 @@ scripts/YYYYMMDD/
```bash
for sql_file in database__*_struct.sql; do
mysql -h TARGET_HOST -u root -p"PASSWORD" -D database < "$sql_file"
mysql -h TARGET_HOST -u root -p"${MYSQL_PWD_SQL}" -D database < "$sql_file"
done
```
> 注意:上述命令仅用于生成执行脚本参考,实际执行前需经审核。
### ALTER TABLE(修改表)
1. **检查目标表是否存在**
@@ -110,7 +115,7 @@ done
1. **执行前备份**
```bash
mysqldump -h TARGET_HOST -u root -p"PASSWORD" \
mysqldump -h TARGET_HOST -u root -p"${MYSQL_PWD_SQL}" \
--no-data --routines --triggers \
database > backup_before_sync.sql
```