Error 1153 de MySQL: tengo un paquete más grande que los bytes 'max_allowed_packet'

430

Estoy importando un volcado de MySQL y obtengo el siguiente error.

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

Aparentemente hay archivos adjuntos en la base de datos, lo que hace que las inserciones sean muy grandes.


Esto está en mi máquina local, una Mac con MySQL 5 instalada desde el paquete MySQL.

¿Dónde cambio max_allowed_packetpara poder importar el volcado?

¿Hay algo más que deba configurar?

Solo ejecutar mysql --max_allowed_packet=32M …resultó en el mismo error.

kch
fuente
posible duplicado de Cómo cambiar max_allowed_packet size
Muleskinner
@Muleskinner, esta pregunta se publicó 3 años antes que la que mencionas y lo señalo 4 años después de tu comentario. : p
tiomno
2
Webyog.com Enlace roto: 404
Pathros
Aquí , un error similar, "El paquete de consulta es demasiado grande (5526600> 1048576)", fue causado por una entrada de contraseña incorrecta, al conectarse a la base de datos MySQL usando DataGrip 2016.1 por JetBrains, y se resolvió cuando se rectificó (usando la contraseña correcta correspondiente al usuario de la base de datos MySQL).
nyedidikeke

Respuestas:

589

Probablemente tenga que cambiarlo tanto para el cliente (que está ejecutando para realizar la importación) como para el demonio mysqld que se está ejecutando y acepta la importación.

Para el cliente, puede especificarlo en la línea de comando:

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

Además, cambie el archivo my.cnf o my.ini en la sección mysqld y establezca:

max_allowed_packet=100M

o puede ejecutar estos comandos en una consola MySQL conectada a ese mismo servidor:

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

(Use un valor muy grande para el tamaño del paquete).

Michael Pryor
fuente
Tengo un servidor con 16 GB de RAM, ¿es una mala idea establecerlo max_allowed_packeten 100 MB?
Webnet
11
FYI - me ayudó a resolver un DIFERENTE error - "el servidor # 2006 se ha ido"
itsho
37
Tenga en cuenta que el uso de "set global" funciona hasta que se reinicie el siguiente servicio mysql.
Will Shaver
2
Omita "set global" y el final ";" al agregar estos valores a los archivos my.ini o my.cnf. Ejemplo: "net_buffer_length = 1000000" en my.conf.
Rustavore
3
En CentOS 5, my.cnf se encuentra en /etc/my.cnf
Rustavore
124

Como dijo michaelpryor, debe cambiarlo tanto para el cliente como para el servidor daemon mysqld.

Su solución para la línea de comandos del cliente es buena, pero los archivos ini no siempre funcionan, dependiendo de la configuración.

Entonces, abra una terminal, escriba mysql para obtener un indicador de mysql y emita estos comandos:

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

Mantenga abierto el indicador de mysql y ejecute la ejecución de SQL de la línea de comandos en un segundo terminal.

Joshua Fox
fuente
2
Resolvió el problema para mí; la importación que estoy haciendo es única y no puedo cambiar fácilmente la configuración. Esto funcionó muy bien. : D
Rob Howard el
39

Esto se puede cambiar en su my.iniarchivo (en Windows, ubicado en \ Archivos de programa \ MySQL \ MySQL Server) en la sección del servidor, por ejemplo:

[mysqld]

max_allowed_packet = 10M
GHad
fuente
55
en una mac, archivo obviamente ubicado en otro lugar.
kch
2
claro, pero la configuración todavía está en algún lugar, aunque no sé la ubicación exacta
GHad
Para mí en Fedora 20 con MariaDB, colocar esa configuración al final de /etc/my.cnf.d/server.cnf fue el truco. Tuve que reiniciar el servicio, por supuesto ... sudo nano systemctl restart mariadb.service
Ray Foss
Es más probable que el archivo sea "my.cnf" y en sistemas nix, generalmente en / etc / o / usr / local / etc. Una vez que edite, asegúrese de reiniciar el servidor mysql para aplicar el cambio.
Chris
17

Re my.cnf en Mac OS X cuando use MySQL de la distribución de paquetes dmg mysql.com

Por defecto, my.cnf no se encuentra en ninguna parte.

Es necesario copiar uno de /usr/local/mysql/support-files/my*.cnfa /etc/my.cnfy se reinicie mysqld. (Lo que puede hacer en el panel de preferencias de MySQL si lo instaló).

kch
fuente
La configuración predeterminada para OSX parece ser my-medium.cnf, aunque el tamaño max_allowed_packet es el mismo en my-large.cnf ... hasta que comience a cambiar las cosas :)
Chris Burgess
En mi caso /usrl/local/mysql/my.cnf no funcionó hasta que lo copié a /etc/my.cnf.
VG
14

En etc / my.cnf intente cambiar max_allowed _packet y net_buffer_length a

max_allowed_packet=100000000
net_buffer_length=1000000 

Si esto no funciona, intente cambiar a

max_allowed_packet=100M
net_buffer_length=100K 
Amirtha Rajan
fuente
12

La solución es aumentar el paquete max_allowed_packet del demonio MySQL. Puede hacer esto a un demonio en ejecución iniciando sesión como Super y ejecutando los siguientes comandos.

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

Luego para importar su volcado:

gunzip < dump.sql.gz | mysql -u admin -p database
Primoz Rome
fuente
¿En qué versión de MySQL estabas ejecutando esto?
crmpicco
6

En CENTOS 6 /etc/my.cnf, en la sección [mysqld] la sintaxis correcta es:

[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
fuente
4

Use una max_allowed_packetvariable que emita un comando como

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

Tomasz Tybulewicz
fuente
2
Intenté eso, no funcionó. volcado completo en 272mb, intentado con max más alto que eso.
kch
4

Ligeramente no relacionado con su problema, así que aquí hay uno para Google.

Si no mysqldump el SQL, puede ser que su SQL esté roto.

Acabo de recibir este error al tener accidentalmente un literal de cadena no cerrado en mi código. Dedos descuidados suceden.

Es un mensaje de error fantástico para obtener una cadena desbocada, ¡gracias por eso MySQL!

jplindstrom
fuente
1
También recibí este error debido a SQL roto. Más específicamente, mi tabla tiene restricciones nulas y mi código estaba INSERTANDO valores nulos. En lugar de darme un error informativo, MySQL devolvió el max_allowed_packeterror. Si ayuda para aquellos en el futuro, estaba INSERTANDO usando la API de pandasdf.to_sql(...)
Alex Petralia
1

A veces, escriba la configuración:

max_allowed_packet = 16M

en my.ini no funciona.

Intente determinar el my.ini de la siguiente manera:

set-variable = max_allowed_packet = 32M

o

set-variable = max_allowed_packet = 1000000000

Luego reinicie el servidor:

/etc/init.d/mysql restart
Grzegorz Brzęczyszczykiewicz
fuente
1

Es un riesgo de seguridad tener max_allowed_packetun valor más alto, ya que un atacante puede empujar paquetes de mayor tamaño y bloquear el sistema.

Entonces, el valor óptimo de max_allowed_packetser sintonizado y probado.

Es mejor cambiar cuando sea necesario (usar set global max_allowed_packet = xxx) que tenerlo como parte de my.ini o my.conf .

Shiva
fuente
0

Estoy trabajando en un entorno de alojamiento compartido y he alojado un sitio web basado en Drupal. No puedo editar el my.iniarchivo o el my.confarchivo también.

Entonces, eliminé todas las tablas relacionadas Cachey, por lo tanto, pude resolver este problema. Todavía estoy buscando una solución / forma perfecta para manejar este problema.

Editar : eliminar las tablas me creó problemas, porque Drupal esperaba que estas tablas deberían existir. Así que vacié el contenido de estas tablas que resolvieron el problema.

Raj Pawan Gumdal
fuente
0

Error:

ERROR 1153 (08S01) en la línea 6772: Obtuve un paquete más grande que bytes 'max_allowed_packet' La operación falló con el código de salida 1

CONSULTA:

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

Valor máximo:

Default Value (MySQL >= 8.0.3)  67108864
Default Value (MySQL <= 8.0.2)  4194304
Minimum Value   1024
Maximum Value   1073741824
Tính Ngô Quang
fuente
-1

Establezca max_allowed_packet en el mismo (o más) de lo que era cuando lo descargó con mysqldump. Si no puede hacer eso, realice el volcado nuevamente con un valor menor.

Es decir, suponiendo que lo descargó con mysqldump. Si usaste alguna otra herramienta, estás solo.

MarkR
fuente