Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Warum erhalte ich in Django die Ausnahme „MySQL-Server ist verschwunden“?

Ich hatte genau das gleiche Problem wie du. Ich habe ein Überwachungsskript mit der Watchdogs-Bibliothek implementiert, und am Ende von „wait_timeout“ wurde ein MySQL-Fehler ausgelöst.

Nach ein paar Versuchen mit der Funktion "django.db.close_old_connections()" hat es immer noch nicht funktioniert, aber ich habe versucht, alte Verbindungen in jedem definierten Zeitintervall zu schließen, was nicht funktioniert hat. Ich habe den Schließbefehl so geändert, dass er nur vor dem Aufruf meines benutzerdefinierten Verwaltungsbefehls ausgeführt wird (das ist der Befehl, der mit db interagiert und mit einem MySQL-Fehler abstürzt) und er hat angefangen zu funktionieren.

Anscheinend von dieser Seite , der Grund dafür ist, dass die Funktion „close_old_connection“ nur mit HTTP-Anforderungssignalen verknüpft ist und daher nicht in bestimmten benutzerdefinierten Skripts ausgelöst wird. Die Dokumentation von Django sagt das nicht, und ich habe die Dinge ehrlich gesagt auch so verstanden, wie Sie es verstanden haben.

Sie können also versuchen, den Aufruf zum Schließen der alten Verbindung hinzuzufügen, bevor Sie mit db:

interagieren
from django.db import close_old_connections
close_old_connections()
do_something_with_db()