-- ============================================================================== -- auto_control —— MySQL 5.7 环境初始化(建库 + 建账号 + 授权) -- -- 用法(在 MySQL 主机上以 root 执行): -- mysql -uroot -p < scripts/sql/init_mysql_5.7.sql -- -- 建两个库,与 .env 的 DEPLOY_ENV 一一绑定(core/db_config.py 会强制校验): -- auto_control_dev ← 本地开发机(DEPLOY_ENV=dev) -- auto_control ← 生产 220 容器(DEPLOY_ENV=prod) -- -- 字符集固定 utf8mb4 + utf8mb4_bin: -- * utf8mb4:中文/emoji 都不能丢(MySQL 的 "utf8" 是 3 字节残缺版) -- * _bin :逐码点比较(大小写敏感),等价 SQLite 的字节序语义。 -- 用默认的 utf8mb4_general_ci 会让 Admin/admin、Phone1/phone1 被判重复, -- 唯一索引与等值查询语义全变。 -- -- ⚠️ 执行前把下面的 <改我> 换成强口令,并把主机段按实际情况收紧: -- '192.168.20.%' 局域网 -- '100.100.10.%' Tailscale(若走 tailnet 连库) -- 220 容器是 host 网络,出口 IP 取决于路由,两条都要覆盖;图省事可用 '%' + 强口令。 -- ============================================================================== CREATE DATABASE IF NOT EXISTS auto_control DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_bin; CREATE DATABASE IF NOT EXISTS auto_control_dev DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_bin; -- 一个专用账号,只授权这两个库(不用 root 跑应用) CREATE USER IF NOT EXISTS 'auto_control'@'%' IDENTIFIED BY '<改我>'; GRANT ALL PRIVILEGES ON auto_control.* TO 'auto_control'@'%'; GRANT ALL PRIVILEGES ON auto_control_dev.* TO 'auto_control'@'%'; FLUSH PRIVILEGES; -- 授权说明: -- * 应用需要 DDL 权限(建表 / 补列 / 建生成列与索引),所以给的是 ALL; -- 若你的 DBA 只肯给 DML,就先用下面的「可选」段预建 schema,再只授 -- SELECT/INSERT/UPDATE/DELETE。 -- * 表结构由平台启动时自动创建(db.create_all + _sync_columns), -- 正常情况下不需要手工建表。 -- --------------------------------------------------------------------------- -- 可选:只给 DML 权限时,先让平台在别的环境把 schema 建好,再由本脚本导入。 -- 也可用迁移脚本的「先建 schema」路径: -- python scripts/migrate_sqlite_to_mysql.py --sqlite data/users.db --env dev --schema-only -- --------------------------------------------------------------------------- -- 校验(执行完可以跑一下): -- SELECT schema_name, default_character_set_name, default_collation_name -- FROM information_schema.schemata WHERE schema_name LIKE 'auto_control%'; -- SHOW GRANTS FOR 'auto_control'@'%';