# 数据库初始化 `init.sql` 是**单文件**初始化脚本,MySQL 容器首次以空数据卷启动时由 `docker-entrypoint-initdb.d` 自动执行。已有数据目录不会自动执行新增 DDL,升级时需先核对四张表状态,再按上游迁移规范处理,不能删除数据卷。 ## 内容组成 按文件内顺序执行,整体幂等: | 段 | 内容 | | --- | --- | | 表结构与基础数据 | 建 `db_iotlcm` 库 + 全部表 + 菜单/字典/角色/租户/部门/演示账号 | | 结构补齐 | `card_channel_assoc` 表 + 27 个列(用存储过程按 `information_schema` 判断) | | 结构对齐生产 | `t_sms_template_config` 表、`batch_no` 默认值 | | 通道模板 | 3 条(上游密钥已置空) | | 数据字典 | 86 类 / 436 条 | | Mock 通道 | `channel_yd_mock`。**卡全部挂在该通道上**,缺则卡片管理的通道列、筛选、开停复机均不可用 | | 角色链 | 代理下发模板参数与角色下发标记 | | 定时任务 | 20 条,**默认全部停用**(避免自动全量同步打满机器) | | 菜单增量 | 达量断网按钮权限、全量同步页 | | v1.0.4 前置 | 导出中心表 `t_export_task`、通知已读表 `sys_notice_user`、`card_channel_assoc.channel_id` 扩宽、菜单权限 | | APN 异步恢复 | `data_operation_parent`、`data_operation_sub_batch`、`data_operation_sub_detail`、`data_operation_card_claim` 四表;须先建表后启动 worker | | 数据修复 | `sys_dept.ancestors` 尾逗号归一化(全新库为空操作) | | 业务账号与口令 | 建 `u_iotlcm` 账号、可选库 `iotdb`、种子账号口令统一重置 | ## 来源 内容取自**演示环境正在使用的种子库**,以生产 89 表基线为基础,补齐 v1.0.4 的 2 张表及 worker 异步恢复所需的 4 张表,初始化后为 **95 表**。四张恢复表直接采用内部数据库仓 `feat/data-operation-reconcile-20261015` 的 `SQL/20261015_data_operation_sub_batch.sql`(提交 `bf5f7fd`);原有 91 表统计不含这四张表。脱敏及部署适配包括: - 演示账号昵称、邮箱、手机号、登录 IP、头像 → 占位或编造值 - 公司名、组织名 → 「示例企业」等通用名 - 内网/生产 IP、内部域名 → 删除或改为服务名 - 通道模板中真实上游密钥 → 置空 - 数据库账号与种子账号口令 → 统一为部署口令(字面值,见下) ## 改口令 口令是**字面值**,不使用环境变量。修改时必须同步以下三处: | 位置 | 内容 | | --- | --- | | `docker-compose.yml` | `MYSQL_ROOT_PASSWORD`(MySQL 健康检查会引用此值) | | `config/*/config.yaml` | 各服务 `database link` 的口令 | | `schema/init.sql` 末段 | `u_iotlcm` 账号口令、种子账号重置口令 | ```bash OLD='原口令'; NEW='新口令' grep -rl "$OLD" docker-compose.yml config/ schema/ | xargs sed -i "s/$OLD/$NEW/g" ``` ::: warning 口令不能含 @ : / 等字符 连接串格式为 `mysql:用户:口令` 再接 `tcp(主机:端口)/库`,口令里的 `@`、`:`、`/` 会被当作分隔符,导致连接失败。用字母数字组合。 ::: ## 重新初始化 `init.sql` 只在 `data/mysql` 为空时执行。改完必须清空数据卷才会重跑: ```bash docker compose stop mysql sudo rm -rf ./data/mysql docker compose up -d mysql ``` > ⚠️ 会删除全部数据,生产环境禁止执行。 ## 空表说明 以下表为空属预期: | 表 | 说明 | | --- | --- | | `t_sim_flow_package_info` | 流量套餐。为空时无法办理套餐/续费/改套餐,需在管理端「套餐定价」中创建 | | `t_sim_card` | 卡数据,可通过挡板服务造卡或自行入库 | | 其余 `t_*` 业务表 | 随业务操作产生数据 |