Cómo resolver el error 'MySQL server has gone away' en PrestaShop
¿Te ha aparecido el temido error "MySQL server has gone away" en tu tienda PrestaShop? No te preocupes, es uno de los contratiempos más comunes en el mundo del hosting y, aunque parezca un mensaje críptico, casi siempre tiene una solución sencilla. En esta guía extensa y paso a paso, vamos a desglosar qué significa exactamente este error, por qué ocurre y, lo más importante, cómo solucionarlo de forma definitiva para que tu tienda vuelva a funcionar sin cortes.
Este mensaje suele aparecer en el panel de administración de PrestaShop, en el front-office (la tienda visible) o incluso en los logs de errores. La buena noticia es que, en el 90% de los casos, se debe a un problema de configuración del servidor, no a un fallo de tu tienda. Vamos a ello.
¿Qué significa realmente "MySQL server has gone away"?
Antes de lanzarnos a tocar configuraciones, es vital entender el problema. Este error ocurre cuando el cliente (tu instalación de PrestaShop) intenta conectarse al servidor de base de datos MySQL, pero el servidor MySQL ha cerrado la conexión de forma inesperada o ha tardado demasiado en responder.
Imagina que MySQL es una biblioteca y PrestaShop un lector. Si el lector está mucho tiempo con un libro abierto sin hacer nada, el bibliotecario (MySQL) asume que se ha ido y cierra la puerta. Cuando el lector intenta devolver el libro, se encuentra con la puerta cerrada y el mensaje de error.
En términos técnicos, esto se debe casi siempre a dos razones principales:
- Timeout (tiempo de espera agotado): La conexión ha estado inactiva más tiempo del permitido.
- Tamaño de los paquetes: El servidor MySQL rechaza una consulta (query) porque es demasiado grande para el límite configurado (max_allowed_packet).
Vamos a ver cómo atacar ambos frentes.
Solución Paso a Paso: Aumentar el Tiempo de Espera (Timeout)
La causa más frecuente en PrestaShop es que el servidor MySQL cierra las conexiones que llevan más de un cierto tiempo inactivas. Por defecto, muchos servidores tienen un wait_timeout de 60 segundos o menos, lo cual es muy agresivo para una aplicación como PrestaShop, que a veces necesita pensar durante más tiempo para generar una página compleja o procesar un módulo.
Aquí te explico cómo solucionarlo desde el panel de control de tu hosting. Nota: Si tu hosting usa Syspanel (antes conocido como HestiaCP), recuerda que el acceso se realiza a través del puerto 2106 (ej: https://tu-dominio.com:2106).
1. Accede a la configuración de MySQL
Lo primero es entrar en el administrador de tu base de datos. Normalmente, todos los paneles de control (cPanel, Plesk, Syspanel, DirectAdmin) tienen una herramienta llamada phpMyAdmin. Es como el "cocina" de tu base de datos.
- Si usas Syspanel (puerto 2106), busca el icono de phpMyAdmin en la sección de "Bases de Datos".
- Si usas cPanel, busca el icono de phpMyAdmin en la sección de "Databases".
2. Localiza la variable wait_timeout
Una vez dentro de phpMyAdmin, mira en la parte superior y haz clic en la pestaña "Variables". Verás un montón de nombres técnicos. En el buscador (o filtrando por la letra "w"), escribe wait_timeout.
- Verás un valor en segundos (ej: 60, 90, 300).
- Necesitamos aumentarlo. Un valor seguro para PrestaShop es 300 (5 minutos) o incluso 600 (10 minutos) si tienes una tienda con muchos productos o módulos pesados.
3. ¿Cómo cambiar el valor si no te deja?
Aquí viene el truco. En muchos hostings compartidos, no puedes cambiar la configuración global de MySQL. Pero sí puedes cambiarlo para tu sesión o mediante un pequeño truco.
- Método A (Por sesión): En la misma pantalla de variables, haz clic en el botón "Editar" (o el lápiz) junto a
wait_timeouty cambia el valor a300. Esto funciona hasta que el servidor se reinicie, pero a veces es suficiente para pruebas o para que el cambio se aplique en caliente. - Método B (Por consulta SQL): Ve a la pestaña "SQL" en phpMyAdmin y escribe la siguiente línea y ejecútala:
SET GLOBAL wait_timeout = 300;
SET GLOBAL max_allowed_packet = 64M;
Este método es más fiable, ya que fuerza el cambio en el servidor en tiempo real.
[TIP]: Si el wait_timeout está en 60 y lo subes a 300, notarás que el error desaparece casi al instante.
4. Ajustar max_allowed_packet (el tamaño máximo de los paquetes)
Este es el segundo culpable más común. Si tu PrestaShop tiene que enviar una consulta muy grande (por ejemplo, al importar un CSV con muchos productos o al guardar una página con mucho contenido), MySQL la rechaza si supera el límite.
- En la misma búsqueda de variables, busca
max_allowed_packet. - El valor por defecto suele ser
1M(1 megabyte) o4M. Esto es insuficiente para e-commerce modernos. - Recomendación: Súbelo a
64M(64 megabytes). Es un valor seguro y que no satura el servidor.
Para cambiarlo, usa el mismo método de la consulta SQL que te mostré arriba (incluye la línea de max_allowed_packet).
[WARNING] : Si tu hosting es muy restrictivo, es posible que no te permita ejecutar SET GLOBAL. En ese caso, deberás contactar con el soporte de tu proveedor de hosting y pedirles amablemente que cambien estas variables en el archivo my.cnf (o my.ini) del servidor. Es un cambio estándar que ellos conocen.
Solución Avanzada: Configurar PrestaShop para Reconectar
A veces, aunque el servidor aguante más tiempo, PrestaShop tiene su propio límite de conexión. PrestaShop es una aplicación robusta, pero si un script tarda mucho en ejecutarse, puede agotar el tiempo de espera de PHP antes de que MySQL siquiera tenga un problema.
Para ello, debemos asegurarnos de que PHP no se rinda antes que MySQL.
1. Aumentar el límite de memoria de PHP
PrestaShop necesita memoria para funcionar. Si se queda sin ella, mata los procesos y puede provocar este error indirectamente.
- Accede a tu panel de control.
- Busca la opción "Configuración de PHP" o "Select PHP Version" (en cPanel).
- Busca la variable
memory_limit. - Cámbiala a 256M (o al menos 128M si tu hosting es limitado).
- También busca
max_execution_timey ponlo a 300 (segundos).
2. Modificar el archivo config/settings.inc.php (o .env)
En versiones antiguas de PrestaShop (1.6 y anteriores), hay un archivo clave que define cómo se conecta a la base de datos. A veces, añadir un parámetro extra aquí soluciona el problema de raíz.
- Conéctate a tu hosting vía FTP o mediante el Administrador de Archivos del panel.
- Navega hasta la carpeta
config/de tu instalación de PrestaShop. - Busca el archivo
settings.inc.php. - Edítalo y busca la línea que define la conexión a la base de datos (normalmente empieza por
define('_DB_SERVER_'). - Al final de esa línea, justo antes del
);, añade este código:
, array(
'persistent' => false,
'timeout' => 60
)
Ejemplo real:
define('_DB_SERVER_', 'localhost', array(
'persistent' => false,
'timeout' => 60
));
Esto le dice a PrestaShop que espere hasta 60 segundos por una respuesta de MySQL antes de rendirse. Es un "parche" muy efectivo.
[INFO]: Si usas PrestaShop 1.7 o 8.x, este archivo ya no existe. En su lugar, la configuración está en el archivo app/config/parameters.php. La solución del timeout de servidor (la primera) es la más efectiva en estos casos.
Solución Definitiva: Optimizar el Hosting (Syspanel)
Si has llegado hasta aquí y el error persiste, el problema puede ser que tu servidor está sobrecargado o mal configurado a nivel global. Aquí es donde entra la gestión del hosting.
1. Reiniciar MySQL (Solo si tienes VPS o Dedicado)
Si tienes un VPS o servidor dedicado y usas Syspanel (puerto 2106), puedes reiniciar el servicio MySQL directamente.
- Entra en Syspanel con tus credenciales.
- Ve a la sección de "Servicios" o "Estado del servidor".
- Busca
MySQLoMariaDB. - Haz clic en "Reiniciar".
Esto limpia cualquier conexión atascada y aplica los cambios de configuración global que hiciste antes.
2. Verificar el espacio en disco
Un disco duro lleno al 100% puede provocar errores extraños en MySQL. Revisa que tienes espacio libre suficiente.
- En Syspanel, en la sección de "Estadísticas" o "Recursos", mira el uso del disco.
- Si está al 90% o más, libera espacio (borra logs antiguos, cachés, etc.).
3. Desactivar módulos conflictivos
A veces, un módulo de terceros mal codificado lanza consultas masivas que hacen que MySQL se canse y corte la conexión.
- Ve a tu panel de administración de PrestaShop.
- Ve a Módulos > Módulos y Servicios.
- Ordena por "Últimamente modificados" o revisa los que no uses.
- Desactiva los que no sean esenciales (especialmente los de caché, comparación de precios o importadores automáticos) y prueba si el error desaparece.
Preguntas Frecuentes (FAQ)
¿Este error puede dañar mi tienda?
No, es un error de conexión temporal. No corrompe la base de datos ni borra productos. Lo que sí puede hacer es interrumpir una operación en curso (como una importación), por lo que es importante solucionarlo para evitar pérdidas de tiempo.
¿Es un problema de mi ordenador o de la web?
Es 100% un problema del servidor donde está alojada tu web. No tiene nada que ver con tu conexión a internet ni con tu PC.
¿Cuánto tiempo tarda en arreglarse con el método del wait_timeout?
Si el cambio se aplica bien en phpMyAdmin, es inmediato. No necesitas esperar. Si solo puedes cambiarlo vía consulta SQL, también es instantáneo.
¿Necesito ser un experto en programación para hacer esto?
No. Si sigues los pasos de esta guía, especialmente los de phpMyAdmin, es un proceso visual y sencillo. La parte más técnica (editar el archivo) es opcional y solo si te atreves.
¿Qué hago si nada de esto funciona?
Si has probado todo y el error persiste, es hora de contactar con el soporte de tu hosting. Diles claramente: "He intentado cambiar wait_timeout y max_allowed_packet en phpMyAdmin y no tengo permiso para aplicar los cambios globales. Necesito que ajusten estos valores en el my.cnf para mi cuenta". Ellos tienen las herramientas para hacerlo en segundos.
Resumen Final: Checklist Rápido
Para que no te pierdas, aquí tienes el orden lógico de actuación:
- Aumentar
wait_timeouta 300 en phpMyAdmin (Variables o SQL). - Aumentar
max_allowed_packeta 64M. - Aumentar
memory_limitde PHP a 256M. - Reiniciar MySQL si tienes acceso (VPS/Dedicado).
- Desactivar módulos sospechosos si el error es intermitente.
Con estos pasos, dominarás el error "MySQL server has gone away" en PrestaShop. Es un problema molesto, pero una vez que entiendes que es una cuestión de límites de tiempo y tamaño, se convierte en un simple ajuste de configuración.
Espero que esta guía te haya sido de gran ayuda. Si tienes dudas, repasa la sección de FAQ o el paso a paso de nuevo. ¡Tu tienda online volverá a estar operativa en cuestión de minutos!
