博客
关于我
[PHP] PDO对象与mysql的连接超时
阅读量:670 次
发布时间:2019-03-15

本文共 885 字,大约阅读时间需要 2 分钟。

在PHP中,每次执行new PDO语句时,会建立一个新的TCP连接来连接MySQL。这意味着如果每次操作都创建一个新的PDO对象,会保持多个TCP连接。然而,如果没有其他操作或数据传输,这些连接可能在10秒后被MySQL服务断开。

使用长连接参数时,无论执行new PDO的次数如何,仅会创建一个TCP连接。这意味着即使频繁创建新的PDO对象,连接数依然保持在一个。

关于连接超时,网上资料通常提到interactive_timeoutwait_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);}

在实际应用中,为了避免连接被断开,可以采取以下措施:

  • 在循环中每隔8秒或一定次数重新创建PDO对象
  • 确保在10秒内完成所有操作
  • 使用长连接参数保持连接稳定
  • 通过这些方法,可以有效管理数据库连接,以支持长期运行的脚本需求。

    转载地址:http://dwimz.baihongyu.com/

    你可能感兴趣的文章
    mysql 断电数据损坏,无法启动
    查看>>
    MySQL 日期时间类型的选择
    查看>>
    Mysql 时间操作(当天,昨天,7天,30天,半年,全年,季度)
    查看>>
    MySQL 是如何加锁的?
    查看>>
    MySQL 是怎样运行的 - InnoDB数据页结构
    查看>>
    mysql 更新子表_mysql 在update中实现子查询的方式
    查看>>
    MySQL 有什么优点?
    查看>>
    mysql 权限整理记录
    查看>>
    mysql 权限登录问题:ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: YES)
    查看>>
    MYSQL 查看最大连接数和修改最大连接数
    查看>>
    MySQL 查看有哪些表
    查看>>
    mysql 查看锁_阿里/美团/字节面试官必问的Mysql锁机制,你真的明白吗
    查看>>
    MySql 查询以逗号分隔的字符串的方法(正则)
    查看>>
    MySQL 查询优化:提速查询效率的13大秘籍(避免使用SELECT 、分页查询的优化、合理使用连接、子查询的优化)(上)
    查看>>
    mysql 查询,正数降序排序,负数升序排序
    查看>>
    MySQL 树形结构 根据指定节点 获取其下属的所有子节点(包含路径上的枝干节点和叶子节点)...
    查看>>
    mysql 死锁 Deadlock found when trying to get lock; try restarting transaction
    查看>>
    mysql 死锁(先delete 后insert)日志分析
    查看>>
    MySQL 死锁了,怎么办?
    查看>>
    MySQL 深度分页性能急剧下降,该如何优化?
    查看>>