# 数据库初始化脚本 MySQL 容器**首次以空数据卷启动**时,`docker-entrypoint-initdb.d` 会按**文件名顺序**自动执行本目录下的脚本。 改了这些文件必须清空数据卷才会重跑: ```bash docker compose stop mysql sudo rm -rf ./data/mysql docker compose up -d mysql ``` > ⚠️ 清空 `./data/mysql` 会**删除全部数据**,生产环境不要执行。 ## 执行顺序 | 序号 | 文件 | 内容 | | --- | --- | --- | | 01 | `01-schema.sql` | 建库 + 全部表结构 + 基础数据(菜单、字典、角色、租户、演示账号)。自包含:`DROP DATABASE` → `CREATE` → `USE` | | 02 | `02-schema-fix-preview1.sql` | 补 `card_channel_assoc` 表 + 27 列。用存储过程按 `information_schema` 判断,规避 MySQL 8 无 `ADD COLUMN IF NOT EXISTS` | | 03 | `03-schema-align-prod.sql` | 补 `t_sms_template_config` 表 + 修正 `batch_no` 默认值 | | 04 | `04-users.sh` | 建应用账号 `iotlcm_app` + 可选库 `iotdb` | | 05 | `05-reset-passwords.sh` | 把所有种子账号口令重置为脚本内设定的口令(按各账号自身 salt 重算哈希) | | 06 | `06-seed-channel-templates.sql` | 通道模板 23 条(上游密钥已置空) | | 07 | `07-seed-dict.sql` | 数据字典:`sys_dict_type` 86 类 + `sys_dict_data` 435 条 | | 08 | `08-seed-mock-channel.sql` | **Mock 通道 `channel_yd_mock`**。演示卡全部挂在该通道上,缺则卡片管理的通道列、筛选、开停复机均不可用 | | 09 | `09-seed-role-chain.sql` | 代理下发模板参数 + 角色下发标记 | | 10 | `10-seed-jobs.sql` | 定时任务 19 条,**默认全部停用**(避免自动全量同步压满机器) | | 11 | `11-seed-menu-align-prod.sql` | 菜单增量 27 条(含达量断网按钮权限、全量同步页) | | 12 | `12-repair-dept-ancestors.sql` | `sys_dept.ancestors` 尾逗号归一化。全新库为空操作 | | 13 | `13-seed-flow-package.sql` | **占位文件**,流量套餐为空。需在管理端「套餐定价」中创建 | ## 口令说明 `04-users.sh` 与 `05-reset-passwords.sh` 里的口令是**字面值**(不使用环境变量),必须与以下位置保持一致: | 口令 | 需同步的位置 | | --- | --- | | 应用账号 `iotlcm_app` | `docker-compose.yml` 的 `MYSQL_ROOT_PASSWORD`(root)与 `config/*/config.yaml` 里 database link 的口令 | | 种子账号 | `docker-compose.yml` 里 admin 的初始化口令说明、`05-reset-passwords.sh` 的 `ADMIN_PASSWORD` | 改口令时三处一起改,漏改会导致服务连不上库或登录失败。 ## 种子数据说明 ### 保留的内容(业务必需) - **菜单** `sys_menu`:系统导航与按钮权限 - **字典** `sys_dict_type` / `sys_dict_data`:全部业务枚举 - **角色** `sys_role` / `sys_role_menu` / `sys_role_dept`:超级管理员、M管理员、M用户、终端用户 - **租户与部门** `sys_tenant` / `sys_dept`:企业-代理-部门三层结构 - **接口权限** `t_api` / `t_api_group` / `t_api_resource`:OpenAPI 权限模型 - **通道模板** `t_sim_channel_template`:运营商通道配置模板 - **行政区划** `t_division_code`:省市级 - **演示账号** `sys_user` 18 个:覆盖管理员、代理、终端用户等角色,出库与划拨流程依赖这张表与部门树的关联 ### 已脱敏的内容 | 项 | 处理 | | --- | --- | | 账号昵称 | `示例用户01` ~ `示例用户18` | | 邮箱 | `user01@example.com` ~ `user18@example.com` | | 手机号 | 合法 11 位编造号(保持互异) | | 登录 IP | 清空 | | 头像地址 | 清空 | | 公司名 / 组织名 | `示例企业` / `示例代理` | | 通道密钥 | 置空 | ### 空表(正常) | 表 | 说明 | | --- | --- | | `t_sim_flow_package_info` | 流量套餐,见 `13-seed-flow-package.sql` 说明 | | `t_sim_card` | 卡数据,可通过挡板服务造卡或自行入库 | | 其余 `t_*` 业务表 | 随业务操作产生数据 | ## 手动执行 容器已启动后单独执行某个脚本: ```bash docker compose exec -T mysql sh -c \ 'exec mysql -uroot -p"" db_iotlcm' < schema/07-seed-dict.sql ``` `.sh` 脚本: ```bash docker compose exec mysql bash /docker-entrypoint-initdb.d/04-users.sh ```