MySQL Server ist weg
WordPress hatte eine funktionierende Datenbankverbindung und verlor sie mitten in der Anfrage. Die Abfrage ist selten fehlerhaft; die Verbindung ist es.
WordPress database error MySQL server has gone away for query …
Drei Dinge lassen eine Live-Verbindung fallen: eine Abfrage größer als max_allowed_packet, eine Leerlaufphase länger als wait_timeout oder MySQL-Neustart. Überprüfen Sie, ob der Server länger als die Site war, da eine niedrige Betriebszeit die Frage sofort beantwortet und die anderen beiden nicht getestet werden müssen.
Die wahrscheinlichsten Ursachen zuerst.
Gehen Sie die Liste der Reihe nach durch. Prüfen Sie jede Ursache, bevor Sie etwas ändern, da die Lösungen unterschiedlich sind und eine Vermutung mehr Zeit kostet als ein Befehl.
| Ursache | So prüfen Sie es | Lösung |
|---|---|---|
| Eine Abfrage größer als max_allowed_packet | Der Fehler folgt einem großen Import, einem Post mit einem sehr großen serialisierten Metawert oder einer Backup-Wiederherstellung - und er scheitert jedes Mal am selben Punkt und nicht zufällig. | Erheben Sie max_allowed_packet auf dem Server, um die größte einzelne Anweisung bequem zu überschreiten. Dies ist eine serverseitige Decke, so dass eine clientseitige Einstellung sie nicht verschiebt. |
| Die Verbindung im Leerlauf vorbei wait_timeout | Lange Admin-Operationen scheitern am Ende, während gewöhnliche Seitenladungen niemals funktionieren. Die Lücke zwischen zwei Abfragen überschritt den Timeout und MySQL schloss den Socket. | Warten Sie wait_timeout an oder brechen Sie die Arbeit in kürzere Batches, so dass keine einzelne Verbindung so lange im Leerlauf bleibt. |
| MySQL neu gestartet oder getötet | Die Server-Uptime ist kürzer als die der Site, oder das Fehlerprotokoll zeichnet eine Abschaltung auf. Out-of-Memory-Kills sind der übliche Grund für kleine Computer. | Eine Datenbank, die einmal für den Speicher getötet wurde, wird unter demselben Last wieder getötet. |
| Die Datenbank verweigert neue Arbeit | Fehler gruppieren sich unter Last und werden gelöscht, wenn der Datenverkehr abfällt, und die Prozessliste befindet sich in der Nähe von max_connections. | Verringern Sie die Verbindung, anstatt das Limit zu erhöhen. Langlaufende Abfragen, die Slots belegen, sind die Ursache; eine höhere Obergrenze verzögert nur den gleichen Fehler. |
Schritt für Schritt zur Lösung.
Die Befehle setzen WP-CLI und Shell-Zugriff voraus. Jeder Schritt erklärt, was er tut, damit Sie ihn bei Bedarf im Dashboard oder per SFTP ausführen können.
Fragen Sie, wie lange der Server läuft
Eine Betriebszeit kürzer als das letzte Mal, wenn die Website funktioniert hat, bedeutet, dass die Datenbank neu gestartet wurde, und nichts anderes auf dieser Liste muss überprüft werden.
mysqladmin status mysql -e "SHOW GLOBAL STATUS LIKE 'Uptime';"
Lesen Sie die beiden Grenzen, die wichtig sind
Paketgröße und Leerlauf-Timeout machen den größten Teil dessen aus, was übrig bleibt, wenn ein Neustart ausgeschlossen ist.
mysql -e "SHOW VARIABLES WHERE Variable_name IN ('max_allowed_packet','wait_timeout','interactive_timeout');"Heben Sie die Paketobergrenze an, wenn ein Import fehlschlägt
Legen Sie es in der Serverkonfiguration statt pro Sitzung fest, sodass eine Wiederherstellung, die von einem beliebigen Tool ausgeführt wird, diese erbt.
[mysqld] max_allowed_packet = 256M wait_timeout = 300
Überprüfen Sie, ob es für das Gedächtnis getötet wurde
Das Kernelprotokoll benennt den Prozess, den es gewählt hat. Dies ist die häufigste Ursache auf einem kleinen Server, auf dem MySQL neben PHP ausgeführt wird.
dmesg -T | grep -i -E 'out of memory|killed process' | tail -n 20
Wiederholen Sie die Operation in kleineren Stücken
Wenn die Arbeit ein Import ist, hält das Batching jede Aussage gut unter der Decke und jede Verbindung ist beschäftigt.
wp db import dump.sql wp db check
Darum kümmert sich die Plattform.
Die Datenbank läuft in einem eigenen Container mit einer Speicherzulage, die allein dazu gehört, also ein PHP-Prozess, bei dem Spikes MySQL nicht vom Kernel getötet bekommen können - der Fehlermodus hinter den meisten dieser Fehler auf einem einzelnen freigegebenen Computer. Packet- und Timeout-Werte werden gegen diese Zulage bemessen und nicht bei den Verteilungsvorgaben, die eine große Wiederherstellung sofort übersteigt.
Häufige Fragen.
Sind meine Daten beschädigt?
Warum nur während Importen und Backups?
Soll ich wait_timeout einfach sehr hoch setzen?
Wie unterscheidet sich das von "Fehler beim Aufbau einer Datenbankverbindung"?
War es keiner davon?
Diese Fehler können im Browser ähnlich aussehen.