Frage

Ich verwende Pylons (ein Python-Framework), um eine einfache Webanwendung bereitzustellen, aber sie scheint von Zeit zu Zeit abzustürzen, mit folgendem Eintrag im Fehlerprotokoll: (2006, 'MySQL server has gone away')

Ich habe ein wenig nachgeschaut und festgestellt, dass dies daran lag, dass die Verbindungen zu MySQL nicht erneuert wurden.Dies sollte jedoch kein Problem sein, da die sqlalchemy.pool_recycle in der Konfigurationsdatei sollte es automatisch am Leben halten.Der Standardwert war 3600, aber ich habe es wieder angerufen 1800 wegen diesem Problem.Es hat ein bisschen geholfen, aber 3600 sollen Den Unterlagen zufolge ist alles in Ordnung.Die Fehler treten immer noch halbjährlich auf.Ich möchte es jedoch nicht zu sehr senken und meine eigene Datenbank DOS :).

Vielleicht ist etwas in meiner MySQL-Konfiguration doof?Ich bin mir nicht sicher, wo ich genau suchen soll.

Weitere relevante Details:

  Python 2.5
  Pylons: 0.9.6.2 (w/ sql_alchemy)
  MySQL: 5.0.51
War es hilfreich?

Lösung

Ich glaube, ich habe es behoben.Es stellte sich heraus, dass ich einen einfachen Konfigurationsfehler hatte.Meine INI-Datei lautete:

sqlalchemy.default.url = [connection string here]
sqlalchemy.pool_recycle = 1800

Das Problem ist, dass mein environment.py In der Datei wurde angegeben, dass die Engine nur Schlüssel mit dem Präfix zuordnen würde: sqlalchemy.default Also pool_recycle wurde ignoriert.

Die Lösung besteht darin, einfach die zweite Zeile in der Ini zu ändern:

sqlalchemy.default.pool_recycle = 1800

Andere Tipps

Möglicherweise möchten Sie die Timeout-Variablen von MySQL überprüfen:

show variables like '%timeout%';

Sie sind wahrscheinlich interessiert wait_timeout (weniger wahrscheinlich, aber möglich: interactive_timeout).Unter Debian und Ubuntu sind die Standardeinstellungen 28800 (MySQL beendet Verbindungen nach 8 Stunden), aber möglicherweise ist die Standardeinstellung für Ihre Plattform eine andere oder wer auch immer den Server verwaltet, hat die Dinge anders konfiguriert.

AFAICT, pool_recycle hält die Verbindungen nicht wirklich aufrecht, sondern lässt sie von selbst ablaufen, bevor MySQL sie beendet.Ich kenne mich mit Masten nicht aus, aber wenn die Verbindungen zeitweise unterbrochen werden, tun Sie Folgendes SELECT 1; ist eine Option, die sie auf Kosten praktisch keiner Serverlast und minimalem Netzwerkverkehr am Leben hält.Ein letzter Gedanke:Schaffst du es irgendwie, eine Verbindung zu nutzen, von der Pylonen glaubt, sie sei abgelaufen?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top