Te sugerimos que pruebes esta solución en un ambiente controlado antes de pasarlo a producción, saludos.
Solución:
max_allowed_packet
está configurado en la configuración de mysql, no en el lado de php
[mysqld]
max_allowed_packet=16M
Puedes ver su valor actual en mysql así:
SHOW VARIABLES LIKE 'max_allowed_packet';
Puede intentar cambiarlo de esta manera, pero es poco probable que esto funcione en el alojamiento compartido:
SET GLOBAL max_allowed_packet=16777216;
Puede leer sobre esto aquí http://dev.mysql.com/doc/refman/5.1/en/packet-too-large.html
EDITAR
Él [mysqld] es necesario hacer la max_allowed_packet
trabajando desde al menos mysql versión 5.5.
Configuré recientemente una instancia en AWS EC2 con Drupal y Solr Search Engine, que requirió 32M max_allowed_packet
. Si establece el valor bajo [mysqld_safe]
(que es la configuración predeterminada que viene con la instalación de mysql) en /etc/my.cnf, no funcionó. No profundicé en el problema. Pero después de cambiarlo a [mysqld]
y reinicié el mysqld, funcionó.
El siguiente PHP funcionó para mí (usando la extensión mysqli pero las consultas deberían ser las mismas para otras extensiones):
$db = new mysqli( 'localhost', 'user', 'pass', 'dbname' );
// to get the max_allowed_packet
$maxp = $db->query( 'SELECT @@global.max_allowed_packet' )->fetch_array();
echo $maxp[ 0 ];
// to set the max_allowed_packet to 500MB
$db->query( 'SET @@global.max_allowed_packet = ' . 500 * 1024 * 1024 );
Entonces, si tiene una consulta que espera que sea bastante larga, puede asegurarse de que mysql la acepte con algo como:
$sql = "some really long sql query...";
$db->query( 'SET @@global.max_allowed_packet = ' . strlen( $sql ) + 1024 );
$db->query( $sql );
Tenga en cuenta que agregué 1024 bytes adicionales a la longitud del string porque según el manual
El valor debe ser un múltiplo de 1024; los no múltiplos se redondean hacia abajo al múltiplo más cercano.
Con suerte, eso debería establecer el tamaño max_allowed_packet lo suficientemente grande como para manejar su consulta. No he probado esto en un host compartido, por lo que se aplica la misma advertencia que @Glebushka.
vaya a cpanel e inicie sesión como administrador principal o superadministrador
-
encuentre SSH/Shell Access (lo encontrará en la pestaña de seguridad de cpanel)
-
ahora proporcione el nombre de usuario y la contraseña del superadministrador como
root
owhatyougave
note: do not give any username, cos, it needs permissions
-
una vez que esté en el tipo de consola
tipo ‘
mysql
‘ y presiona enter ahora te encuentras enmysql>
/* y escriba aquí como */mysql> set global net_buffer_length=1000000;
Consulta OK, 0 filas afectadas (0.00 seg)
mysql> set global max_allowed_packet=1000000000;
Consulta OK, 0 filas afectadas (0.00 seg)
Ahora sube y disfruta!!!
Agradecemos que desees confirmar nuestro cometido poniendo un comentario y puntuándolo te damos la bienvenida.