mysql - 生产环境频繁Mysql gone away (Error 2006)

标签 mysql django python-3.x ubuntu-14.04

我在 django 1.10、python3.4、mysqlclient、mysql5.5 上运行一个网站。

我有多个管理命令在后台运行,用于不同时间的各种任务(如邮件发送、更新表)。最近,我开始看到许多 Mysql 消失了(错误 2006)。

我试图将 connection_timeout 更改为大于 max_connection age。这解决了一小部分问题,在大多数情况下,正在运行的函数停止出现错误 2006,但其他情况仍然如此,并且经常看到错误 2006。

在某些情况下,我尝试在运行函数或将其放入 try - except 循环之前使用 django.db.connection.close() 。在那些地方,这个错误不再发生,但我不能把这个 try-except 循环放在每个函数中。

Mysql gone away这个反复报错的根本原因是什么?有哪些不同的解决方案?最佳解决方案是什么,这样我就不必更改我的大部分代码?

其他变量:

我们从 django 1.7 升级到 1.10,最近更新了 mysqlclient 包,问题可能在那之后就出现了。

就在更新前后,我们网站的访问量也增加了数倍。这可以作为触发器吗?

最佳答案

正如在别处看到的那样,问题可能是您的查询太长,或者服务器由于不活动而关闭了连接。这在很大程度上取决于具体情况,但似乎如果您不在进行交易(这会排除第二种可能性),您可以应用类似于 Hook available for automatic retry after deadlock in django and mysql setup 的内容。

关于mysql - 生产环境频繁Mysql gone away (Error 2006),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42240998/

相关文章:

python - 计算多个词典之间的相似度 "score"

php - 如何在 PHP 中使用 SQL 中的 if/else 语句

mysql - Laravel 与附加数据透视表的多对多关系

django - heroku:关系 "auth_group"不存在

python - 如何防止Django的label_tag函数转义标签?

Python:点在最接近第三点的线上

javascript - laravel 中的搜索功能无法正常工作

python - 如何添加与 ManyToManyField 相关的另一个字段?

python - 真的很奇怪的 Cookie header 行为? - cookies

python - LabelEncoder fit_transform() 函数中的问题