简介
本指南面向需要在MySQL中为DouPHP准备数据库的运维与开发者。内容涵盖数据库命名、字符集与排序规则、用户权限、以及通过命令行和图形化工具(如phpMyAdmin、Navicat、DBeaver)创建数据库并导入结构的完整流程。所有技术细节均基于仓库中的配置与SQL脚本,确保可落地执行。
项目结构与数据库约定
- 默认数据库名:douphp_dou
- 表前缀:dou_
- 应用侧字符集常量:utf-8(用于HTTP响应头与部分逻辑)
- 数据库层实际使用:utf8mb4,排序规则 utf8mb4_unicode_ci(由系统表结构脚本定义)
上述约定来自以下位置:
- 配置文件中的数据库名、主机、用户名、密码、表前缀与字符集常量
- 系统表结构脚本中对数据库与表的字符集/排序规则声明
- 升级脚本中显式设置连接字符集为utf8mb4
- API引导文件中将DB配置注入到API模块
章节来源
- config/config.php:15-31
- _'\doc\开发手册\系统表结构.sql:14-20
- _'\tool\upgrade_v1.9.php:122-130
- _'.api\lib\Bootstrap.php:85-92
核心组件与依赖
- 配置中心:读取数据库主机、库名、用户、密码、表前缀与字符集常量
- SQL结构:提供完整的建表语句,统一使用InnoDB引擎与utf8mb4/utf8mb4_unicode_ci
- 升级工具:连接数据库后设置会话字符集为utf8mb4,便于后续导入或升级操作
- API引导:将数据库配置注入API模块,保证前后端一致
graph TB
A["应用配置<br/>config/config.php"] --> B["数据库实例<br/>MySQL"]
C["系统表结构脚本<br/>系统表结构.sql"] --> B
D["升级脚本<br/>upgrade_v1.9.php"] --> B
E["API引导<br/>Bootstrap.php"] --> A
E --> B
图表来源
- config/config.php:15-31
- _'\doc\开发手册\系统表结构.sql:14-20
- _'\tool\upgrade_v1.9.php:122-130
- _'.api\lib\Bootstrap.php:85-92
章节来源
- config/config.php:15-31
- _'\doc\开发手册\系统表结构.sql:14-20
- _'\tool\upgrade_v1.9.php:122-130
- _'.api\lib\Bootstrap.php:85-92
架构总览
下图展示了从配置到数据库的结构化关系,以及导入过程的关键节点。
sequenceDiagram
participant Admin as "管理员"
participant CLI as "命令行/工具"
participant DB as "MySQL"
participant App as "DouPHP应用"
Admin->>CLI : 执行创建数据库与导入SQL
CLI->>DB : CREATE DATABASE ... CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci
CLI->>DB : 导入 系统表结构.sql
Note over CLI,DB : 表结构与索引按脚本创建
App->>DB : 读取配置(config.php)建立连接
App->>DB : 查询/写入业务数据
CLI->>DB : 可选:运行升级脚本设置会话字符集
图表来源
- _'\doc\开发手册\系统表结构.sql:14-20
- config/config.php:15-31
- _'\tool\upgrade_v1.9.php:122-130
详细步骤:在MySQL中创建DouPHP数据库
说明:以下步骤以“命令行”为主,同时给出“phpMyAdmin”的操作要点。请根据实际环境替换占位符(如主机、端口、用户名、密码)。
-
步骤1:创建数据库
- 目标:创建一个名为 douphp_dou 的数据库
- 字符集与排序规则:utf8mb4 / utf8mb4_unicode_ci
- 参考依据:系统表结构脚本中已使用该字符集与排序规则;升级脚本中也设置了会话字符集为utf8mb4
-
步骤2:创建专用数据库用户(推荐)
- 目的:遵循最小权限原则,仅授予该用户访问 douphp_dou 的必要权限
- 建议权限:SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, LOCK TABLES, SHOW VIEW, TRIGGER, EVENT(如需触发器/事件)
- 注意:生产环境避免授予 FILE、PROCESS、SUPER 等高危权限
-
步骤3:授权用户并刷新
- 将上述权限授予新用户,并刷新权限表
-
步骤4:导入系统表结构
- 使用命令行或phpMyAdmin导入 系统表结构.sql
- 导入完成后,确认所有表均以 InnoDB 引擎、utf8mb4/utf8mb4_unicode_ci 创建
-
步骤5:验证连接与字符集
- 应用侧通过 config/config.php 配置 dbhost/dbname/dbuser/dbpass/prefix
- 可通过升级脚本或简单查询验证会话字符集是否为 utf8mb4
-
步骤6:导入模块数据(可选)
- 若需要初始数据,可按模块顺序导入对应备份SQL(例如 user 模块的 user.sql)
章节来源
- _'\doc\开发手册\系统表结构.sql:14-20
- _'\tool\upgrade_v1.9.php:122-130
- config/config.php:15-31
- _'\module\user\storage\backup\user.sql:1-37
不同工具的创建步骤
-
phpMyAdmin
- 新建数据库:名称填 douphp_dou,字符集选择 utf8mb4,排序规则选择 utf8mb4_unicode_ci
- 导入SQL:选择 系统表结构.sql 进行导入
- 用户管理:创建新用户并授予对 douphp_dou 的最小必要权限
-
Navicat
- 新建数据库:名称 douphp_dou,编码 utf8mb4,排序规则 utf8mb4_unicode_ci
- 导入SQL:选择 系统表结构.sql 执行
- 用户权限:新建用户并限定对 douphp_dou 的读写权限
-
DBeaver
- 新建数据库:名称 douphp_dou,字符集 utf8mb4,排序规则 utf8mb4_unicode_ci
- 导入SQL:打开 系统表结构.sql 执行
- 用户权限:创建用户并授予最小权限
-
命令行(示例思路)
- 登录MySQL后执行:
- 创建数据库并指定字符集与排序规则
- 创建用户并授权
- 导入 系统表结构.sql
- 导入后可执行简单查询验证字符集与表结构
- 登录MySQL后执行:
章节来源
- _'\doc\开发手册\系统表结构.sql:14-20
权限与安全(最小权限原则)
-
原则
- 仅授予应用所需的最小权限集合
- 禁止在生产环境授予 FILE、PROCESS、SUPER 等高权限
- 限制用户只能访问 douphp_dou 数据库
-
建议权限清单(按需裁剪)
- SELECT, INSERT, UPDATE, DELETE
- CREATE, DROP, INDEX, ALTER
- LOCK TABLES
- SHOW VIEW
- TRIGGER, EVENT(仅在启用相关功能时授予)
-
安全建议
- 使用强密码并定期轮换
- 限制用户可连接的IP范围(如仅限应用服务器)
- 审计日志开启并定期审查
章节来源
- config/config.php:15-31
常见问题与排错
-
问题:导入失败或乱码
- 原因:数据库或会话字符集不一致
- 处理:确保数据库为 utf8mb4,排序规则为 utf8mb4_unicode_ci;连接会话设置为 utf8mb4(升级脚本中已设置)
-
问题:连接失败
- 原因:主机、端口、用户名、密码或权限错误
- 处理:核对 config/config.php 的配置;检查用户是否被正确授权且可连接
-
问题:表结构不完整
- 原因:未完整导入 系统表结构.sql
- 处理:重新导入并确保无中断;必要时先删除旧库再重建
-
问题:权限不足导致无法创建/修改对象
- 原因:用户缺少必要的DDL权限
- 处理:补充授予 CREATE/DROP/INDEX/ALTER 等权限
-
问题:API无法读取数据库配置
- 原因:API引导未加载到正确的配置
- 处理:确认 data/config.php 存在且包含 dbhost/dbname/dbuser/dbpass/prefix;API引导会复用这些变量
章节来源
- _'\tool\upgrade_v1.9.php:104-130
- _'.api\lib\Bootstrap.php:46-92
性能与最佳实践
- 存储引擎:统一使用 InnoDB(脚本已默认)
- 字符集与排序规则:统一使用 utf8mb4 / utf8mb4_unicode_ci,避免多端不一致
- 索引策略:按脚本提供的索引创建;业务增长后可评估新增索引
- 连接池与持久连接:根据部署环境决定是否启用持久连接(框架支持配置)
- 备份与恢复:定期备份数据库;升级前务必备份
结论
按照本指南创建并配置数据库,可确保DouPHP在一致的字符集、排序规则与最小权限环境下稳定运行。建议在上线前完成权限收敛、字符集校验与备份演练,以获得更可靠的交付质量。