
[PHP] PDO对象与mysql的连接超时
在循环中每隔8秒或一定次数重新创建PDO对象 确保在10秒内完成所有操作 使用长连接参数保持连接稳定
发布日期:2021-05-18 08:03:18
浏览次数:27
分类:精选文章
本文共 893 字,大约阅读时间需要 2 分钟。
在PHP中,每次执行new PDO
语句时,会建立一个新的TCP连接来连接MySQL。这意味着如果每次操作都创建一个新的PDO对象,会保持多个TCP连接。然而,如果没有其他操作或数据传输,这些连接可能在10秒后被MySQL服务断开。
使用长连接参数时,无论执行new PDO
的次数如何,仅会创建一个TCP连接。这意味着即使频繁创建新的PDO对象,连接数依然保持在一个。
关于连接超时,网上资料通常提到interactive_timeout
和wait_timeout
参数。然而,通过测试发现,即使更改这两个参数,仍然存在连接被MySQL服务断开的情况,无论是否启用了长连接功能。
如果在脚本中每隔一秒传输数据,连接状态会保持为ESTABLISHED
。但如果在同一时间段执行两次耗时较长的操作,可能导致连接被断开。
对于需要长期运行的数据库操作脚本,建议每隔8秒左右重新创建PDO对象,或者在循环操作中确保在10秒内重新创建新的PDO对象,以避免连接被MySQL服务断开。
通过测试发现,使用netstat -altupn
命令可以查看当前的连接状态。多次执行new PDO
语句时,会发现大量的TCP连接处于TIME_WAIT
状态,这表明客户端主动关闭了连接。而被MySQL服务断开的连接则处于CLOSE_WAIT
状态,表示连接的一端已主动关闭。
下面的PHP脚本示例展示了如何测试连接行为:
for($i=0;$i<10;$i++){ $pdo=new PDO("mysql:host=127.0.0.1;dbname=my_test","root","xxx"); var_dump($pdo);}while(1){ sleep(5); $pdo->query("set names utf8"); sleep(11);}
在实际应用中,为了避免连接被断开,可以采取以下措施:
通过这些方法,可以有效管理数据库连接,以支持长期运行的脚本需求。
发表评论
最新留言
第一次来,支持一个
[***.219.124.196]2025年04月25日 21时48分30秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
重置UAG Application admin密码
2019-03-12
Horizon Daas租户管理平台扩展分配时报:内部错误
2019-03-12
嵌入式系统试题库(CSU)
2019-03-12
【自考】之信息资源管理(一)
2019-03-12
setup facatory9.0打包详细教程(含静默安装和卸载)
2019-03-12
Linux kernel pwn --- CSAW2015 StringIPC
2019-03-12
IDEA 找不到 Persistence窗口解决办法
2019-03-12
C++ Primer Plus读书笔记:循环读取(错误处理)
2019-03-12
Form窗体属性
2019-03-12
vue 错误收集
2019-03-12
Java选择排序算法实现
2019-03-12
00010.02最基础客户信息管理软件(意义类的小项目,练习基础,不涉及数据库)
2019-03-12
00013.05 字符串比较
2019-03-12
Effective Java 读书笔记
2019-03-12
SpringBoot使用@Email报错误
2019-03-13
Rabbitmq的内存磁盘监控
2019-03-13
访问servlet时弹出文件下载框解决方法
2019-03-13
IDEA-@Slf4j和log标签&@Data(Lombok)无效
2019-03-13