rabbitmq MySQL错误:Mysql server已经消失了

ki1q1bka  于 2023-08-05  发布在  RabbitMQ
关注(0)|答案(3)|浏览(158)

我正在开发一个Symfony 3.1应用程序,它基本上是将作业消息放在RabbitMQ队列中,并使用监督程序,我产生了一些使用RabbitMQ消息的进程,并在Symfony中进行管理。消费者的工作是解码消息并创建一个新的Symfony\Bundle\FrameworkBundle\Console\Application,注入相同的内核并执行一个Symfony命令,该命令具有读/写数据库操作。
问题开始了。通常,同时,我通常会让派生的4个工作进程来使用消息。同时,所有消费者都对不同的数据执行相同的数据库操作,因此基本上所有进程都执行相同的Symfony RabbitMQ消费者。有时它工作得很好,没有任何问题,但有时MySQL返回错误"MySQL server has gone away",通常为了解决这个问题,我必须重新启动Supervisor服务,这样工作进程就会被杀死并再次产生。通常在重新启动后,它可以正常工作几个小时,但它的模式确实不可预测。
这不是MySQL连接超时,因为我确信它们是小操作,我已经增加了MySQL的connect_timeout。我还增加了wait_timeout到2天,所以基本上,这并没有解决问题。

e3bfsja2

e3bfsja21#

我们面临着一个类似的问题,通过命令行处理应用程序,试图调整mysql所有变量都在适当的范围内,但'Mysql消失错误'不断弹出。
对我们来说唯一有效的修复方法是在应用程序中的任何查询之前ping连接,并关闭挂起和不活动的连接,然后创建一个新的连接。

if ($this->em->getConnection()->ping() === FALSE) {
    $this->em->getConnection()->close(); // Close any previous connection as they are not active
    $this->em->getConnection()->connect(); // Get a fresh connection
}
$reseller = $this->em->getRepository(User::class)->findOneBy(['id' => $id]);

字符串
教义库中也提到:https://github.com/doctrine/dbal/blob/master/lib/Doctrine/DBAL/Connection.php#L1649

pxiryf3j

pxiryf3j2#

它可能是其中的一些问题。
1.可以从配置max_allowed_packet max_allowed_packet中增加的最大数据包大小
1.或者它可以是超时问题,因为你打开php进程,它永远不会结束,你可以实现一些try catch块,当你有一个mysql错误时,创建一个新的mysql连接。

lbsnaicq

lbsnaicq3#

我们在处理一个应用程序时遇到了类似的问题。此错误可能有各种原因。

相关问题