MySQL Server ist beim Importieren einer großen SQL-Datei verschwunden


259

Ich habe versucht, eine große SQL-Datei über phpMyAdmin zu importieren ... Aber es wurde immer wieder ein Fehler angezeigt

'MySQL-Server ist weg'

Was ist zu tun?


3
Was sind Ihre Werte für max_allowed_packet und wait_timeout?
Daemonofchaos

1
Sie können versuchen, zu verdoppeln max_allowed_packet. Ein bisschen grob, aber wenn das funktioniert, können Sie einen vernünftigen Wert finden.
Nanne

1
Danke für das Lachen, Cole Johnson. Das war wunderbar! LOL! :)
Mbrinson

Ich sehe es oft zufällig. Aber ich kann den gleichen Fehler nicht noch einmal reproduzieren. Und erkannte daher, dass es dynamisch sein könnte. Wenn der Client zu viele SQLs an den Server sendet (z. B. aus einer Schleife), kann dies manchmal passieren. Es ist wichtig, den tatsächlichen Grund für diesen Fehler zu finden. Überprüfen Sie Ihre Abfrageprotokolle auch auf sich wiederholende SQL-Muster, um die Hinweise herauszufinden.
Bimal Poudel

manchmal bekommen Sie dies, wenn Ihr Speicherplatz niedrig ist
pramodtech

Antworten:


376

Wie hier angegeben :

Zwei der häufigsten Gründe (und Korrekturen) für den MySQL-Server (Fehler 2006) sind:

Der Server hat eine Zeitüberschreitung festgestellt und die Verbindung geschlossen. Wie repariert man:

  1. Überprüfen Sie, ob die Variable wait_timeout in der Konfigurationsdatei my.cnf Ihres mysqld groß genug ist. Auf Debian: sudo nano /etc/mysql/my.cnf, Set wait_timeout = 600Sekunden (Sie können diesen Wert zwicken / verringern , wenn Fehler 2006 verschwunden ist), dann sudo /etc/init.d/mysql restart. Ich habe nicht überprüft, aber der Standardwert für wait_timeout liegt möglicherweise bei 28800 Sekunden (8 Stunden).

  2. Der Server hat ein falsches oder zu großes Paket verworfen. Wenn mysqld ein zu großes oder falsches Paket erhält, wird davon ausgegangen, dass mit dem Client ein Fehler aufgetreten ist, und die Verbindung wird geschlossen. Sie können die maximale Paketgrößenbeschränkung erhöhen, indem Sie den Wert von max_allowed_packet in der Datei my.cnf erhöhen. Unter Debian: sudo nano /etc/mysql/my.cnfsetzen max_allowed_packet = 64MSie (Sie können diesen Wert anpassen / verringern, wenn der Fehler 2006 behoben ist) und dann sudo /etc/init.d/mysql restart.

Bearbeiten:

Beachten Sie, dass für MySQL-Optionsdateien ihre Befehle nicht bereits als Kommentare verfügbar sind (wie z. B. in php.ini). Sie müssen also jede Änderung / zwicken in eingeben my.cnfoder my.iniund legen Sie sie in mysql/dataVerzeichnis oder in einem der anderen Pfade, unter der richtigen Gruppe von Optionen wie [client], [myslqd]usw. Zum Beispiel:

[mysqld]
wait_timeout = 600
max_allowed_packet = 64M

Starten Sie dann den Server neu. Geben Sie den MySQL-Client ein, um ihre Werte abzurufen:

> select @@wait_timeout;
> select @@max_allowed_packet;

72
In meinem Fall war es die Variable max_allowed_packet . Es wurde ein Standardwert von 1 MB festgelegt (Sie können dies sehen, indem Sie die SHOW VARIABLESMySQL-Abfrage ausführen), und die Datei, die ich importierte, hatte einige sehr große Datensätze. Ich habe die Datei my.ini geöffnet (ich habe Windows ausgeführt) und den Wert auf Folgendes gesetzt : max_allowed_packet = 64M, MySQL neu gestartet und den Import erneut ausgeführt.
Brent Matzelle

Ich habe große Dateien mit Web-Ausgaben in die Datenbank hochgeladen. Das hat geholfen, danke ... :-)
inf3rno

@BrentMatzelle Das hat sich sicherlich um das Problem "MySQL ist weg" gekümmert. Vielen Dank!
Asprin

2
Ich kann keine wait_timeoutLinie finden
Oki Erie Rinaldi

4
im Falle von Windows (mit Xampp) war es my.ini Datei und innodb_lock_wait_timeout
Ananda

98

Für mich hat diese Lösung nicht geklappt, also habe ich ausgeführt

SET GLOBAL max_allowed_packet=1073741824;

in meinem SQL-Client.

Wenn dies bei laufendem MYSql-Dienst nicht geändert werden kann, sollten Sie den Dienst beenden und die Variable in der Datei "my.ini" ändern.

Beispielsweise:

max_allowed_packet=20M

1
Dies funktionierte für mich unter MAMP (OS X), während die anderen populäreren Antworten dies nicht taten. Aber ist es dauerhaft?
Atwixtor

2
@atwixtor nein, das Setzen von Variablen wie dieser funktioniert, bis der Server neu gestartet wird. und dann werden sie auf den Standardwert zurückgesetzt.
d.raev

1
Das war der Trick. Auf einem XAMPP- php.iniTestcomputer unter Windows musste ich sowohl die Datei (wie von @GBD in der Antwort vorgeschlagen) als auch die MySQL-Konfigurationsdatei ändern my.ini, damit sie funktioniert.
Gruber

2
Ich würde vorschlagen, hinzuzufügen, dass Sie die aktuelle Größe mitSHOW variables LIKE 'max_allowed_packet'
Arth

Dies ist nicht dauerhaft , da der Wert beim Neustart des Servers (eventuell) zurückgesetzt wird, aber nicht nur für die aktuelle Sitzung. Das Festlegen der max_allowed_packetin einem Client und das anschließende Importieren der großen .sqlDatei in einer anderen Sitzung funktioniert einwandfrei.
VoteyDisciple

21

Wenn Sie an XAMPP arbeiten, können Sie das Problem mit den folgenden Änderungen beheben, dass MySQL Server nicht mehr funktioniert.

Öffnen Sie Ihre my.ini-Datei. Der Speicherort von my.ini ist (D: \ xampp \ mysql \ bin \ my.ini).

Ändern Sie die folgenden Variablenwerte

max_allowed_packet = 64M
innodb_lock_wait_timeout = 500

samp for wamp, max_allowed_packet = 64M
Andrew

19

Wenn Sie mit Standardwerten arbeiten, haben Sie viel Platz, um Ihre MySQL-Konfiguration zu optimieren.

Der erste Schritt, den ich empfehle, besteht darin, das max_allowed_packet auf 128 MB zu erhöhen.

Laden Sie dann das MySQL Tuning Primer-Skript herunter und führen Sie es aus. Es enthält Empfehlungen für verschiedene Aspekte Ihrer Konfiguration, um eine bessere Leistung zu erzielen.

Sehen Sie sich auch an, wie Sie Ihre Timeout-Werte sowohl in MySQL als auch in PHP anpassen.

Wie groß (Dateigröße) ist die Datei, die Sie importieren, und können Sie die Datei mithilfe des MySQL-Befehlszeilenclients anstelle von PHPMyAdmin importieren?


Vielen Dank, ich hatte max_allowed_packet bereits auf 16M gesetzt, dann diese Frage gefunden und auf 32M erhöht, weil ich dachte, es würde sicherlich ausreichen, aber dann sah ich Ihre Antwort und 128M funktioniert definitiv. Ich stelle fest, dass die gesamte SQL-Anweisung in der * .sql-Datei als nur ein Paket behandelt wird.
Elijah Lynn

8

Wenn Sie MAMP unter OS X verwenden, müssen Sie den max_allowed_packetWert in der Vorlage für MySQL ändern .

  1. Sie finden es unter: Datei> Vorlage bearbeiten> MySQL my.cnf

  2. Dann suchen Sie einfach nach max_allowed_packet, ändern Sie den Wert und speichern Sie.


6

Ich habe mein Problem mit dieser kurzen Datei /etc/mysql/my.cnf gelöst:

[mysqld]
wait_timeout = 600
max_allowed_packet = 100M

1
bestätigte, dass dies auch für MySQL v5.6.12 unter WAMP funktioniert: Fügen Sie unter Windows die obigen Zeilen "wait_timeout" und "max_allowed_packet" zum Abschnitt [mysqld] von: wamp \ bin \ mysql \ mysql_version \ my.ini
dean.huczok

Danke @dan hat mein einjähriges Problem gelöst haha, ich habe diese Einstellungen nie unter Abschnitt[mysqld]
shivgre

Dies funktioniert für MySQL v5.7. my-default.ini wird nicht standardmäßig erstellt, daher müssen Sie es erstellen.
Rodolfo Velasco

5

Der andere Grund, warum dies passieren kann, ist, dass der Speicher knapp wird. Überprüfen Sie / var / log / messages und stellen Sie sicher, dass Ihre my.cnf nicht so eingerichtet ist, dass mysqld mehr Speicher zuweist als Ihr Computer.

Ihr mysqld-Prozess kann tatsächlich vom Kernel beendet und dann vom "safe_mysqld" -Prozess neu gestartet werden, ohne dass Sie es merken.

Verwenden Sie top und beobachten Sie die Speicherzuordnung, während sie ausgeführt wird, um festzustellen, wie viel Headroom Sie haben.

Erstellen Sie eine Sicherungskopie von my.cnf, bevor Sie sie ändern.


Das hat mein Problem verursacht. Ich habe eine 1-GB-Auslagerungsdatei hinzugefügt, die das Problem vollständig behoben hat.
Pikamander2

5

Ich hatte diesen und andere verwandte Fehler, als ich mit 16 GB SQL-Datei importierte. Bearbeiten Sie für mich my.ini und legen Sie im Abschnitt [mysqld] Folgendes fest (basierend auf mehreren verschiedenen Beiträgen):

max_allowed_packet      = 110M
innodb_buffer_pool_size=511M
innodb_log_file_size=500M
innodb_log_buffer_size = 800M
net_read_timeout        = 600
net_write_timeout       = 600

Wenn Sie unter Windows ausgeführt werden, rufen Sie die Systemsteuerung und die Dienste auf und sehen Sie sich die Details zu MySQL an. Dort sehen Sie, wo sich my.ini befindet. Starten Sie dann nach dem Bearbeiten und Speichern von my.ini den MySQL-Dienst neu (oder starten Sie den Computer neu).

Wenn Sie HeidiSQL verwenden, können Sie damit auch einige oder alle festlegen.


2

Ich habe "max_allowed_packet" auf 1024M aktualisiert, aber es hat immer noch nicht funktioniert. Es stellte sich heraus, dass mein Bereitstellungsskript ausgeführt wurde:

mysql --max_allowed_packet=512M --database=mydb -u root < .\db\db.sql

Stellen Sie sicher, dass Sie explizit eine größere Zahl in der Befehlszeile angeben, wenn Sie dies auf diese Weise tun.


2

Wenn Ihre Daten BLOBDaten enthalten:

Beachten Sie, dass ein Import von Daten aus der Befehlszeile die BLOB-Daten zu ersticken scheint, was zu dem Fehler "Der MySQL-Server ist verschwunden" führt.

Um dies zu vermeiden, erstellen Sie den mysqldump neu, jedoch mit dem --hex-blobFlag:

http://dev.mysql.com/doc/refman/5.7/en/mysqldump.html#option_mysqldump_hex-blob

Dadurch wird die Datendatei mit Hex-Werten und nicht mit Binärwerten unter anderem Text ausgegeben.

PhpMyAdmin hat auch die Option "Binärspalten in hexadezimaler Notation ausgeben (zum Beispiel wird" abc "zu 0x616263)" ", was gut funktioniert.

Beachten Sie, dass es einen langjährigen Fehler gibt (Stand Dezember 2015), der bedeutet, dass GEOMSpalten nicht konvertiert werden: Sichern Sie eine Tabelle mit einer GEOMETRY-Spalte mit mysqldump? Die Verwendung eines Programms wie PhpMyAdmin scheint daher die einzige Problemumgehung zu sein (die oben angegebene Option konvertiert GEOM-Spalten korrekt).


1

Wenn das Fehlschlagen lange dauert, vergrößern Sie die wait_timeoutVariable.

Wenn dies sofort fehlschlägt, vergrößern Sie die max_allowed_packetVariable. Wenn es immer noch nicht funktioniert, stellen Sie sicher, dass der Befehl gültiges SQL ist. Meins hatte ungehinderte Zitate, die alles vermasselten.

Wenn möglich, sollten Sie auch die Anzahl der Einfügungen eines einzelnen SQL-Befehls auf beispielsweise 1000 begrenzen. Sie können ein Skript erstellen, das mehrere Anweisungen aus einer einzigen erstellt, indem Sie den Teil INSERT ... alle n Einfügungen erneut einführen.


1

Ich habe einen ähnlichen Fehler. Um dies zu lösen, öffnen Sie einfach die Datei my.ini. Hier in Zeile Nr. 36 ändern Sie den Wert der maximal zulässigen Paketgröße, dh. max_allowed_packet = 20M


1

Stellen Sie sicher, dass der mysqld-Prozess aufgrund von Service-Managern wie systemd nicht neu gestartet wird.

Ich hatte dieses Problem in Vagrant mit Centos 7. Konfigurationsänderungen haben nicht geholfen. Es stellte sich heraus, dass systemd jedes Mal den mysqld-Dienst beendet hat, wenn zu viel Speicher benötigt wurde.


0

Ich hatte heute einen ähnlichen Fehler beim Duplizieren der Datenbank (der MySQL-Server ist verschwunden ...), aber als ich versuchte, mysql.server neu zu starten, wurde ein Fehler angezeigt

ERROR! The server quit without updating PID ...

So habe ich es gelöst: Ich habe Applications / Utilities / geöffnet und Activity Monitor ausgeführt

 quit mysqld

dann konnte das fehlerproblem mit gelöst werden

mysql.server restart

0

Ich mache einige große Berechnungen, bei denen die MySQL-Verbindung lange und mit hohen Datenmengen bleibt. Ich war mit diesem "Mysql go away Problem" konfrontiert. Also habe ich versucht, die Abfragen nicht zu optimieren, aber das hat mir nicht geholfen, dann habe ich das Limit für MySQL-Variablen erhöht, das standardmäßig auf einen niedrigeren Wert eingestellt ist.

wait_timeout max_allowed_packet

Was auch immer zu Ihnen passt, sollte die beliebige Zahl * 1024 (Bytes) sein. Sie können sich mit dem Befehl ' mysql -u username - p ' am Terminal anmelden und diese variablen Grenzwerte überprüfen und ändern.


0

Für GoDaddy Shared Hosting

Auf gemeinsam genutzten GoDaddy-Hosting-Konten ist es schwierig, die PHP.ini-Dateien usw. zu optimieren. Es gibt jedoch einen anderen Weg und es hat einfach perfekt für mich funktioniert. (Ich habe gerade erfolgreich eine 3,8 MB große SQL-Textdatei mit 3100 Zeilen und 145 Spalten hochgeladen. Mit dem Befehl IMPORT in phpMyAdmin wurde der gefürchtete MySQL-Server- Fehler behoben und es wurden keine weiteren Informationen angezeigt .)

Ich fand, dass Matt Butcher die richtige Antwort hatte. Wie Matt hatte ich alle möglichen Tricks ausprobiert, vom Exportieren von MySQL-Datenbanken in mundgerechten Blöcken bis zum Schreiben von Skripten, die große Importe in kleinere aufteilen. Aber hier ist, was funktioniert hat:

(1) CPANEL ---> DATEIEN (Gruppe) ---> SICHERUNG

(2a) Unter der Überschrift "Teilweise Sicherungen" ...
(2b) Unter "MySQL-Datenbanksicherung herunterladen"
(2c) Wählen Sie Ihre Datenbank aus und laden Sie eine Sicherung herunter (dieser Schritt optional, aber sinnvoll).

(3a) Direkt rechts von 2b unter der Überschrift "Wiederherstellen einer MySQL-Datenbanksicherung"
(3b) Wählen Sie die .SQL-Importdatei von Ihrem lokalen Laufwerk aus.
(3c) Das wahre Glück liegt bei Ihnen (in Kürze ...) 5 Sekunden

Mit dieser Methode konnte ich eine einzelne Tabelle importieren. Nichts anderes in meiner Datenbank war betroffen - aber genau dagegen soll Schritt (2) oben schützen.

Anmerkungen:
a. Wenn Sie sich nicht sicher sind, wie Sie eine .SQL-Importdatei erstellen sollen, exportieren Sie mit phpMyAdmin eine Tabelle und ändern Sie diese Dateistruktur.

QUELLE: Matt Butcher 2010 Artikel


Okay, also eine sofortige Ablehnung, aber kein Kommentar, warum. Hat diese Information für jemanden nicht funktioniert? Wenn ja, bitte teilen - es hat bei mir funktioniert, weshalb ich diese Antwort hinzugefügt habe. Die anderen obigen Antworten haben bei mir nicht funktioniert, aber diese Lösung hat funktioniert. Warum also die Abwertung? Wenn Sie auf GoDaddy sind und dies bei Ihnen nicht funktioniert, würde ich gerne wissen, damit ich Ihnen helfen kann. Wenn Sie jedoch kein GoDaddy Shared Hosting verwenden, warum sollten Sie diese Antwort ablehnen, nur weil sie für Sie nicht gilt ?
Cssyphus

0

Wenn Erhöhen max_allowed_packetnicht hilft.

Beim Importieren einer .sqlDatei in meine Datenbank über Sequel Pro wurde der gleiche Fehler wie bei Ihnen angezeigt.

Der Fehler blieb auch nach dem Erhöhen von max_allowed_packetto bestehen, 512Msodass ich den Import stattdessen in der Befehlszeile ausführte mit:

mysql --verbose -u root -p DatabaseName < MySQL.sql

Es gab den folgenden Fehler:

ASCII '\0' appeared in the statement, but this is not allowed unless option --binary-mode is enabled

Ich habe ein paar hilfreiche Fragen zu StackOverflow gefunden:

In meinem Fall war meine .sqlDatei etwas beschädigt oder so. Der MySQL-Dump, den wir erhalten, besteht aus zwei Zip-Dateien, die miteinander verkettet und dann entpackt werden müssen. Ich denke, das Entpacken wurde anfangs unterbrochen und die Datei mit einigen seltsamen Zeichen und Codierungen belassen. Es hat bei mir funktioniert, einen neuen MySQL-Dump zu bekommen und ihn richtig zu entpacken.

Ich wollte dies hier nur hinzufügen, falls andere feststellen, dass das Erhöhen der max_allowed_packetVariablen nicht hilfreich ist.



0

Ich habe das gleiche Problem mit

$image_base64 = base64_encode(file_get_contents($_FILES['file']['tmp_name']) );
$image = 'data:image/jpeg;base64,'.$image_base64;
$query = "insert into images(image) values('".$image."')";
mysqli_query($con,$query);

In der Datei \ xampp \ mysql \ bin \ my.ini von phpmyadmin erhalten wir nur

[mysqldump]
max_allowed_packet=110M

Das ist nur für mysqldump -u root -p Datenbankname. Ich habe mein Problem behoben, indem ich den obigen Code durch ersetzt habe

max_allowed_packet=110M
[mysqldump]
max_allowed_packet=110M
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.