Un paquete de comunicación es una única sentencia SQL enviada al servidor MySQL o una única fila que es enviada al cliente.
En MySQL 3.23, el páquete más grande posible es de 16MB, debido a los límites del protocolo cliente/servidor. En MySQL 4.0.1 y superiores, el límite es de 1GB.
Cuando un cliente MySQL o el servidor mysqld
recibe un paquete más grande de
max_allowed_packet
bytes, este devuelve un
error Packet too large
y cierra la conexión.
Con algunos clientes, también podría obtener un error
Lost connection to MySQL server during query
si el paquete de comunicación es demasiado grande.
Tanto el cliente como el servidor tienen su propia variable
max_allowed_packet
así que si quiere
gestionar paquetes grandes, debe aumentar esta variable tanto en
el cliente como en el servidor.
Si está utilizando el programa cliente
mysql, el valor por defecto de la variable
max_allowed_packet
es de 16MB. Este es
también el máximo valor permitido anteriormente a la versión
MySQL 4.0. Para establecer un valor mayor desde 4.0 en adelante,
inicie mysql de la siguiente manera:
mysql> mysql --max_allowed_packet=32M
Esto establece el tamaño del paquete en 32MB.
El valor por defecto de la variable
max_allowed_packet
en el servidor es de 1MB.
Pue incrementar esto si el servidor necesita gestionar consultas
grandes (por ejemplo, si está trabajando con columnas
BLOB
grandes). Por ejemplo, para establecer
la variable a 16MB, inicie el servidor así:
mysql> mysqld --max_allowed_packet=16M
Para versiones previas a MySQL 4.0, utilice esta sintaxis:
mysql> mysqld --set-variable=max_allowed_packet=16M
También puede utilizar un archivo de opciones para establecer
max_allowed_packet
. Por ejemplo, para
establecer el valor para el servidor en 16MB, añada las
siguientes líneas en su archivo de opciones:
[mysqld] max_allowed_packet=16M
Para versiones previas a MySQL 4.0, utilice esta sintaxis:
[mysqld] set-variable = max_allowed_packet=16M
Es seguro incrementar el valor de esta variable porque la memoria extra tan solo es utilizada cuando se necesite. Por ejemplo, mysqld solo ocupa más memoria cuando usted ejecuta una consulta grande o cuando mysqld debe retornar una fila de resultados grande. El valor por defecto pequeño en la variable, es una precaución para atrapar paquetes incorrectos entre el cliente y el servidor, y también para asegurarse de que usted no se queda sin memoria al utilizar paquetes grandes de manera accidental.
También puede sufrir problemas extraños con paquetes grandes
si está utilizando valores BLOB
grandes pero
no ha dado a mysqld acceso a suficiente
memoria para gestionar la consulta. Si sospecha que este es el
caso, intente añadir ulimit -d 256000 al
principio del script mysqld_safe y reinicie
mysqld.
Ésta es una traducción del manual de referencia de MySQL, que puede encontrarse en dev.mysql.com. El manual de referencia original de MySQL está escrito en inglés, y esta traducción no necesariamente está tan actualizada como la versión original. Para cualquier sugerencia sobre la traducción y para señalar errores de cualquier tipo, no dude en dirigirse a mysql-es@vespito.com.