Hyperf多数据库连接配置关键在于连接名规范、参数完整性、连接池独立性:连接名须全小写且仅含字母数字下划线;每个连接必须显式声明driver、host、port、database等全部基础参数;各连接pool子数组须独立配置,不可复用。

Hyperf 多数据库连接配置的关键在于 连接名规范、参数完整性、连接池独立性 三点。填错名称、复用 default 配置、漏写必要字段,都会导致连接失败或行为异常。
连接名必须全小写且无特殊字符
连接池名称(即 connections 数组的键)只能由小写字母、数字、下划线组成,不能含点号、大写字母、空格或连字符。例如:
- ✅ 正确:
'db_write'、'read_pool_1'、'log_db' - ❌ 错误:
'DbWrite'(含大写)、'read.pool'(含点号)、'report-db'(含连字符)
一旦命名违规,Db::connection('xxx') 会直接报错 Connection [xxx] not found,且不会 fallback 到 default。
每个连接必须显式声明全部基础参数
不能依赖 default 的配置继承。哪怕 host、port、database 完全相同,也要为每个连接单独填写完整字段:
- 必需项:
driver、host、port、database、username、password - 推荐显式设置:
charset、collation、prefix - 特别注意:读库建议加
'strict_type' => false和'fetch_mode' => PDO::FETCH_ASSOC,避免从库类型转换开销
例如写库 db_write 和读库 read_pool_1 必须各自独立定义,不可只写一个再让另一个“继承”。
连接池配置需独立且合理
每个连接下的 pool 子数组必须单独配置,不能共用。常见关键参数及建议值:
-
min_connections:建议设为 1~3,服务启动时预热连接 -
max_connections:根据实际并发调整,MySQL 建议 50~100,PostgreSQL 可略低;过高易耗尽 DB 资源 -
wait_timeout:建议设为 5.0(秒),避免高并发下频繁报Wait timeout -
max_idle_time:建议 30.0(秒),比 MySQL 的wait_timeout小 20~30 秒,防止连接被 DB 主动断开 -
heartbeat:建议设为 -1(禁用心跳),减少 DB 无效负载
所有连接池参数都作用于对应连接,互不影响。切勿把多个连接共用同一份 pool 配置块。
default 连接建议保留但不使用
default 是框架默认回退连接名,但业务中应主动指定连接,避免隐式使用造成风险:
- 不显式调用
on()或connection()时,Eloquent 和 Query Builder 都会走default - 若未配置
default,或配置了但指向从库,可能引发写操作失败(SQLSTATE[HY000]: General error: 1290) - 推荐做法:保留
default配置(用于兜底),但所有业务代码强制指定连接名,如Db::connection('db_write')
这样既防错,又让数据流向清晰可查。


















