关于 PHP 使用 mysqli 长连接报错
使用的workerman框架,常驻进程
mysql链接使用的mysqli的长连接
self::$mysqli = mysqli_connect('p:'.$host.':'.$port, $user, $pass);
因为连接有超时问题,所以我们会定时ping一下mysql
self::$mysqli = mysqli_connect('p:'.$host.':'.$port, $user, $pass);
if (!self::$mysqli->ping())
{
write_log();
write_error();
}
现在发现进程很长时间没有与mysql通讯的话,新的请求过来的时候,会在mysqli_connect这里报错。
'mysqli_connect(): MySQL server has gone away'
'mysqli_connect(): send of 61 bytes failed with errno=32 Broken pipe'
查看了日志之后,发现mysql的ping返回正常,没有报错。
而且在mysqli_connect报错之后的那次查询,也会成功执行和返回。
但是这里有可能导致进程挂掉,所以有隐患。
请问这个长连接为什么会有这种报错,并且还不影响数据返回,有没有什么办法解决这个报错?
mysql里面有个配置,10小时没连接就不能连接了。 就这种服务的话得占用一个连接。
我以前的处理方案是每次循环去读一次库,保持连接。
伪代码