Allgemeiner Fehler: 2006 MySQL Server ist verschwunden [geschlossen]

8

Dies ist der Fehler, den ich plötzlich bekomme.

Additional uncaught exception thrown while handling exception.

Original
PDOException: SQLSTATE[70100]: Unknown error: 1317 Query execution was interrupted...my query

Additional
PDOException: SQLSTATE[HY000]: General error: 2006 MySQL server has gone away...my query

Nach einigen Recherchen klingt es so, als würde ein benutzerdefiniertes Modul, das ich erstellt habe, eine zu große Abfrage versuchen. Eine Lösung, die für viele Menschen zu funktionieren scheint, ist folgende:

  1. Öffne my.ini
  2. Ändern Sie "max_allowed_packet" von "1m" in "16m" (oder größer).
  3. Speichern Sie my.ini und starten Sie MySQL neu

Ich bin jedoch auf einem freigegebenen Server, daher kann ich my.ini nicht bearbeiten. Obwohl mein Provider mir bestätigt hat, dass der Wert auf 1 MB festgelegt ist, wird er nicht erhöht.

Ich habe auch versucht, Folgendes hinzuzufügen: ini_set('mysqli.reconnect', 'on');zu settings.php. Es hat das Problem nicht gelöst.

Kennt jemand eine andere Lösung oder arbeitet er herum?

Vielen Dank.

dbj44
quelle

Antworten:

8

Shared Hosting-Unternehmen geben das SUPER- Privileg nicht weiter. Wenn Sie es haben, können Sie max_allowed_packet einfach auf 512M setzen, indem Sie einfach Folgendes ausführen :

mysql> SET GLOBAL max_allowed_packet = 1024 * 1024 * 512;

Ein Neustart ist nicht erforderlich. Dann können alle eingehenden Verbindungen danach ein 512M- Paket haben .

Du kannst das nicht machen:

mysql> SET max_allowed_packet = 1024 * 1024 * 512;

weil du bekommst

ERROR 1621 (HY000): SESSION variable 'max_allowed_packet' is read-only. Use SET GLOBAL to assign the value

Die einzige Alternative, die ich mir vorstellen kann, ist, zu Amazon EC2 zu wechseln und dort MySQL zu installieren. Auf diese Weise können Sie my.cnf / my.ini frei bearbeiten und haben das SUPER- Privileg.

RolandoMySQLDBA
quelle
0

Ich habe meinen Provider gebeten, den Wert zu erhöhen, aber das würden sie nicht. Ich kann verstehen, warum, sie sind ein Unternehmen und möchten, dass ich 29,99 pro Monat für einen dedizierten Server bezahle, anstatt 4,99 für einen gemeinsam genutzten Server.

Es gibt jedoch eine Lösung: Identifizieren Sie die zu große Abfrage und teilen Sie sie in zwei oder mehr Teile auf. Ich habe meine Problemabfrage in zwei Hälften geteilt: Problem gelöst. Ineffizient - ja - aber es ist besser als meine Website, die überhaupt nicht funktioniert oder den Aufpreis zahlen muss.

dbj44
quelle
Bitte denken Sie daran, was ich über MySQL-Pakete gesagt habe ( superuser.com/a/273833/76764 ). Die üblichen Verdächtigen, die ein MySQL-Paket verstopfen können, sind große TEXT / BLOB-Felder. Vielleicht möchten Sie also darüber nachdenken, Ihren TEXT/BLOB fieldsstattdessen Jerry Rigging-Code zu komprimieren .
RolandoMySQLDBA
Ja, vielleicht kann das das Problem sein, aber obwohl meine SELECT-Abfrage relativ komplex war, bestand die zurückgegebene Ergebnismenge nur aus einigen hundert Zeichen Text.
dbj44
2
Möglicherweise treten Probleme mit den Cache-Tabellen auf, die INSERTs ausführen, die ziemlich groß sind. Ihre Lösung funktioniert hier oder an einem anderen Ort, an dem Drupal die Abfrage ausführt, nicht.
mpdonadio
Es ist kein INSERT, sondern nur eine SELECT-Abfrage mit etwa 25 Joins. Alles erledigt mit dem Abfrage-Generator. Wissen Sie, warum dies einen solchen Fehler verursachen würde? Das Einfügen über einen Formularübermittlungs-Handler ist kein Problem.
dbj44
0

Das Problem ist max_allowed_packet, dass Sie es mit einem größeren Wert einstellen.

So beheben Sie dieses Problem (wenn Sie sich in Windows befinden und xamp verwenden, suchen Sie die Datei my.ini).
Gehen Sie zu xampp \ mysql \ bin.
Öffnen Sie my.ini.
Ändern Sie "max_allowed_packet" von "1m" in "16m".
Speichern Sie my.ini. Starten Sie
nun neu MySQL über das XAMPP-Bedienfeld.

Diese Lösung haben Sie hier gefunden. http://minorpoint.blogspot.com/2007/09/mysql-server-has-gone-away.html

Yusef
quelle