#!/usr/bin/env bash # ============================================================================= # 时差项目(Project_TL)数据库一键初始化 —— 幂等 runner(G4-2 / C2) # # 作用:全新部署一次到位 —— 建齐 7 个库并导入 base 全量脚本(含对焦扩列/ # house_autofocus_calibration / operation_log,migration 已并入 base)。 # # 幂等:CREATE DATABASE IF NOT EXISTS + 各 base 脚本内的 DROP TABLE IF EXISTS, # 可重复执行;重跑会把表结构与"精简测试数据"重置为脚本内容(慎对生产)。 # # 用法: # ./init-database.sh # 默认连 127.0.0.1:3306 root/root # ./init-database.sh # # Docker 容器内 mysql 客户端示例(把脚本目录挂进容器后): # # docker exec -i tl-mysql bash /sql/init-database.sh 127.0.0.1 3306 root root # # 注意: # · 已部署旧库的"增量升级"不要用本脚本(会重建表丢数据),改跑 migrations/ 下脚本。 # · 本地 SQLite 列迁移另见 待验证清单 V-046 / 开发计划 G4-3。 # ============================================================================= set -euo pipefail HOST="${1:-127.0.0.1}" PORT="${2:-3306}" USER="${3:-root}" PASS="${4:-root}" DIR="$(cd "$(dirname "$0")" && pwd)" MYSQL=(mysql -h"${HOST}" -P"${PORT}" -u"${USER}" "-p${PASS}") # 库名 → base 脚本(顺序固定;库名含中划线/下划线均按文件名=库名对齐,勿改库名) import_db() { local db="$1" file="$2" echo "==> [${db}] CREATE DATABASE IF NOT EXISTS + import ${file}" "${MYSQL[@]}" -e "CREATE DATABASE IF NOT EXISTS \`${db}\` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;" "${MYSQL[@]}" "${db}" < "${DIR}/${file}" } echo "时差项目数据库初始化 → ${USER}@${HOST}:${PORT}" import_db "aivfo-auth" "aivfo-auth.sql" # 认证/网关:middle/permission/role/user import_db "aivfo_services" "aivfo_services.sql" # 核心服务:alarm_contacts/tdi_log import_db "aivfo-tl" "aivfo-tl.sql" # 数据传输(中划线):video/video_pictures/video_splice/video_update import_db "aivfo_tl_setting" "aivfo_tl_setting.sql" # TL控制配置:含对焦扩列 + house_autofocus_calibration import_db "aivfo_tl" "aivfo_tl.sql" # 业务管理(下划线):病例/胚胎/字典 import_db "log" "log.sql" # 框架日志:system_log + operation_log(全量操作日志) import_db "quartz" "quartz.sql" # 定时任务:t_qrtz_* echo "" echo "✅ 全部 7 库初始化完成。" echo " 已含:对焦扩列(tl_setting 5列 / house_well_setting 2列)、house_autofocus_calibration、operation_log。" echo " 验证:对照 sql/清单.md;或 SHOW TABLES / DESC 抽查上述表与列。"