thinkphp-queue队列造成 MySQL server has gone away 错误解决办法
mysql 超时断线问题
队列任务运行一段时间,出现:SQLSTATE [HY000]: General error: 2006 MySQL server has gone away 报错。
解决方法和分析:
配置文件 database.php 中配置断线重连:
// 是否需要断线重连
'break_reconnect' => true,
// 断线标识字符串
'break_match_str' => ['2006'],
配置后虽然日志中会出现另一个报错:PDO::prepare (): send of 60 bytes failed with errno=32 Broken pipe,但并不影响程序运行结果。因为断线重连后,程序都会抛出错误:
.
.
.
} catch (\PDOException $e) {
if ($this->isBreak($e)) {
return $this->close()->query($sql, $bind, $master, $pdo);
}
throw new PDOException($e, $this->config, $this->getLastsql());
} catch (\Throwable $e) {
if ($this->isBreak($e)) {
return $this->close()->query($sql, $bind, $master, $pdo);
}
throw $e;
} catch (\Exception $e) {
if ($this->isBreak($e)) {
return $this->close()->query($sql, $bind, $master, $pdo);
}
throw $e;
}
日志调整
有时候某些原因程序出错,会有大量日志生成,最好调整下日志,单独出来。在配置文件 config/queue.php
开头添加:
use think\facade\Log;
Log::init([
'single' => 'queue',
'file_size' => 1024 * 1024 * 10,
'level' => ['error'],
]);
日志将输出到 runtime
目录的 queue-cli.log
文件
本文由 我爱PHP169 作者:admin 发表,其版权均为 我爱PHP169 所有,文章内容系作者个人观点,不代表 我爱PHP169 对观点赞同或支持。如需转载,请注明文章来源。