616451b29d
原 13 个分散脚本整合为 schema/init.sql 一个文件,来源换成演示环境
正在使用的种子库(结构已与生产核对,89 表基线)。
内容变化(相比旧的 12 文件版本):
- 新增 v1.0.4 前置段:t_export_task(导出中心)、sys_notice_user、
card_channel_assoc.channel_id 扩宽为 varchar(64)、9 条菜单权限
- 修正 3 个真实缺陷:cron 表达式 L 改为 28-31(调度器可解析)、
通道模板 created_dept 103 改为 1(悬空机构致列表恒为空)、
菜单 444 的 path 修正
- 数据库共 91 表(旧版 89,v1.0.4 新增 2 张)
脱敏:
- 18 个演示账号保留(出库/划拨依赖账号与部门树关联),
昵称/邮箱/手机号/登录IP/头像改为占位或编造值
- 归属部门、租户的联系电话与邮箱一并处理
- 公司名、组织名 → 示例企业
- 内网/生产 IP、内部域名 → 删除或改为服务名
- Mock 通道地址指向 onelink-mock 服务
- 通道模板真实上游密钥置空
- sys_social(微信绑定)不随分发
口令处理:改为纯 SQL,不再用 .sh + 环境变量。
业务账号:CREATE USER 语句内字面口令
种子账号:UPDATE sys_user SET password = MD5(CONCAT(MD5('<口令>'), MD5(salt)))
与 docker-compose.yml、config/*/config.yaml 保持同一口令
已验证:本地 MySQL 8.0 容器按 docker-entrypoint-initdb.d 实际导入,
无报错;表 91、菜单 456、账号 18、字典 86/436、通道模板 3、Mock 通道 1、
导出中心与通知表各 1、定时任务 20;18 条口令哈希自洽;
应用账号 u_iotlcm 可连库查询。
数据库初始化
init.sql 是单文件初始化脚本,MySQL 容器首次以空数据卷启动时由 docker-entrypoint-initdb.d 自动执行。
内容组成
按文件内顺序执行,整体幂等:
| 段 | 内容 |
|---|---|
| 表结构与基础数据 | 建 db_iotlcm 库 + 全部表 + 菜单/字典/角色/租户/部门/演示账号 |
| 结构补齐 | card_channel_assoc 表 + 27 个列(用存储过程按 information_schema 判断) |
| 结构对齐生产 | t_sms_template_config 表、batch_no 默认值 |
| 通道模板 | 23 条(上游密钥已置空) |
| 数据字典 | 86 类 / 435 条 |
| Mock 通道 | channel_yd_mock。卡全部挂在该通道上,缺则卡片管理的通道列、筛选、开停复机均不可用 |
| 角色链 | 代理下发模板参数与角色下发标记 |
| 定时任务 | 19 条,默认全部停用(避免自动全量同步打满机器) |
| 菜单增量 | 达量断网按钮权限、全量同步页 |
| v1.0.4 前置 | 导出中心表 t_export_task、通知已读表 sys_notice_user、card_channel_assoc.channel_id 扩宽、菜单权限 |
| 数据修复 | sys_dept.ancestors 尾逗号归一化(全新库为空操作) |
| 业务账号与口令 | 建 u_iotlcm 账号、可选库 iotdb、种子账号口令统一重置 |
来源
内容取自演示环境正在使用的种子库,结构已与生产核对(89 表 / 1703 列)。与源版本的差异仅为脱敏:
- 演示账号昵称、邮箱、手机号、登录 IP、头像 → 占位或编造值
- 公司名、组织名 → 「示例企业」等通用名
- 内网/生产 IP、内部域名 → 删除或改为服务名
- 通道模板中真实上游密钥 → 置空
- 数据库账号与种子账号口令 → 统一为部署口令(字面值,见下)
改口令
口令是字面值,不使用环境变量。修改时必须同步以下三处:
| 位置 | 内容 |
|---|---|
docker-compose.yml |
MYSQL_ROOT_PASSWORD |
config/*/config.yaml |
各服务 database link 的口令 |
schema/init.sql 末段 |
u_iotlcm 账号口令、种子账号重置口令 |
OLD='原口令'; NEW='新口令'
grep -rl "$OLD" docker-compose.yml config/ schema/ | xargs sed -i "s/$OLD/$NEW/g"
::: warning 口令不能含 @ : / 等字符
连接串格式为 mysql:用户:口令 再接 tcp(主机:端口)/库,口令里的 @、:、/ 会被当作分隔符,导致连接失败。用字母数字组合。
:::
重新初始化
init.sql 只在 data/mysql 为空时执行。改完必须清空数据卷才会重跑:
docker compose stop mysql
sudo rm -rf ./data/mysql
docker compose up -d mysql
⚠️ 会删除全部数据,生产环境禁止执行。
空表说明
以下表为空属预期:
| 表 | 说明 |
|---|---|
t_sim_flow_package_info |
流量套餐。为空时无法办理套餐/续费/改套餐,需在管理端「套餐定价」中创建 |
t_sim_card |
卡数据,可通过挡板服务造卡或自行入库 |
其余 t_* 业务表 |
随业务操作产生数据 |