Ich importiere einen MySQL-Dump und erhalte den folgenden Fehler.
$ mysql foo < foo.sql
ERROR 1153 (08S01) at line 96: Got a packet bigger than 'max_allowed_packet' bytes
Offenbar gibt es Anhänge in der Datenbank, was zu sehr großen Einfügungen führt.
Dies ist auf meinem lokalen Rechner ein Mac, auf dem MySQL 5 aus dem MySQL-Paket installiert ist.
Wo ändere ich max_allowed_packet
, um den Dump importieren zu können?
Gibt es noch etwas, was ich einstellen sollte?
Das Ausführen von mysql --max_allowed_packet=32M …
ergab den gleichen Fehler.
Sie müssen sie wahrscheinlich für den Client (den Sie ausführen, um den Import durchzuführen) UND den Daemon mysqld ändern, der ausgeführt wird und den Import akzeptiert.
Für den Client können Sie es in der Befehlszeile angeben:
mysql --max_allowed_packet=100M -u root -p database < dump.sql
Ändern Sie auch die Datei my.cnf oder my.ini unter dem Abschnitt mysqld, und legen Sie Folgendes fest:
max_allowed_packet=100M
oder Sie können diese Befehle in einer MySQL-Konsole ausführen, die mit demselben Server verbunden ist:
set global net_buffer_length=1000000;
set global max_allowed_packet=1000000000;
(Verwenden Sie einen sehr großen Wert für die Paketgröße.)
Wie michaelpryor gesagt hat, müssen Sie es für beide den Client und den Daemon-Server mysqld ändern.
Seine Lösung für die Client-Befehlszeile ist gut, aber die Ini-Dateien lösen je nach Konfiguration nicht immer den Trick.
Öffnen Sie also ein Terminal, geben Sie mysql ein, um eine mysql-Eingabeaufforderung zu erhalten, und geben Sie die folgenden Befehle aus:
set global net_buffer_length=1000000;
set global max_allowed_packet=1000000000;
Lassen Sie die mysql-Eingabeaufforderung geöffnet und führen Sie die Ausführung der Befehlszeilen-SQL auf einem zweiten Terminal aus.
Dies kann in Ihrer my.ini
-Datei (unter Windows unter\Programme\MySQL\MySQL Server) unter dem Serverabschnitt geändert werden. Beispiel:
[mysqld]
max_allowed_packet = 10M
Standardmäßig ist my.cnf nirgends zu finden.
Sie müssen einen von /usr/local/mysql/support-files/my*.cnf
in /etc/my.cnf
kopieren und mysqld
neu starten. (Was Sie im MySQL-Einstellungsbereich tun können, wenn Sie es installiert haben.)
Versuchen Sie in etc/my.cnf, das max_allowed _packet und den net_buffer_length in zu ändern
max_allowed_packet=100000000
net_buffer_length=1000000
wenn dies nicht funktioniert, wechseln Sie zu
max_allowed_packet=100M
net_buffer_length=100K
Das Update besteht darin, das max_allowed_packet des MySQL-Daemons zu erhöhen. Sie können dies für einen laufenden Dämon tun, indem Sie sich als Super anmelden und die folgenden Befehle ausführen.
# mysql -u admin -p
mysql> set global net_buffer_length=1000000;
Query OK, 0 rows affected (0.00 sec)
mysql> set global max_allowed_packet=1000000000;
Query OK, 0 rows affected (0.00 sec)
Dann importieren Sie Ihren Dump:
gunzip < dump.sql.gz | mysql -u admin -p database
In CENTOS 6 /etc/my.cnf lautet die korrekte Syntax unter [mysqld].
[mysqld]
# added to avoid err "Got a packet bigger than 'max_allowed_packet' bytes"
#
net_buffer_length=1000000
max_allowed_packet=1000000000
#
Etwas unabhängig von Ihrem Problem, also hier eines für Google.
Wenn Sie das SQL nicht mysqldumpen, ist möglicherweise Ihr SQL defekt.
Ich habe diesen Fehler nur erhalten, indem ich versehentlich ein nicht geschlossenes Zeichenfolgenliteral in meinem Code hatte. Schlampige Finger passieren.
Das ist eine fantastische Fehlermeldung, die Sie für eine überholte Zeichenfolge erhalten, danke für dieses MySQL!
Verwenden Sie eine max_allowed_packet
-Variable, die einen Befehl ausgibt
mysql --max_allowed_packet=32M
-u root -p database < dump.sql
Manchmal Typeinstellung:
max_allowed_packet = 16M
in my.ini funktioniert nicht.
Versuchen Sie, die my.ini wie folgt zu ermitteln:
set-variable = max_allowed_packet = 32M
oder
set-variable = max_allowed_packet = 1000000000
Starten Sie dann den Server neu:
/etc/init.d/mysql restart
Es ist ein Sicherheitsrisiko, max_allowed_packet
einen höheren Wert zu haben, da ein Angreifer größere Pakete pushen und das System zum Absturz bringen kann.
Also, Optimum Value von max_allowed_packet
abgestimmt und getestet werden.
Es ist zu ändern, wenn nötig (mit set global max_allowed_packet = xxx
) Als Teil von my.ini oder my.conf .
Error:
FEHLER 1153 (08S01) in Zeile 6772: Paket größer als 'max_allowed_packet' Bytes Operation mit Exitcode 1 fehlgeschlagen
QUERY:
SET GLOBAL max_allowed_packet=1073741824;
SHOW VARIABLES LIKE 'max_allowed_packet';
Maximalwert:
Default Value (MySQL >= 8.0.3) 67108864
Default Value (MySQL <= 8.0.2) 4194304
Minimum Value 1024
Maximum Value 1073741824
Setzen Sie max_allowed_packet auf den gleichen Wert (oder mehr) als beim Ablegen mit mysqldump. Wenn Sie dies nicht tun können, erstellen Sie den Speicherauszug erneut mit einem kleineren Wert.
Angenommen, Sie haben es mit mysqldump abgelegt. Wenn Sie ein anderes Werkzeug verwendet haben, sind Sie alleine.
Ich arbeite in einer Shared Hosting-Umgebung und habe eine auf Drupal basierende Website gehostet. Ich kann die my.ini
-Datei oder die my.conf
-Datei auch nicht bearbeiten.
Also habe ich alle Tabellen gelöscht, die sich auf Cache
bezogen haben, und daher konnte ich dieses Problem lösen. Ich suche immer noch nach einer perfekten Lösung, um dieses Problem zu lösen.
Bearbeiten - Das Löschen der Tabellen hat Probleme für mich verursacht, da Drupal erwartet hatte, dass diese Tabellen existieren sollten. Also habe ich den Inhalt dieser Tabellen geleert, wodurch das Problem gelöst wurde.