# 数据库初始化脚本 MySQL 容器**首次以空数据卷启动**时,`docker-entrypoint-initdb.d` 会按**文件名顺序**自动执行本目录下的脚本。 改了这些文件必须清空数据卷才会重跑: ```bash docker compose stop mysql sudo rm -rf ./data/mysql docker compose up -d mysql ``` > ⚠️ 清空 `./data/mysql` 会**删除全部数据**,生产环境不要执行。 ## 执行顺序 按「结构 → 账号 → 种子数据」三阶段编号,文件名顺序即执行顺序。除 01 外全部幂等,可重复执行。 | 序号 | 文件 | 内容 | | --- | --- | --- | | 01 | `01-schema.sql` | 建 `db_iotlcm` 库 + 全部表结构 + 基础数据(菜单、字典、角色、租户、演示账号)。自包含:`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` | 建应用账号 `u_iotlcm`(口令取自 `MYSQL_APP_PASSWORD`)+ 可选库 `iotdb` | | 05 | `05-reset-passwords.sh` | 把所有种子账号口令重置为 `MYSQL_ADMIN_PASSWORD`(按各账号自身 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` 尾逗号归一化。全新库为空操作,仅用于修复既有库脏数据 | ## 种子数据说明 ### 保留的内容(业务必需) - **菜单** `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 位编造号(`1380000` + 4 位序号,保持互异) | | 登录 IP | 清空 | | 头像地址 | 清空 | | 公司名 / 组织名 | `示例企业` / `示例代理` | | 密码哈希 | 初始化时按 `MYSQL_ADMIN_PASSWORD` 重算 | | 通道密钥 | 置空 | ### 空表(正常) 以下表在种子库中为空,属预期状态: | 表 | 说明 | | --- | --- | | `t_sim_flow_package_info` | 流量套餐。为空时无法办理套餐/续费/改套餐,需自行在后台「套餐定价」中创建 | | `t_sim_card` | 卡数据。可通过挡板服务的造卡接口生成测试卡 | | `t_sim_channels` | 业务通道。Mock 通道由 `08` 脚本插入 | | 其余 `t_*` 业务表 | 均为空,随业务操作产生数据 | ## 首次登录 | 项 | 值 | | --- | --- | | 地址 | `http://<宿主机IP><:ADMIN_UI_PORT>` | | 账号 | `admin` | | 口令 | `.env` 里的 `MYSQL_ADMIN_PASSWORD` | 其余演示账号的登录名见 `sys_user.user_name`,口令同为 `MYSQL_ADMIN_PASSWORD`。**所有账号登录后请立即修改口令。** ## 手动执行 容器已启动后需要单独执行某个脚本: ```bash docker compose exec -T mysql sh -c \ 'mysql -uroot -p"$MYSQL_ROOT_PASSWORD" db_iotlcm' < schema/07-seed-dict.sql ``` `.sh` 脚本需要环境变量,在容器内执行: ```bash docker compose exec mysql bash /docker-entrypoint-initdb.d/04-users.sh ```