文档目录
创建数据库

简介

本指南面向需要在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
    • 导入后可执行简单查询验证字符集与表结构

章节来源

  • _'\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在一致的字符集、排序规则与最小权限环境下稳定运行。建议在上线前完成权限收敛、字符集校验与备份演练,以获得更可靠的交付质量。

添加日期:2026-10-05