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 对观点赞同或支持。如需转载,请注明文章来源。

发表回复