文档目录
数据库设置

简介

本指南面向部署与运维人员,提供 DouPHP 的完整数据库设置说明。内容涵盖:

  • 创建 MySQL 数据库与用户(字符集 utf8mb4)
  • 导入系统表结构与模块数据(SQL 执行步骤)
  • 数据库连接配置项说明(host、port、dbname、username、password 等)
  • 不同环境(本地开发、测试、生产)的配置示例
  • 数据库性能优化建议与备份策略
  • 多站点数据库隔离方案

项目结构

DouPHP 的数据库相关资源主要分布在以下位置:

  • 应用级数据库配置:config/config.php
  • 系统表结构定义:_\doc/开发手册/系统表结构.sql
  • 模块数据与增量脚本:_\module//storage/backup/.sql、devtools/sql/*.sql
  • 升级与迁移工具:_\tool/upgrade_v1.9.php
  • 兼容的数据库连接适配器(PDO/MySQL/MariaDB 等):plugin/*/sdk/...
graph TB
A["应用配置<br/>config/config.php"] --> B["系统表结构<br/>系统表结构.sql"]
B --> C["模块数据<br/>area_china.sql 等"]
A --> D["连接适配器<br/>DbConnectionAdapterPdo.php"]
A --> E["升级工具<br/>upgrade_v1.9.php"]
F["增量脚本<br/>distribution_level_log.sql"] --> C

核心组件

  • 数据库配置:位于 config/config.php,包含 host、dbname、username、password、prefix、字符集等关键参数。
  • 系统表结构:_\doc/开发手册/系统表结构.sql,定义了所有系统表的建表语句与默认字符集。
  • 模块数据:各模块的 storage/backup/*.sql 提供基础数据或字典数据(如地区)。
  • 连接适配器:通过 PDO 适配多种数据库驱动(pdo_mysql 等),用于建立连接与执行 SQL。
  • 升级工具:_\tool/upgrade_v1.9.php 在升级过程中会读取配置并设置字符集为 utf8mb4。

架构总览

下图展示了从应用配置到数据库连接的总体流程,以及 SQL 导入的关键节点。

sequenceDiagram
participant Admin as "管理员"
participant App as "DouPHP 应用"
participant DB as "MySQL 服务器"
participant Tools as "升级/导入工具"
Admin->>App : 访问安装/升级入口
App->>App : 读取 config/config.php
App->>DB : 使用 host/port/dbname/user/password 建立连接
Note over App,DB : 连接成功后设置字符集为 utf8mb4
Tools->>DB : 执行系统表结构 SQL
Tools->>DB : 执行模块数据 SQL如 area_china.sql
Tools-->>Admin : 输出导入结果与错误信息

详细组件分析

数据库账户与库创建(MySQL)

  • 推荐字符集:utf8mb4,排序规则:utf8mb4_unicode_ci(系统表结构已使用该字符集)。
  • 建议为每个站点创建独立数据库与专用用户,最小权限原则(仅授予该库所需权限)。
  • 若使用共享主机,确保支持 utf8mb4;部分旧版本 MySQL 需确认服务端配置允许。

系统表结构导入

  • 主结构文件:_\doc/开发手册/系统表结构.sql,包含所有系统表的 CREATE TABLE 语句。
  • 导入方式:
    • 命令行:mysql -u 用户名 -p 数据库名 &lt; 系统表结构.sql
    • phpMyAdmin:选择目标数据库后“导入”该 SQL 文件
    • 其他客户端:Navicat/DBeaver 等均可直接执行
  • 注意:
    • 首次导入前请确认数据库为空或已有同名表将被覆盖
    • 若表前缀非 dou_,请在执行前替换 SQL 中的前缀(或使用工具进行替换)

模块数据导入

  • 地区数据:_\module/area/storage/backup/area_china.sql,包含中国省市区基础数据。
  • 其他模块数据:_\module//storage/backup/.sql,按需导入对应模块的基础数据。
  • 增量脚本:devtools/sql/*.sql,用于新增或修复特定表结构(幂等,可重复执行)。

数据库连接配置

  • 配置文件:config/config.php
  • 关键参数:
    • dbhost:数据库主机地址(可为 IP 或域名)
    • dbname:数据库名称
    • dbuser:数据库用户名
    • dbpass:数据库密码
    • prefix:表前缀(默认 dou_)
    • DOU_CHARSET:字符集常量(当前设置为 utf-8;建议在连接层统一使用 utf8mb4)
  • 连接适配器:
    • 通过 PDO 适配器(pdo_mysql)建立连接,支持持久连接选项
    • 升级工具中显式设置字符集为 utf8mb4,确保全链路一致

不同环境的配置示例

  • 本地开发:
    • host:127.0.0.1
    • port:3306(默认)
    • dbname:douphp_dou(示例)
    • username:root
    • password:本地密码
    • 特点:开启调试模式,便于定位问题
  • 测试环境:
    • host:测试数据库主机
    • dbname:test_douphp(示例)
    • username:test_user
    • password:测试密码
    • 特点:关闭调试模式,模拟真实网络延迟
  • 生产环境:
    • host:生产数据库主机(建议使用内网地址)
    • dbname:prod_douphp(示例)
    • username:prod_user(最小权限)
    • password:强密码
    • 特点:关闭调试模式,启用只读账号用于报表查询(可选)

提示:

  • 端口可通过 host:port 形式传入(升级工具支持解析 host 中的冒号端口)
  • 生产环境务必限制数据库访问来源 IP 与最小权限

多站点数据库隔离方案

  • 方案一:每站一库
    • 为每个站点创建独立的数据库与用户
    • 通过不同的 config/config.php 指向各自数据库
    • 优点:隔离性强,便于备份与迁移
  • 方案二:同库不同前缀
    • 同一数据库实例下,使用不同表前缀区分站点
    • 优点:资源复用度高;缺点:隔离性较弱
  • 方案三:读写分离(高级)
    • 主库写、从库读,结合连接池与路由
    • 适用于高并发场景

性能优化建议

  • 索引与统计:
    • 对高频查询字段添加合适索引(如订单号、用户ID、时间戳)
    • 定期运行 ANALYZE TABLE 更新统计信息
  • 连接与缓冲:
    • 合理设置连接池大小与超时
    • 调整 innodb_buffer_pool_size、max_connections 等参数
  • 日志与监控:
    • 开启慢查询日志,定期分析慢查询
    • 监控连接数、锁等待、IO 使用率
  • 字符集一致性:
    • 确保数据库、表、列与应用层均使用 utf8mb4,避免转换开销

备份策略

  • 全量备份:每日一次 mysqldump 全库备份
  • 增量备份:基于 binlog 的增量备份(如 Percona XtraBackup)
  • 异地容灾:将备份文件同步至对象存储或异地磁盘
  • 恢复演练:定期验证备份可恢复性

依赖关系分析

  • 应用配置与连接:
    • config/config.php 提供连接参数
    • DbConnectionAdapterPdo.php 根据 adapter 构建 DSN 并建立连接
  • 升级工具与字符集:
    • upgrade_v1.9.php 在连接后设置字符集为 utf8mb4,保证写入与显示一致
  • 表结构与数据:
    • 系统表结构由系统表结构.sql 定义
    • 模块数据由模块 backup SQL 提供
graph LR
CFG["config/config.php"] --> ADP["DbConnectionAdapterPdo.php"]
ADP --> DB["MySQL"]
UPG["upgrade_v1.9.php"] --> DB
SQL["系统表结构.sql"] --> DB
MOD["模块数据 SQL"] --> DB

性能考虑

  • 连接复用:
    • 可使用持久连接减少握手开销(根据业务负载评估)
  • 查询优化:
    • 避免 SELECT *,仅取必要字段
    • 合理使用分页与缓存
  • 存储引擎:
    • 使用 InnoDB,开启事务与外键约束
  • 字符集:
    • 统一 utf8mb4,避免隐式转换导致索引失效

故障排查指南

  • 连接失败:
    • 检查 host、port、username、password 是否正确
    • 确认防火墙与安全组放行数据库端口
    • 查看升级工具的报错信息以定位连接问题
  • 字符集乱码:
    • 确认数据库、表、列与应用层均为 utf8mb4
    • 升级工具中已设置 set_charset('utf8mb4')
  • 权限不足:
    • 为数据库用户授予必要的 SELECT/INSERT/UPDATE/DELETE/CREATE/DROP 权限
  • 表不存在或前缀不一致:
    • 核对 config/config.php 中的 prefix 与 SQL 中的前缀是否一致

结论

通过正确配置数据库连接、导入系统表结构与模块数据、统一字符集与权限管理,并结合性能优化与备份策略,可以稳定高效地部署与运维 DouPHP。多站点隔离可根据实际规模选择“每站一库”或“同库不同前缀”的方案。

附录

  • 常用命令参考:
    • 导入系统表结构:mysql -u 用户名 -p 数据库名 &lt; 系统表结构.sql
    • 导入模块数据:mysql -u 用户名 -p 数据库名 &lt; area_china.sql
    • 执行增量脚本:mysql -u 用户名 -p 数据库名 &lt; distribution_level_log.sql
  • 注意事项:
    • 执行前备份现有数据
    • 生产环境谨慎操作,先在测试环境验证
添加日期:2026-10-05