Hyperf 3.2 默认通过 Swoole\Runtime::enableCoroutine() 自动协程化 PDO/MySQLi,无需手动启用;前提是 Swoole 扩展正确加载、未禁用协程、驱动兼容且无干扰配置,Coroutine\MySQL 已弃用。

Hyperf 3.2 默认不自动开启 MySQL 协程支持,是否启用取决于你使用的数据库驱动和运行时配置。
关键点如下:
- Hyperf 3.2 推荐并默认使用
Swoole\Runtime::enableCoroutine()一键协程化原生 PHP 扩展(如 PDO、MySQLi),而不是使用已废弃的Coroutine\MySQL客户端; - 只有在 Swoole 运行时协程被启用的前提下,PDO 或 MySQLi 才会以协程方式执行 I/O;
-
Swoole\Runtime::enableCoroutine()通常由 Hyperf 框架在启动时自动调用(在Hyperf\Server\Server初始化阶段),但前提是 Swoole 扩展已正确加载且未被禁用; - 若你手动关闭了协程化(例如在
config/autoload/processes.php或自定义启动逻辑中调用了Swoole\Runtime::disableCoroutine()),或使用了非协程安全的扩展(如某些旧版 pdo_mysql 不支持协程),则 MySQL 操作仍为同步阻塞。
✅ 确认协程已生效的简单方法:
面向 CRM 系统的 MySQL 8 数据库模式设计。当用户需要为客户关系管理(CRM)系统设计、评审、优化或生成数据库模式时,应使用此项技能。
// 在任意控制器或命令中执行 var_dump(Swoole\Runtime::getHookFlags() & SWOOLE_HOOK_ALL); // 应返回非零值
✅ 保证 MySQL 协程可用的必要条件:
- 使用
pdo_mysql或mysqli驱动(推荐pdo_mysql); -
Swoole\Runtime::enableCoroutine()已执行(Hyperf 默认已做); - 数据库连接配置中未显式禁用协程(如未设置
'options' => [PDO::ATTR_EMULATE_PREPARES => false]等可能干扰协程的行为); - MySQL 服务端未启用
skip-name-resolve导致 DNS 解析阻塞(协程下 DNS 阻塞仍会卡住整个协程)。
⚠️ 注意:Coroutine\MySQL 客户端在 Hyperf 3.x 中已被官方弃用,不再推荐配置或使用。
所以结论是:
Hyperf 3.2 默认准备就绪协程化 MySQL,但实际是否生效,依赖底层 Swoole 协程开关 + 驱动兼容性 + 运行环境配置。只要没动默认设置且环境合规,它就是协程的。

















