php脚本总是报 mysqli_query(): send of 309 bytes failed with errno=32 Broken pipe 这样的错误?

我自己用php写的一个常驻内存的队列处理的脚本,经常报类似下面这样的错误:

mysqli_query(): send of 309 bytes failed with errno=32 Broken pipe ......

注意这个 309 是不定的,有 305 有 287 有 151 的时候,我网上搜了一下,大部分的处理方法都是说设置:

max_allowed_packet=100m #设置一个更大的值

我理解的这个设置的意思是数据量超过了 mysql 能接受的数据量,但是我这个貌似没有超过这个设置的数,所以我请问下这里是否有大神知道我这个是为什么报错吗?以及该如何处理呢?

阅读 2.9k
2 个回答

根据你的描述,Broken pipe 错误可能是因为 PHP 脚本与 MySQL 服务器之间的连接在长时间无操作后被 MySQL 服务器关闭。当你的脚本再次尝试通过这个已经关闭的连接执行查询时,就会遇到这个错误。这个问题与 max_allowed_packet 参数可能无关。

为了解决这个问题,你可以尝试以下方法:

检查并调整 MySQL 服务器的 wait_timeout 参数。这个参数决定了非交互式连接在无活动后多久会被关闭。你可以根据需要将其设置得更大,例如:

if (!mysqli_ping($conn)) {
    // 断开连接
    mysqli_close($conn);

    // 重新连接
    $conn = mysqli_connect($host, $user, $password, $database);
}

请注意,在这里,你需要用自己的数据库连接信息替换 $host、$user、$password 和 $database 变量。

通过调整这些设置,你应该能够避免遇到 Broken pipe 错误。

感觉是数据库压力过大,或者超时

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题