mysql的`wait_timeout`默认值为28800秒(8小时),可通过修改配置文件或会话变量调整。php长连接周期应设置为略小于`wait_timeout`的值,例如设为7小时(25200秒),以确保在连接被服务端强制关闭前主动重建连接,避免“mysql server has gone away”错误。

如何设置MySQL的wait_timeout
可以通过修改全局配置或当前会话来设置`wait_timeout`。推荐在MySQL配置文件(如my.cnf)中设置全局值,或通过SQL命令动态调整。

SET GLOBAL wait_timeout = 28800; SET SESSION wait_timeout = 28800;
上述命令将全局和会话级别的超时时间设置为28800秒。修改后,新建立的连接会生效,但已有连接仍使用旧值。重启MySQL服务可确保持久化配置。
PHP长连接周期如何匹配wait_timeout
PHP通过PDO或MySQLi建立长连接时,需定期检测连接状态并重建连接。建议将连接池的最大空闲时间设置为略小于`wait_timeout`的值,例如25200秒(7小时)。
安装、修复、更新或打包一个基于 Python 和 PyMySQL 实现的 Windows `mysql` 命令。适用于用户希望在 PowerShell/CMD 中输入 `mysql` 时重定向到 Python 实现、需要交互式输入 MySQL 连接信息、需要同步到当前用户本地 bin 目录,或需要将该能力封装成可公开复用的 Codex skill。

$pdo = new PDO('mysql:host=localhost;dbname=test', 'user', 'pass', [
PDO::ATTR_PERSISTENT => true,
]);
// 每7小时重建一次连接
if (time() - $lastReconnectTime > 25200) {
$pdo = null;
$pdo = new PDO('mysql:host=localhost;dbname=test', 'user', 'pass', [
PDO::ATTR_PERSISTENT => true,
]);
$lastReconnectTime = time();
}
上述代码示例展示了如何在PHP中实现长连接的周期性重建。通过检查距离上次连接创建的时间,超过阈值时主动断开并重新建立连接,从而避免与服务端的超时冲突。
当wait_timeout设置为0时会发生什么
若将`wait_timeout`设置为0,MySQL将禁用非交互式连接的超时机制,连接将一直保持直到客户端主动断开。这可能导致资源占用问题,需谨慎使用。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










