我自己用php写的一个常驻内存的队列处理的脚本,经常报类似下面这样的错误:
mysqli_query(): send of 309 bytes failed with errno=32 Broken pipe ......
注意这个 309 是不定的,有 305 有 287 有 151 的时候,我网上搜了一下,大部分的处理方法都是说设置:
max_allowed_packet=100m #设置一个更大的值
我理解的这个设置的意思是数据量超过了 mysql 能接受的数据量,但是我这个貌似没有超过这个设置的数,所以我请问下这里是否有大神知道我这个是为什么报错吗?以及该如何处理呢?
根据你的描述,Broken pipe 错误可能是因为 PHP 脚本与 MySQL 服务器之间的连接在长时间无操作后被 MySQL 服务器关闭。当你的脚本再次尝试通过这个已经关闭的连接执行查询时,就会遇到这个错误。这个问题与 max_allowed_packet 参数可能无关。
为了解决这个问题,你可以尝试以下方法:
检查并调整 MySQL 服务器的 wait_timeout 参数。这个参数决定了非交互式连接在无活动后多久会被关闭。你可以根据需要将其设置得更大,例如:
请注意,在这里,你需要用自己的数据库连接信息替换 $host、$user、$password 和 $database 变量。
通过调整这些设置,你应该能够避免遇到 Broken pipe 错误。