Частый Mysql исчез (ошибка 2006) в производственной среде

У меня есть веб-сайт на django 1.10, python3.4, mysqlclient, mysql5.5.

У меня есть несколько команд управления, работающих в фоновом режиме для различных задач (таких как отправка почты, обновление таблиц) в разное время. В последнее время я начал видеть, что многие Mysql исчезли (ошибка 2006).

Я попытался изменить connection_timeout, чтобы он был больше, чем max_connection age. Это решило небольшую долю проблемы, из-за которой ошибка 2006 перестала возникать для работающей функции в большинстве случаев, но в других случаях ошибка 2006 остается неизменной.

В некоторых случаях я пытался использовать django.db.connection.close() перед запуском функции или вводом ее в цикл try-except. В этих местах эта ошибка больше не возникает, но тогда я не могу поместить этот цикл try-except в каждую функцию.

Какова основная причина этой повторяющейся ошибки? Mysql ушел? Какие есть разные решения и какое решение лучше всего, чтобы мне не пришлось менять большую часть своих кодов?

Другие переменные:

Мы обновились с django 1.7 до 1.10 и недавно обновили пакет mysqlclient, и после этого, вероятно, возникла проблема.

Незадолго до обновления посещаемость нашего сайта также увеличилась в несколько раз. Может ли это быть триггером?


person sprksh    schedule 15.02.2017    source источник


Ответы (1)


Как видно из других источников, проблема может заключаться либо в том, что ваш запрос слишком длинный, либо в том, что сервер закрыл соединение из-за бездействия. Это во многом зависит от обстоятельств, но кажется, что если вы не находитесь в середине транзакции (что исключает вторую возможность), вы можете применить что-то похожее на Хук доступен для автоматического повтора после взаимоблокировки в настройках django и mysql

person Marcos Dione    schedule 28.11.2017