在使用phpEnv搭建本地PHP开发环境的过程中,不少开发者在执行耗时较长的数据库操作,或者长时间没有进行数据库交互后,会遇到MySQL server has gone away的报错提示,这个报错本质是MySQL连接因为超时被服务端主动断开导致的。

报错产生的原因
MySQL服务端有两个核心的超时参数控制连接的存活时间,分别是wait_timeout和interactive_timeout。默认情况下这两个参数的值通常比较小,当数据库连接空闲时间超过这个阈值,或者执行的操作耗时超过阈值时,MySQL就会主动断开连接,此时客户端再尝试使用这个已经断开的连接执行操作,就会抛出MySQL server has gone away的报错。
phpEnv中修改MySQL超时配置
步骤1:找到MySQL配置文件
打开phpEnv软件,在左侧菜单栏找到对应版本的MySQL,右键选择打开配置目录,找到名为my.ini或者my.cnf的配置文件,用文本编辑器打开该文件。
步骤2:添加超时参数配置
在配置文件的[mysqld]区块下添加或者修改以下两个参数,数值可以根据实际需求调整,比如设置为86400代表一天:
[mysqld] # 非交互连接的超时时间,单位秒 wait_timeout=86400 # 交互连接的超时时间,单位秒 interactive_timeout=86400
步骤3:重启MySQL服务
修改完成后保存配置文件,回到phpEnv主界面,先停止当前运行的MySQL服务,再重新启动,让配置生效。可以通过phpEnv自带的phpMyAdmin执行以下SQL语句验证配置是否生效:
-- 查看wait_timeout参数值 SHOW VARIABLES LIKE 'wait_timeout'; -- 查看interactive_timeout参数值 SHOW VARIABLES LIKE 'interactive_timeout';
PHP端超时配置补充
除了MySQL服务端的配置,PHP本身的脚本执行超时和数据库扩展超时也可能需要调整,避免PHP脚本执行时间超过限制导致连接中断:
- 修改php.ini中的
max_execution_time参数,设置PHP脚本的最大执行时间,比如设置为300代表300秒。 - 如果使用PDO连接MySQL,可以在连接时设置持久连接属性,减少连接断开的概率:
<?php
// PDO连接MySQL时设置持久连接
$dsn = 'mysql:host=127.0.0.1;dbname=test;charset=utf8';
$username = 'root';
$password = 'root';
$options = array(
PDO::ATTR_PERSISTENT => true, // 开启持久连接
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
);
try {
$pdo = new PDO($dsn, $username, $password, $options);
} catch (PDOException $e) {
echo '连接失败:' . $e->getMessage();
}
?>
注意事项
设置超时时间时需要根据实际业务场景调整,不要设置过大的数值,避免长期空闲连接占用MySQL的资源。如果是在生产环境调整该配置,建议先评估业务的平均连接空闲时间,再设置合理的阈值,同时做好配置修改的记录,方便后续排查问题。
phpEnvMySQL_server_has_gone_awayMySQL超时设置wait_timeoutinteractive_timeout修改时间:2026-06-30 09:15:24