2016-08-10 6 views
0

Zuerst ging ich schon durch verwandte Beiträge, aber ohne Glück.PHP Mysql geht nach ~ 60 Sekunden weg

Ich folgte die in MySQL server has gone away - in exactly 60 seconds bereitgestellte Lösung diese Werte am Anfang einstellen:

ini_set('mysql.connect_timeout', 300); 
ini_set('default_socket_timeout', 300); 

aber es scheint, dass der Fehler bestehen bleiben.

Der Fehler tritt auf, bevor eine Abfrage durchgeführt: die Datenbank-Klasse für die Handhabung der mysql-Operationen, führen Sie einen Ping (mysqli_ping) um die Verbindung zu aktualisieren (das ist die Bedeutung der Verwendung von mysql Ping) aber in bestimmten Punkt, 60 ~ es wirft diese Warnung:

Warnung: mysqli_ping(): MySQL-Server weg in gegangen ist ...

gibt es etwas, das ich fehlt?

AKTUALISIERT Ich habe herausgefunden, wo genau das Problem ist.

Ich werde weiter meinen Workflow erklären. Ich stelle zwei verschiedene DB-Verbindungen her, die erste, die ich mache, dient nur zum Abrufen von Daten, und die zweite, wird verwendet, um alle erhaltenen Daten einzufügen (Zeile für Zeile). Da die zweite Verbindung die ist, die Operationen durchführt, dachte ich, dass das, das den Server produziert, verschwunden ist, aber es stellt sich heraus, dass der Fehler durch die Leerlaufverbindung (die erste) erhöht wird.

Die Problemumgehung, die ich gemacht habe, ist, die Verbindung zu schließen (die erste wegen der es nicht mehr verwendet wird), direkt nachdem die Daten abgefragt wurden.

Die zweite Verbindung hat genug Zeit, um eine Zeitüberschreitung nicht zu erreichen.

Die erste Verbindung besteht zu einer entfernten Datenbank und die zweite Verbindung zu meinem lokalen Server, so dass ich die zweite vollständig kontrollieren kann.

Das seltsame Ding mit der Verbindung, die ich mit dem entfernten MySQL-Server mache, ist, dass, wenn ich von meinem PHP-Skript nach den 60 Sekunden oder so verbinde, es die Zeitüberschreitung erreicht, aber wenn ich es von der Konsole anschließe Verbindung ist kein Zeitlimit. Weißt du, wie es mir gelungen ist, diese Zeitüberschreitung nicht zu bekommen (Server ist weg)? Wie bereits erwähnt, habe ich bereits einen Workaround, aber ich würde gerne wissen, warum PHP nach ~ 60 Sekunden aussetzt, während ich von der Konsole aus pro Stunde verbunden bleiben kann.

+0

Führen Sie die Abfrage 'SELECT @@ WAIT_TIMEOUT; '. Der Standardwert ist 28800, aber ich erwarte, dass Sie 60 sehen werden. –

Antwort

3

Die von Ihnen festgelegten Einstellungen ändern die Clientverbindung. Dieses Problem hängt mit dem Server zusammen: Es ist der Server, der die Verbindung schließt. Um diese Konfiguration zu ändern, müssen Sie den Wert von wait_timeout auf der my.cnf ändern

Quellen: http://dev.mysql.com/doc/refman/5.7/en/gone-away.html http://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_wait_timeout

Nur noch eine Sache: ändern sind diese vielleicht nicht das Beste, was Sie tun können. Versuchen Sie zuerst, Ihre Anfrage zu verbessern.

Verwandte Themen