Magento MySQL hat Fehler verschwunden

14

Ich habe viele seltsame Probleme mit Magento CE 1.7.0.2. Während des normalen Betriebs erstellt die Site gelegentlich eine Magento-Fehlerseite (bei der Verarbeitung Ihrer Anfrage ist ein Fehler aufgetreten ) sowohl im Frontend als auch im Backend. Beim Anzeigen des zugehörigen Berichts wird die folgende Meldung angezeigt:

"SQLSTATE[HY000] [2006] MySQL server has gone away"

Manchmal, aber seltener, lautet die Meldung:

 Connection reset by peer

Ich habe mir die Datei var> log> system.log angesehen und der MySQL has gone awayFehler wird von Folgendem begleitet:

Warning: PDO::__construct(): MySQL server has gone away  in /var/www/html/domain.com/live/lib/Zend/Db/Adapter/Pdo/Abstract.php on line 129
Error while reading greeting packet. PID=1863  in /var/www/html/domain.com/live/lib/Zend/Db/Adapter/Pdo/Abstract.php on line 129

Darüber hinaus scheint der folgende Fehler bei jeder Anforderung sowie bei den MySQL has gone awayFehlern aufzutreten:

 Warning: include(File.php): failed to open stream: No such file or directory  in /var/www/html/domain.com/live/lib/Varien/Autoload.php on line 93
 Warning: include(): Failed opening 'File.php' for inclusion

Ich habe mir die meisten Artikel angesehen, die ich darüber finden kann, und an den Datenbankparametern herumgebastelt, bis die Kühe nach Hause kamen, aber der Fehler bleibt bestehen.

Nachdem ich eine weitere Frage zum Compiler beantwortet habe, stelle ich fest, dass die Administrationsseite System> Tools> Compilation vollständig leer ist. Ich denke, das sind alles verwandte Fehler, aber jeder Einblick in das Debuggen oder die Ursachen wäre so hilfreich.

Ich entschuldige mich, wenn dies inkohärent ist; Ich bin seit ungefähr 42 Stunden wach, bitte um Klärung. Vielen Dank.

- update -

Mein Server-Stack zur Verdeutlichung:

PHP 5.5.4 (PHP-FPM)
Nginx 1.4.2
MySQL 5.5.33

- update -

Mir ist (nach etwas Schlaf) aufgefallen, dass ich nie spezifiziert habe - die PHP-Codebasis und die MySQL-Datenbank befinden sich auf getrennten Hardware-Servern - sehr wichtig zu wissen, ob Sie mir helfen werden !! Ich entschuldige mich.

Jongosi
quelle
1
Verwenden Sie dauerhafte Datenbankverbindungen? Wenn ja, deaktivieren Sie sie. Ich würde auch die MySQL-Protokolle überprüfen, um festzustellen, ob dort Fehler vorliegen oder ob sie tatsächlich neu gestartet werden, anstatt nur die Verbindung zu trennen.
Davidalger
Vielen Dank, David, wenn er die MySQL-Protokolle und die Datenbank überwacht, wird er nie getroffen, wenn der Fehler auftritt. Ich habe dauerhafte Verbindungen verwendet, das Deaktivieren hat nicht geholfen :(
Jongosi
1
Haben Sie gedacht, dass die Verbindung schlecht ist. Eine Ursache für diesen Fehler ist, dass die DB die Nachricht nie erhalten hat. Versuchen Sie das Debuggen, indem Sie die Verbindungsinformationen aus local.xml verwenden, um mysqli-Funktionen aufzurufen. Schau was passiert.
SH
Vielen Dank, schien mein Problem beim Bearbeiten der lokalen Datei

Antworten:

9

Dies liegt hauptsächlich an einem der beiden folgenden Gründe

  1. Server hat das Zeitlimit überschritten und die Verbindung geschlossen.
    Behebung: Erhöhen Sie die wait_timeoutVariable in der my.cnf/my.ini Konfigurationsdatei Ihres mysqld .
  2. Der Server hat ein falsches oder zu großes Paket verworfen.
    Fix: Erhöhen Sie die maximale Paketgröße, indem Sie den Wert von max_allowed_packetin my.cnf/my.ini file erhöhen .

Bitte checken Sie Dateien ein, wenn Sie versuchen, etwas zu Langes oder Unzutreffendes zu bekommen.

Anshu Mishra
quelle
Thx Anshu, ich verfolge das MySQL-Abfrageprotokoll und die Datenbank wird nie mit einer Anfrage getroffen. Wenn ich den Server neu starte, kann manchmal innerhalb von 20 Sekunden nach dem Einschalten des Servers ein Fehler auftreten - viel zu kurz, als dass selbst die Standardeinstellungen das Zeitlimit überschritten hätten. Ich habe max_allowed_packetauf 2G und wait_timoutauf 86400 eingestellt, immer noch keine Hilfe.
Jongosi
Bitte überprüfen Sie, ob die Datenbankverbindung korrekt ist. Überprüfen Sie Ihre App / etc / local.xml-Datei
Anshu Mishra
Thx Anshu, ja, es ist richtig - die Verbindung geschieht etwa 68% der Anfragen
Jongosi
6

Problem gelöst! Vielen Dank an alle für die Hilfe. Dies war ein Hardware- Firewall-Problem mit dem Webhost, selbst nachdem sie von uns deaktiviert wurden.

Wie vom Serverteam von 1 & 1 bestätigt , wurden die Hardware-Firewalls korrekt konfiguriert, aber in etwa 25% der Fälle wurde der gültige Datenverkehr zwischen dem Dateiserver und dem Datenbankserver fälschlicherweise abgefangen.

Wir haben stattdessen iptables konfiguriert und die Hardware-Firewalls vollständig heruntergefahren. 100% Verfügbarkeit jetzt.

Jongosi
quelle
2
Oh mein! Sporadische Firewall ... muss diese Art von Problem lieben. Ich bin froh, dass du es in Ordnung gebracht hast. :)
Davidalger
Das gleiche Problem, und es sieht so aus, als würde Ihre Lösung auch für uns funktionieren. Ich rede auch mit 1 & 1. Hat Ihnen der Support weitergeholfen? Kann ich Sie kontaktieren? Twitter? Facebook? Einzelheiten entnehmen Sie bitte meinem Profil. Vielen Dank
webDEVILopers
2

Ich hatte das gleiche Problem mit Magento 2.1 und mein MySQL-Fehlerprotokoll zeigte während des Prozesses "MySQL ist weg" mehrmals den folgenden Fehler:

...[Warning] File Descriptor 1228 exceeded FD_SETSIZE=1024

Um dieses Problem möglicherweise zu beheben, überprüfen Sie zunächst den open filesWert mit $ ulimit -n, der in meinem Fall lautete 256.

Zweitens fügen Sie table_open_cache = {that ulimit -n value}unter dem [mysqld]Abschnitt in Ihrem my.cnf.

Nun starte MySQL neu und hoffentlich bist du wieder dabei.

Hinweis: Ich führe Magento 2.1 lokal unter OS X El Capitan mit PHP 7.1 und MySQL 5.7.15 aus, das mit Homebrew erstellt wurde. Aber ich wette, diese Lösung würde auch auf älteren oder anderen Setups funktionieren.


quelle
1

Bearbeiten Sie die Datei app / etc / local.xml in Ihrem Magento-Ordner und ersetzen Sie den Eintrag für den Host mit '127.0.0.1' anstelle von 'localhost'.

broc
quelle
Die Datenbank befindet sich auf einem separaten Hardware-Server, daher wird die IP-Adresse des MySQL-Servers verwendet.
Jongosi
1

Beim Migrieren einer großen Datenbank zwischen zwei Servern ist der gleiche Fehler aufgetreten.

Das vorübergehende Hinzufügen der folgenden Elemente in der mysql-Konfigurationsdatei (/etc/mysql/my.cnf) auf meinem lokalen (Ziel-) Server und das Neustarten von mysql (Dienst-mysql-Neustart) haben das Problem für mich behoben:

max_allowed_packet      = 160M
wait_timeout            = 28800000
Michael
quelle