Hyperf新增数据库连接需修改config/autoload/databases.php,在connections数组中添加命名合法、参数完整的新连接配置,显式指定driver、host、port、database、username、password、charset等,并按Swoole或Swow适配pool参数,重启服务后通过Db::connection('name')调用。

Hyperf 新增数据库连接,核心是修改 config/autoload/databases.php 文件,在 'connections' 数组中添加新连接配置项。配置需明确驱动、地址、库名、账号密码等基础参数,并注意连接池参数适配运行环境(如 Swow 或 Swoole)。
一、在 databases.php 中添加新连接
打开 config/autoload/databases.php,找到 'connections' 数组。除已有的 'default' 外,可直接追加新连接配置,例如名为 'log_db' 的日志库:
- 连接名必须是合法的字符串键名(如
'log_db'),不能含空格或特殊符号 - 每个连接需独立定义
'driver'(如'mysql'或'pgsql')、'host'、'port'、'database'、'username'、'password' - 字符集与排序规则建议显式指定:
'charset' => 'utf8mb4','collation' => 'utf8mb4_unicode_ci' - 若使用环境变量,统一用
env()包裹,如env('DB_LOG_HOST', '127.0.0.1'),便于多环境切换
二、正确配置连接池参数
连接池参数决定并发承载能力,不同协程引擎要求不同:
- 使用 Swoole 时,
'pool'可放在连接配置同级,常用参数包括min_connections、max_connections、wait_timeout等 - 启用 Swow(≥1.5.0)后,必须删除旧 pool 配置,改用 Swow 专用结构:在连接配置内新增
'pool' => [ ... ],且'check_interval'不得低于 3000 毫秒 -
'max_connections'建议按服务器 CPU 核数 × 8~16 设置,避免超限触发pool exhausted - 修改后务必清空
runtime/container并重启服务,否则旧连接池实例可能残留
三、运行时切换并验证新连接
新增连接不会自动生效,需在代码中显式调用:
- Query Builder 方式:
Db::connection('log_db')->table('logs')->where('level', 'error')->get() - Eloquent 模型中指定:
protected $connection = 'log_db'; - 事务操作也支持:
Db::connection('log_db')->transaction(function () { ... }); - 可通过
Db::connection('log_db')->getPdo()尝试获取 PDO 实例,快速验证连通性
四、多库共存与读写分离兼容性
多个连接可同时存在,但需注意逻辑隔离:
- 各连接之间完全独立,事务、连接池、超时设置互不影响
- 若某库需读写分离(如主从),应在该连接内部配置
'read'和'write'子数组,而非跨连接混用 - 不建议在同一个请求中高频切换大量不同连接,易引发连接数膨胀;高频场景应评估是否需合并库表或引入中间件路由
- 环境变量命名建议区分,如
DB_LOG_DATABASE、DB_REPORT_HOST,避免冲突











