Hyperf 多数据库配置需按业务域拆分配置文件、使用语义化连接名、独立配置连接池,并通过环境变量解耦敏感信息。

Hyperf 的多数据库连接配置,核心在于把不同数据源的连接参数清晰分离、语义明确、便于维护。不建议把所有连接堆在一个大数组里,更不该靠注释区分,而是用配置文件拆分 + 语义化命名 + 独立连接池的方式管理。
按业务域拆分配置文件
Hyperf 支持 config/autoload 下的任意 PHP 文件自动加载。可将数据库连接按用途或环境拆成多个文件:
- config/autoload/database-main.php:主业务库(如 user_db、order_db)
- config/autoload/database-log.php:日志类只读库(log_db)
- config/autoload/database-report.php:报表分析库(report_db),可能用 PostgreSQL
- config/autoload/database-test.php(仅测试环境):隔离的测试连接
每个文件返回一个 'connections' => [...] 数组片段,Hyperf 会自动合并。这样修改某个库的配置时,无需打开主配置文件,也不易误改其他连接。
连接名必须带业务/引擎语义
避免使用 db1、db2 这类无意义名称。应体现用途与技术特征:
使用ydata-profiling(前身为pandas-profiling)生成全面的数据质量报告,包含相关性分析、缺失值模式和基数检测。导出交互式HTML仪表板和JSON摘要。
-
mysql_user_center_v80:MySQL 8.0 用户中心库 -
pgsql_analytics_v14:PostgreSQL 14 分析库 -
mysql_log_rds_57:RDS 上的 MySQL 5.7 日志库
这种命名在代码中调用时一目了然:Db::connection('mysql_user_center_v80') 比 Db::connection('default') 更安全,也方便后续排查连接归属。
每个连接独立声明完整 pool 配置
不同版本、部署方式或引擎的数据库,必须单独配连接池。不能复用同一 pool 配置:
- MySQL 5.7 和 8.0 认证协议不同,需分别设
'options' => [PDO::MYSQL_ATTR_SSL_MODE => PDO::SSL_NONE]或PDO::ATTR_EMULATE_PREPARES - PostgreSQL 连接必须显式写
'driver' => 'pgsql',且pool.max_connections要按实际实例承载力设(比如 RDS 小规格实例设 30,而非默认 10) - 每个连接都应包含完整的
pool子项,哪怕只改max_connections,避免继承默认值导致低版本实例连接失败
环境变量与配置解耦
敏感信息(host、port、password)统一走 env(),但连接结构本身保持静态可读:
- 在
.env中定义:DB_USER_HOST=10.0.1.10、DB_LOG_HOST=192.168.1.100 - 配置文件中只做映射:
'host' => env('DB_USER_HOST', 'localhost') - 不把整个连接数组塞进环境变量——那会导致配置不可读、无法 IDE 跳转、diff 失效

















