399 votos

Cómo cambiar el tamaño del paquete máximo permitido

Tengo un problema con los campos BLOB en mi base de datos MySQL - cuando subo archivos de más de 1MB aproximadamente obtengo un error Packets larger than max_allowed_packet are not allowed.

Esto es lo que he probado:

En el navegador de consultas de MySQL ejecuté un show variables like 'max_allowed_packet' que me dio 1048576.

Luego ejecuto la consulta set global max_allowed_packet=33554432 seguido de show variables like 'max_allowed_packet' - me da 33554432 como se esperaba.

Pero cuando reinicio el servidor MySQL, mágicamente vuelve a ser 1048576. ¿Qué estoy haciendo mal?

Pregunta extra, ¿es posible comprimir un campo BLOB?

1 votos

Un campo BLOB es un Objeto Grande Binario. Son sólo bits. Así que sí, puedes comprimir el contenido, y da otros (y con suerte, menos) bits que almacenas en el campo BLOB en su lugar. Sólo cambia los datos que se ponen en él. También tendrás que descomprimir el contenido del BLOB cuando lo vuelvas a necesitar.

0 votos

Ok gracias, esperaba que existiera una función de compresión en mysql

1 votos

500voto

Manuel Puntos 4262

Cambio en la my.ini o ~/.my.cnf incluyendo la única línea debajo de [mysqld] o [client] en su archivo:

max_allowed_packet=500M

luego reinicie el servicio MySQL y ya está.

Ver el documentación para más información.

1 votos

Gracias parece que funciona aunque esperaba que esto fuera posible sin tener que modificar los archivos ini manualmente.

0 votos

Cambiar el archivo my.ini es básicamente lo mismo que cambiar la configuración en otros programas. Aquí es sólo un archivo del que el programa lee la información.

82 votos

Para los lectores, esta es también la solución al error "MySQL ha desaparecido".

296voto

TehShrike Puntos 4409

El paquete_máximo_permitido puede establecerse globalmente mediante la ejecución de una consulta.

Sin embargo, si no lo cambia en el my.ini (como sugirió dragon112), el valor se restablecerá cuando el servidor se reinicie incluso si se establece de forma global.

Para cambiar el paquete máximo permitido para todos a 1GB hasta que el servidor se reinicie:

SET GLOBAL max_allowed_packet=1073741824;

7 votos

No ayuda :(. Muestra "Consulta OK, 0 filas afectadas (0.00 seg)"

17 votos

@artnikpro Sí funciona, "Query OK, 0 rows affected (0.00 sec)" puede parecer engañoso pero es correcto.

16 votos

No funciona para mí. SHOW VARIABLES WHERE variable_name = 'max_allowed_packet' sigue mostrando el valor antiguo

113voto

naw103 Puntos 238

Uno de mis desarrolladores junior estaba teniendo un problema para modificar esto para mí, así que pensé que iba a ampliar esto en mayor detalle para los usuarios de linux:

1) terminal abierto

2) ssh Root@YOURIP

3) introduzca la contraseña de root

4) nano /etc/mysql/my.cnf (si el comando no es reconocido haga esto primero o intente con vi y luego repita: yum install nano )

5) añada la línea: max_allowed_packet=256M (obviamente ajuste el tamaño para lo que necesite) bajo la sección [MYSQLD]. Cometió un error de ponerlo en la parte inferior del archivo primero por lo que no funcionó.

enter image description here

6) Control + O (guardar) y luego ENTER (confirmar) y luego Control + X (salir del archivo)

7) service mysqld restart

8) Puede comprobar el cambio en la sección de variables en phpmyadmin

0 votos

Esto fue hecho en Centos6, por supuesto estoy de acuerdo en no utilizar el acceso ssh Root sin embargo

0 votos

@tamasd Algunas distros GNU/Linux que he utilizado (como Debian 8 y CentOS 6) producen sudo: command not found o this incident will be reported porque o bien sudo no ha sido instalado y configurado. ¿Sería mejor encestar esta respuesta con instrucciones sobre la configuración de sudo por primera vez?

0 votos

El problema no es Root ssh, sino el inicio de sesión con contraseña Una cuenta de usuario con permiso sudo es casi tan insegura como Root. Sólo tiene que utilizar la autenticación basada en la clave SSH.

50voto

fstang Puntos 146

Creo que algunos también querrán saber cómo encontrar el archivo my.ini en su PC. Para los usuarios de Windows, creo que la mejor manera es la siguiente:

  1. Ganar+R (atajo de teclado para "ejecutar"), escriba servicios.msc , Ingrese
  2. Puede encontrar una entrada como 'MySQL56', hacer clic con el botón derecho del ratón sobre ella y seleccionar propiedades
  3. Podría ver algo como "D:/Archivos de programa/MySQL/MySQL Server 5.6/bin \mysqld " --defaults-file=" D:\ProgramData\MySQL\MySQL Servidor 5.6 \my.ini " MySQL56

He recibido esta respuesta de http://bugs.mysql.com/bug.PHP?id=68516

2 votos

Esto es importante en Windows. Tenía MySQL como servicio y edité my.ini en Workbench y esta respuesta me hizo darme cuenta de que MySQL como servicio utiliza otro my.ini que el que edité en Workbench.

13voto

xpro-fedtest Puntos 468

Si obtiene este error al realizar una copia de seguridad, max_allowed_packet puede establecerse en el my.cnf especialmente para mysqldump .

[mysqldump]
max_allowed_packet=512M

Seguí recibiendo este error mientras realizaba una mysqldump y no entendía porque tenía esto puesto en my.cnf bajo la [mysqld] sección. Una vez que me di cuenta de que podía ponerlo para [mysqldump] y he fijado el valor, mis copias de seguridad se han completado sin problemas.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X