Während des Imports über die Befehlszeile erhalte ich immer wieder die Fehlermeldung „MySQL-Server ist nicht mehr verfügbar“.

Während des Imports über die Befehlszeile erhalte ich immer wieder die Fehlermeldung „MySQL-Server ist nicht mehr verfügbar“.

Ich verwende den folgenden Befehl, um Daten aus einer 160 MB großen Datei zu importieren, die auf einem anderen Server mit mysqldump erstellt wurde. In der Umgebung, in die ich importiere, läuft der neueste WAMP-Server mit max_allowed_packet auf „16M“.

C:\wamp\bin\mysql\mysql5.1.36\bin>mysql --max_allowed_packet=15M -u root -pXXX drupal < C:\prod.sql

ERROR 2006 (HY000) at line 644: MySQL server has gone away

Dies scheint nach ungefähr 39 Sekunden und 85,5 importierten MB regelmäßig zu passieren.

Ich habe viele Vorschläge zur Erhöhung von max_allowed_packet in my.ini gelesen und habe es auf 16 M statt des Standardwerts von 1 M getan. Trotzdem bleibt der Fehler bestehen, egal was ich tue. Irgendwelche Ideen?

Jetzt in my.ini gelöst:

[wampmysqld]
port        = 3306
socket      = /tmp/mysql.sock
key_buffer = 384M
max_allowed_packet = 100M
table_cache = 4096
sort_buffer_size = 2M
net_buffer_length = 2M
read_buffer_size = 2M
read_rnd_buffer_size = 64M
myisam_sort_buffer_size = 64M
basedir=c:/wamp/bin/mysql/mysql5.1.36
log-error=c:/wamp/logs/mysql.log
datadir=c:/wamp/bin/mysql/mysql5.1.36/data
thread_cache_size = 8
query_cache_size = 32M

innodb_buffer_pool_size = 384M
innodb_additional_mem_pool_size = 20M
# Set .._log_file_size to 25 % of buffer pool size
innodb_log_file_size = 10M
innodb_log_buffer_size = 64M
innodb_flush_log_at_trx_commit = 1
innodb_lock_wait_timeout = 100

wait_timeout = 28800

[mysqldump]
quick
max_allowed_packet = 100M

[isamchk]
key_buffer = 20M
sort_buffer_size = 20M
read_buffer = 2M
write_buffer = 2M

[myisamchk]
key_buffer = 20M
sort_buffer_size = 20M
read_buffer = 2M
write_buffer = 2M

Antwort1

Wie ist die Datenstruktur im SQL?

Möglicherweise ist eine Spalte ein Blob, vielleicht ein Bild oder eine PDF-Datei, die größer als 16 MB ist. Warum setzen Sie max_allowed_packet nicht auf 160 MB (da kein Paket größer als die gesamte Dateigröße sein kann) und testen es erneut. Sie können es später immer noch zurückstellen.

Sie erhalten einen genaueren Wert, wenn Sie die Daten importieren. Verwenden Sie den Befehl SHOW TABLE STATUS, um die Datengrößen abzurufen. Anschließend sehen Sie, wie groß sie sein sollten.

Der Fehler ist jedoch sehr allgemein und es gibt eine Liste möglicher Gründe, warum der Fehler auftritt.auf der MySQL-Website

Sie müssen jedes einzelne durchgehen, um das Problem zu finden, aber meiner Erfahrung nach war es immer ein Paket zu groß. Aus genau diesem Grund habe ich auf einer meiner Produktionsboxen max_packet_size auf 180 MB eingestellt.

Antwort2

Versuchen Sie, das wait_timeout in Ihrer my.cnf auf etwa 100 zu erhöhen, und starten Sie dann den Server neu

wait_timeout = 100

Antwort3

Obwohl Richards Antwort die übliche Lösung ist, überprüfen Sie Ihr .errProtokoll. Es ist möglich, dass MySQL nicht genügend Speicher hat und neu gestartet wird. Das ist mir kürzlich auch bei defekter Hardware passiert.

verwandte Informationen