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.

kch
quelle
mögliches Duplikat von Wie man max_allowed_packet Größe ändert
Muleskinner
@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.)

Michael Pryor
quelle
Ich habe einen Server mit 16 GB RAM. Ist es eine schlechte Idee max_allowed_packet, 100 MB einzustellen ?
Webnet
11
Zu
Ihrer Information
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.

Joshua Fox
quelle
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
GHad
quelle
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.)

kch
quelle
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 
Amirtha Rajan
quelle
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
Primoz Rom
quelle
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
#
Mike Castro Demaria
quelle
4

Verwenden Sie eine max_allowed_packetVariable, die einen Befehl wie ausgibt

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

Tomasz Tybulewicz
quelle
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!

jplindstrom
quelle
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
Grzegorz Brzęczyszczykiewicz
quelle
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 .

Shiva
quelle
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.

Raj Pawan Gumdal
quelle
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
Tính Ngô Quang
quelle
-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.

MarkR
quelle