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

PHP Mysql PDO:Allgemeiner Fehler:2006 MySQL-Server ist verschwunden

Einige andere häufige Gründe für den Fehler, dass der MySQL-Server verschwunden ist, sind:

  • Sie (oder der Datenbankadministrator) haben den laufenden Thread mit einer KILL-Anweisung oder einem mysqladmin-Kill-Befehl beendet.

  • Sie haben versucht, eine Abfrage auszuführen, nachdem Sie die Verbindung zum Server geschlossen haben. Dies weist auf einen logischen Fehler in der Anwendung hin, der korrigiert werden sollte.

  • Eine Clientanwendung, die auf einem anderen Host ausgeführt wird, verfügt nicht über die erforderlichen Berechtigungen, um von diesem Host aus eine Verbindung zum MySQL-Server herzustellen.

  • Sie haben eine Zeitüberschreitung von der TCP/IP-Verbindung auf der Clientseite erhalten. Dies kann passieren, wenn Sie die Befehle mysql_options(..., MYSQL_OPT_READ_TIMEOUT,...) oder mysql_options(..., MYSQL_OPT_WRITE_TIMEOUT,...) verwendet haben. In diesem Fall kann eine Erhöhung des Timeouts helfen, das Problem zu lösen.

  • Sie haben auf der Serverseite eine Zeitüberschreitung festgestellt und die automatische Wiederverbindung im Client ist deaktiviert (das Reconnect-Flag in der MYSQL-Struktur ist gleich 0).

  • Sie verwenden einen Windows-Client und der Server hat die Verbindung getrennt (wahrscheinlich weil wait_timeout abgelaufen ist), bevor der Befehl ausgegeben wurde.

  • Das Problem unter Windows ist, dass MySQL in einigen Fällen keinen Fehler vom Betriebssystem erhält, wenn es in die TCP/IP-Verbindung zum Server schreibt, sondern stattdessen den Fehler erhält, wenn es versucht, die Antwort von der Verbindung zu lesen.

  • Die Lösung hierfür besteht darin, entweder ein mysql_ping() auf der Verbindung auszuführen, wenn seit der letzten Abfrage viel Zeit vergangen ist (das macht Connector/ODBC) oder wait_timeout auf dem mysqld-Server so hoch zu setzen, dass es in der Praxis nie mal aus.

  • Sie können diese Fehler auch erhalten, wenn Sie eine falsche oder zu große Abfrage an den Server senden. Wenn mysqld ein zu großes oder fehlerhaftes Paket empfängt, geht es davon aus, dass beim Client etwas schief gelaufen ist, und schließt die Verbindung. Wenn Sie große Abfragen benötigen (z. B. wenn Sie mit großen BLOB-Spalten arbeiten), können Sie das Abfragelimit erhöhen, indem Sie die max_allowed_packet-Variable des Servers festlegen, die einen Standardwert von 4 MB hat. Möglicherweise müssen Sie auch die maximale Paketgröße auf der Clientseite erhöhen. Weitere Informationen zum Einstellen der Paketgröße finden Sie in Abschnitt B.5.2.10, „Paket zu groß“.

  • Auch eine INSERT- oder REPLACE-Anweisung, die sehr viele Zeilen einfügt, kann diese Art von Fehlern verursachen. Jede dieser Anweisungen sendet eine einzelne Anfrage an den Server, unabhängig von der Anzahl der einzufügenden Zeilen; Daher können Sie den Fehler oft vermeiden, indem Sie die Anzahl der Zeilen reduzieren, die per INSERT oder REPLACE gesendet werden.

  • Sie erhalten auch eine unterbrochene Verbindung, wenn Sie ein Paket mit 16 MB oder mehr senden, wenn Ihr Client älter als 4.0.8 und Ihr Server 4.0.8 oder höher ist, oder umgekehrt.

  • Dieser Fehler kann auch angezeigt werden, wenn die Suche nach Hostnamen fehlschlägt (z. B. wenn der DNS-Server, auf den Ihr Server oder Netzwerk angewiesen ist, ausfällt). Dies liegt daran, dass MySQL für die Namensauflösung vom Hostsystem abhängig ist, aber keine Möglichkeit hat zu wissen, ob es funktioniert – aus Sicht von MySQL ist das Problem nicht von anderen Netzwerkzeitüberschreitungen zu unterscheiden.

  • Sie können auch sehen, dass der MySQL-Server weg ist, wenn MySQL mit der Option --skip-networking gestartet wird.

  • Ein weiteres Netzwerkproblem, das diesen Fehler verursachen kann, tritt auf, wenn der MySQL-Port (Standard 3306) von Ihrer Firewall blockiert wird, wodurch jegliche Verbindungen zum MySQL-Server verhindert werden.

  • Dieser Fehler kann auch bei Anwendungen auftreten, die untergeordnete Prozesse verzweigen, die alle versuchen, dieselbe Verbindung zum MySQL-Server zu verwenden. Dies kann vermieden werden, indem für jeden untergeordneten Prozess eine separate Verbindung verwendet wird.

  • Sie sind auf einen Fehler gestoßen, bei dem der Server während der Ausführung der Abfrage abstürzte.

Überprüfen Sie diesen Link:Weggegangen