MySQL-Fehler 1153 - Ein Paket größer als 'max_allowed_packet' Bytes


430

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

Anscheinend gibt es Anhänge in der Datenbank, was zu sehr großen Einfügungen führt.


Dies ist auf meinem lokalen Computer, einem Mac mit MySQL 5, der aus dem MySQL-Paket installiert wurde.

Wo ändere ich mich max_allowed_packet, um den Speicherauszug importieren zu können?

Gibt es noch etwas, das ich einstellen sollte?

Nur das Ausführen mysql --max_allowed_packet=32M …führte zu demselben Fehler.



@Muleskinner, diese Frage wurde 3 Jahre vor der von Ihnen erwähnten gestellt und ich weise 4 Jahre nach Ihrem Kommentar darauf hin. : p
tiomno

2
Webyog.com Link ist defekt: 404
Pathros

Hier wurde ein ähnlicher Fehler, "Paket für Abfrage ist zu groß (5526600> 1048576).", Durch eine falsche Passworteingabe beim Herstellen einer Verbindung zur MySQL-Datenbank mit DataGrip 2016.1 von JetBrains verursacht und bei der Korrektur (mit dem richtigen Passwort) behoben entsprechend dem MySQL-Datenbankbenutzer).
Nyedidikeke

Antworten:


589

Sie müssen es wahrscheinlich sowohl für den Client (Sie führen den Import aus) als auch für den Daemon mysqld ändern, der den Import ausführt und akzeptiert.

Für den Client können Sie ihn in der Befehlszeile angeben:

mysql --max_allowed_packet=100M -u root -p database < dump.sql

Auch ändern die my.cnf oder my.ini unter dem Abschnitt mysqld und Satz:

max_allowed_packet=100M

Sie können diese Befehle auch 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.)


Ich habe einen Server mit 16 GB RAM. Ist es eine schlechte Idee max_allowed_packet, 100 MB einzustellen ?
Webnet


37
Beachten Sie, dass die Verwendung von "set global" bis zum nächsten Neustart des MySQL-Dienstes funktioniert.
Will Shaver

2
Überspringen Sie "set global" und das Finale ";" beim Hinzufügen dieser Werte zu den Dateien my.ini oder my.cnf. Beispiel: "net_buffer_length = 1000000" in my.conf.
Rustavore

3
Unter CentOS 5 befindet sich my.cnf unter /etc/my.cnf
Rustavore

124

Wie Michaelpryor sagte, müssen Sie es sowohl für den Client als auch für den Daemon-MySQL-Server ändern.

Seine Lösung für die Client-Befehlszeile ist gut, aber die INI-Dateien reichen je nach Konfiguration nicht immer aus.

Öffnen Sie also ein Terminal, geben Sie mysql ein, um eine mysql-Eingabeaufforderung zu erhalten, und geben Sie die folgenden Befehle ein:

set global net_buffer_length=1000000; 
set global max_allowed_packet=1000000000; 

Lassen Sie die MySQL-Eingabeaufforderung geöffnet und führen Sie Ihre Befehlszeilen-SQL-Ausführung auf einem zweiten Terminal aus.


2
Das Problem für mich gelöst; Der Import, den ich mache, ist einmalig und ich kann die Konfiguration nicht einfach ändern. Das hat super geklappt. : D
Rob Howard

39

Dies kann in Ihrer my.iniDatei (unter Windows unter \ Programme \ MySQL \ MySQL Server) im Abschnitt Server geändert werden , zum Beispiel:

[mysqld]

max_allowed_packet = 10M

5
Auf einem Mac befindet sich die Datei offensichtlich an einer anderen Stelle.
kch

2
sicher, aber die Konfiguration ist immer noch irgendwo, obwohl ich den genauen Ort nicht kenne
GHad

Für mich in Fedora 20 mit MariaDB hat es den Trick gemacht, diese Einstellung am Ende von /etc/my.cnf.d/server.cnf zu platzieren. Ich musste den Dienst natürlich neu starten ... sudo nano systemctl neu starten mariadb.service
Ray Foss

Die Datei wäre eher "my.cnf" und auf nix-Systemen, normalerweise in / etc / oder / usr / local / etc. Stellen Sie nach dem Bearbeiten sicher, dass Sie den MySQL-Server neu starten, um die Änderungen zu übernehmen.
Chris

17

Re my.cnf unter Mac OS X bei Verwendung von MySQL aus der dmg-Paketdistribution von mysql.com

Standardmäßig ist my.cnf nirgends zu finden.

Sie müssen eine der kopieren /usr/local/mysql/support-files/my*.cnfzu /etc/my.cnfund neu starten mysqld. (Was Sie im MySQL-Einstellungsbereich tun können, wenn Sie es installiert haben.)


Die Standardkonfiguration für OSX scheint my-medium.cnf zu sein, obwohl die Größe von max_allowed_packet in my-large.cnf dieselbe ist ... bis Sie anfangen, Dinge zu ändern :)
Chris Burgess

In meinem Fall hat /usrl/local/mysql/my.cnf nicht funktioniert, bis ich es nach /etc/my.cnf kopiert habe.
VG

14

Versuchen Sie in etc / my.cnf, das max_allowed _packet und die 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 

12

Das Update besteht darin, das max_allowed_packet des MySQL-Daemons zu erhöhen. Sie können dies für einen laufenden Daemon 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

Auf welcher MySQL-Version haben Sie das ausgeführt?
Crmpicco

6

Unter CENTOS 6 /etc/my.cnf lautet die korrekte Syntax im Abschnitt [mysqld]:

[mysqld]
# added to avoid err "Got a packet bigger than 'max_allowed_packet' bytes"
#
net_buffer_length=1000000 
max_allowed_packet=1000000000
#

4

Verwenden Sie eine max_allowed_packetVariable, die einen Befehl wie ausgibt

mysql --max_allowed_packet=32M -u root -p database < dump.sql


2
habe das versucht, hat nicht funktioniert. ganze Dump in 272mb, versucht mit max höher als das.
kch

4

Etwas unabhängig von Ihrem Problem, daher hier eines für Google.

Wenn Sie die SQL nicht mysqldump haben, ist Ihre SQL möglicherweise defekt.

Ich habe diesen Fehler nur erhalten, weil ich versehentlich ein nicht geschlossenes String-Literal in meinem Code habe. Schlampige Finger passieren.

Das ist eine fantastische Fehlermeldung für einen außer Kontrolle geratenen String, danke für das MySQL!


1
Ich habe diesen Fehler auch wegen defektem SQL erhalten. Insbesondere hat meine Tabelle Null-Einschränkungen und mein Code hat Nullwerte eingefügt. Anstatt mir einen informativen Fehler zu geben, hat MySQL den max_allowed_packetFehler zurückgegeben. Wenn es für diejenigen in der Zukunft hilft, habe ich mit der Pandas-API eingefügtdf.to_sql(...)
Alex Petralia

1

Manchmal Typeinstellung:

max_allowed_packet = 16M

in my.ini funktioniert nicht.

Versuchen Sie, die my.ini wie folgt zu bestimmen:

set-variable = max_allowed_packet = 32M

oder

set-variable = max_allowed_packet = 1000000000

Starten Sie dann den Server neu:

/etc/init.d/mysql restart

1

Es ist ein Sicherheitsrisiko, einen max_allowed_packethöheren Wert zu haben , da ein Angreifer größere Pakete pushen und das System zum Absturz bringen kann.

Also, optimaler Wert max_allowed_packetabgestimmt und getestet werden.

Es ist besser, bei Bedarf zu ändern (mit set global max_allowed_packet = xxx), als es als Teil von my.ini oder my.conf zu haben .


0

Ich arbeite in einer gemeinsam genutzten Hosting-Umgebung und habe eine auf Drupal basierende Website gehostet. Ich kann die my.iniDatei oder die my.confDatei auch nicht bearbeiten .

Also habe ich alle Tabellen gelöscht, die sich darauf beziehen, Cacheund daher konnte ich dieses Problem beheben. Trotzdem suche ich nach einer perfekten Lösung, um dieses Problem zu lösen.

Bearbeiten - Das Löschen der Tabellen verursachte Probleme für mich, da Drupal erwartet hatte, dass diese Tabellen vorhanden sein sollten. Also habe ich den Inhalt dieser Tabellen geleert, wodurch das Problem gelöst wurde.


0

Error:

FEHLER 1153 (08S01) in Zeile 6772: Ein Paket größer als 'max_allowed_packet' Bytes erhalten. Vorgang mit Exitcode 1 fehlgeschlagen

ABFRAGE:

SET GLOBAL max_allowed_packet=1073741824;
SHOW VARIABLES LIKE 'max_allowed_packet'; 

Maximaler Wert:

Default Value (MySQL >= 8.0.3)  67108864
Default Value (MySQL <= 8.0.2)  4194304
Minimum Value   1024
Maximum Value   1073741824

-1

Setzen Sie max_allowed_packet auf dasselbe (oder mehr) als das, was es war, als Sie es mit mysqldump ausgegeben haben. Wenn Sie das nicht können, erstellen Sie den Speicherauszug erneut mit einem kleineren Wert.

Angenommen, Sie haben es mit mysqldump abgeladen. Wenn Sie ein anderes Tool verwendet haben, sind Sie alleine.

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.