Errore MySQL 1153 - È stato ottenuto un pacchetto più grande di byte 'max_allowed_packet'


430

Sto importando un dump MySQL e ottengo il seguente errore.

$ mysql foo < foo.sql 
ERROR 1153 (08S01) at line 96: Got a packet bigger than 'max_allowed_packet' bytes

Apparentemente ci sono allegati nel database, il che rende inserimenti molto grandi.


Questo è sul mio computer locale, un Mac con MySQL 5 installato dal pacchetto MySQL.

Dove posso cambiare max_allowed_packetper poter importare il dump?

C'è qualcos'altro che dovrei impostare?

La sola esecuzione ha mysql --max_allowed_packet=32M …provocato lo stesso errore.



@Muleskinner, questa domanda è stata pubblicata 3 anni prima di quella che hai citato e lo sottolineo 4 anni dopo il tuo commento. : p
tiomno,

2
Webyog.com Il collegamento è interrotto: 404
Pathros,

Qui , un errore simile, "Il pacchetto per la query è troppo grande (5526600> 1048576).", È stato causato da una password errata durante la connessione al database MySQL utilizzando DataGrip 2016.1 da JetBrains e si è risolto una volta corretto (utilizzando la password corretta corrispondente all'utente del database MySQL).
nyedidikeke,

Risposte:


589

Probabilmente devi cambiarlo sia per il client (stai eseguendo l'importazione) sia per il demone mysqld che è in esecuzione e accetta l'importazione.

Per il client, è possibile specificarlo dalla riga di comando:

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

Inoltre, modifica il file my.cnf o my.ini nella sezione mysqld e imposta:

max_allowed_packet=100M

oppure potresti eseguire questi comandi in una console MySQL collegata allo stesso server:

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

(Utilizzare un valore molto grande per la dimensione del pacchetto.)


Ho un server con 16 GB di RAM, è una cattiva idea impostare max_allowed_packetsu 100 MB?
Webnet

11
CRONACA - mi ha aiutato a risolvere un errore differente - "# 2006 del server è andato via"
itsho

37
Tenere presente che l'utilizzo di "set global" funziona fino al successivo riavvio del servizio mysql.
Will Shaver,

2
Salta "set global" e il finale ";" quando si aggiungono questi valori ai file my.ini o my.cnf. Esempio: "net_buffer_length = 1000000" in my.conf.
Rustavore,

3
Su CentOS 5, my.cnf si trova in /etc/my.cnf
Rustavore,

124

Come ha detto michaelpryor, si deve cambiare per sia il client e il server mysqld daemon.

La sua soluzione per la riga di comando del client è buona, ma i file ini non fanno sempre il trucco, a seconda della configurazione.

Quindi, apri un terminale, digita mysql per ottenere un prompt mysql ed emetti questi comandi:

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

Tenere aperto il prompt mysql ed eseguire l'esecuzione SQL della riga di comando su un secondo terminale.


2
Risolto il problema per me; l'importazione che sto eseguendo è una tantum e non riesco a modificare facilmente la configurazione. Questo ha funzionato alla grande. : D
Rob Howard,

39

Questo può essere modificato nel tuo my.inifile (su Windows, che si trova in \ Programmi \ MySQL \ MySQL Server) nella sezione server, ad esempio:

[mysqld]

max_allowed_packet = 10M

5
su un mac, file ovviamente situato altrove.
kch,

2
certo, ma la configurazione è ancora da qualche parte anche se non conosco la posizione esatta
GHad

Per me in Fedora 20 con MariaDB, posizionare quell'impostazione alla fine di /etc/my.cnf.d/server.cnf ha funzionato. Ho dovuto riavviare il servizio ovviamente ... sudo nano systemctl restart mariadb.service
Ray Foss

Il file sarebbe probabilmente "my.cnf" e su sistemi nix, in genere in / etc / o / usr / local / etc. Dopo aver effettuato la modifica, assicurarsi di riavviare il server mysql per applicare la modifica.
Chris

17

Re my.cnf su Mac OS X quando si utilizza MySQL dalla distribuzione del pacchetto dmg mysql.com

Per impostazione predefinita, my.cnf non si trova da nessuna parte.

È necessario copiare una delle /usr/local/mysql/support-files/my*.cnfa /etc/my.cnfe riavviare mysqld. (Cosa che puoi fare nel pannello delle preferenze di MySQL se lo hai installato.)


La configurazione predefinita in atto per OSX sembra essere my-medium.cnf, anche se la dimensione max_allowed_packet è la stessa in my-large.cnf ... fino a quando non inizi a cambiare le cose :)
Chris Burgess,

Nel mio caso /usrl/local/mysql/my.cnf non ha funzionato fino a quando non l'ho copiato in /etc/my.cnf.
VG,

14

In etc / my.cnf prova a cambiare max_allowed _packet e net_buffer_length in

max_allowed_packet=100000000
net_buffer_length=1000000 

se non funziona, prova a cambiare in

max_allowed_packet=100M
net_buffer_length=100K 

12

La correzione è aumentare il max_allowed_packet del demone MySQL. Puoi farlo su un demone in esecuzione accedendo come Super ed eseguendo i seguenti comandi.

# 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)

Quindi per importare il dump:

gunzip < dump.sql.gz | mysql -u admin -p database

Su quale versione di MySQL stavi eseguendo questo?
crmpicco,

6

Su CENTOS 6 /etc/my.cnf, nella sezione [mysqld] la sintassi corretta è:

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

4

Utilizzare una max_allowed_packetvariabile che emette un comando simile

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


2
provato, non ha funzionato. intera discarica in 272mb, provata con un massimo superiore a quello.
kch,

4

Leggermente estraneo al tuo problema, quindi eccone uno per Google.

Se non hai eseguito il mysqldump dell'SQL, è possibile che il tuo SQL sia danneggiato.

Ho appena ricevuto questo errore avendo accidentalmente una stringa non chiusa letterale nel mio codice. Succedono dita sciatte.

Questo è un fantastico messaggio di errore da ottenere per una stringa in fuga, grazie per quel MySQL!


1
Ho anche avuto questo errore a causa di SQL rotto. Più specificamente, la mia tabella ha vincoli nulli e il mio codice INSERISCE valori null. Invece di darmi un errore informativo, MySQL ha restituito l' max_allowed_packeterrore. Se in futuro sarà d'aiuto, stavo INSERENDO usando l'API Pandadf.to_sql(...)
Alex Petralia,

1

A volte digitare impostazione:

max_allowed_packet = 16M

in my.ini non funziona.

Prova a determinare my.ini come segue:

set-variable = max_allowed_packet = 32M

o

set-variable = max_allowed_packet = 1000000000

Quindi riavviare il server:

/etc/init.d/mysql restart

1

È un rischio per la sicurezza avere max_allowed_packetun valore più elevato, poiché un utente malintenzionato può spingere pacchetti di dimensioni maggiori e bloccare il sistema.

Quindi, il valore ottimale max_allowed_packetdeve essere ottimizzato e testato.

È meglio cambiare quando richiesto (usando set global max_allowed_packet = xxx) piuttosto che averlo come parte di my.ini o my.conf .


0

Sto lavorando in un ambiente di hosting condiviso e ho ospitato un sito Web basato su Drupal. Non riesco a modificare il my.inifile o il my.conffile.

Quindi, ho eliminato tutte le tabelle che erano correlate Cachee quindi ho potuto risolvere questo problema. Sto ancora cercando una soluzione / modo perfetto per gestire questo problema.

Modifica - L'eliminazione delle tabelle ha creato problemi per me, perché Drupal si aspettava che queste tabelle dovessero esistere. Quindi ho svuotato il contenuto di queste tabelle che ha risolto il problema.


0

Errore:

ERRORE 1153 (08S01) alla riga 6772: ottenuto un pacchetto più grande di byte 'max_allowed_packet' Operazione non riuscita con exitcode 1

DOMANDA:

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

Valore massimo:

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

-1

Imposta max_allowed_packet sullo stesso (o più) di quello che era quando lo hai scaricato con mysqldump. Se non riesci a farlo, crea di nuovo il dump con un valore inferiore.

Cioè, supponendo che tu l'abbia scaricato con mysqldump. Se hai usato qualche altro strumento, sei da solo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.