2017-11-28 2 views
0
Error displaying the error page: Application Instantiation Error: Could not connect to MySQL. 

Dieser Fehler wird manchmal angezeigt (einer alle 20 Seitenaufrufe) und ich habe viele Lösungen ohne jede Änderung ausprobiert.Joomla - Konnte keine Verbindung zu MySQL herstellen - "Irgendwann"

Dieser Fehler gefunden mit Joomla 3.5+

+0

Haben Sie Ihren Code überprüft? Haben Sie die Sitzung nach der Verwendung geschlossen? – Genuine

+0

Hat Ihr MySql Server viel Verkehr? Bitte versuchen Sie "show processlist;" um zu prüfen, wie viele Verbindungen offen sind. Möglicherweise müssen Sie das Verbindungslimit von MySql Server erhöhen. ODER etwas wie @Genuine vorgeschlagen, schließen Joomla Sitzungen richtig? session_write_close() schließt auch Datenbankverbindungen, wenn sie geöffnet sind. – rsharpy

+0

@Genuine Ich habe session_write_close() oder irgendwelche Sitzungsfunktionen in meinem Programm nicht verwendet, ich habe keine Ahnung, ob du mehr erklären kannst. – alnassre

Antwort

0

Server RAM war sehr niedrig!

Nach dem Upgrade von 0,5 GB auf 2 GB beginnt die ganze Art von Fehler mit Error displaying the error page: gegangen.

Ich habe die Problemlösung gefunden, indem ich htop beim Verbinden mit dem Server über SSH verwendet habe, danach beginne ich Seiten schnell zu öffnen, die den Fehler zeigen, plus der htop zeigt, dass der RAM fast voll war.

show processlist; waren hilfreich zu finden, dass das Problem nicht über die Verbindungsnummer, die es manchmal den gleichen Fehler auf die gleiche Weise kostet.

1

Dies wird Ihnen helfen, einige testings tun ...

auf MySQL-Server laufen diese Abfrage ...

show processlist; 

Wenn dies eine Menge zeigt von Verbindungen dann können Sie das Problem mit max_connections treffen. Versuchen Sie, das auf eine vernünftige Anzahl zu erhöhen. Aber machen Sie es nicht zu sehr, denn wenn es die Menge der verfügbaren Ressourcen auf Ihrem Server übersteigt, wird es MySql Server zum Absturz bringen und es wird zu einem größeren Problem, wenn Ihre Website offline gehen wird.

Versuchen Sie zu überprüfen, ob Sie Sitzungen ordnungsgemäß in Ihren Skripten mit session_write_close() schließen; Sie können mehr über diese Funktion hier finden: http://php.net/manual/en/function.session-write-close.php Diese Funktion wird die aktuelle Sitzung des Benutzers auf der Festplatte schreiben, um beim nächsten Mal neu geladen zu werden, und der wichtigste Teil, der für Sie mit diesem Problem tun wird, ist, dass PHP jegliche Verbindung zum MySql Server schließt Damit wird der MySql-Server freigegeben, damit der nächste Besucher eine weitere Seite öffnen kann.

Angenommen, Sie haben 150 max_connections und gleichzeitig 200 Besucher, dann wartet PHP noch eine Weile, bis weitere 50 Verbindungen frei sind, bevor ein Timeout-Fehler ausgegeben wird. "Verbindung zum Server konnte nicht hergestellt werden ". Aber, wenn Sitzungen nicht richtig schließen, dann ist es so schlimm, dass 50 Verbindungen nie verarbeitet werden, weil 150 wird nie sehr bald weggehen, gibt es eine separate MySql-Einstellung für diese namens wait_timeout. Also wird jede MySql-Verbindung, die Sie öffnen, so lange warten, bis Sie sich selbst im Skript schließen, so wie Sie ODER öffnen, bis wait_timeout passiert. Wenn Sie die Sitzungen jedoch ordnungsgemäß schließen, wird die nächste Verbindung verfügbar, sobald Ihr PHP-Skript die Verarbeitung abgeschlossen hat und die Seite für den Benutzer erstellt wurde. Die Verbindung wird frei für die nächste Verbindung.

Verwandte Themen