Cómo resolver el error 'MySQL server has gone away' en PrestaShop (DirectAdmin)
¿Qué significa el error "MySQL server has gone away" en PrestaShop?
Si estás leyendo esto, es muy probable que hayas visto este mensaje en tu tienda PrestaShop y te hayas llevado un susto. Tranquilo, no eres el único. Este es uno de los errores más comunes en entornos de hosting con panel de control DirectAdmin, y la buena noticia es que, en la gran mayoría de los casos, tiene una solución sencilla y definitiva.
El error "MySQL server has gone away" (El servidor MySQL ha desaparecido) es un aviso que genera PHP cuando intenta comunicarse con tu base de datos pero el servidor de bases de datos (MySQL o MariaDB) no responde o corta la conexión de forma abrupta. No significa que hayas perdido tus productos, clientes o pedidos. Piensa en ello como si intentaras hacer una llamada telefónica y la línea se cortara: los datos siguen ahí, solo necesitas restablecer la comunicación.
En este artículo, te explicaré paso a paso, con un lenguaje claro y sin tecnicismos innecesarios, cómo diagnosticar y solucionar este problema en un entorno PrestaShop alojado en un servidor con DirectAdmin. Vamos a ello.
¿Por qué ocurre este error en PrestaShop con DirectAdmin?
Antes de lanzarnos a solucionarlo, es importante entender las causas. El error "MySQL server has gone away" puede aparecer por varios motivos, y conocerlos te ayudará a aplicar la solución correcta a la primera. Las causas más frecuentes son:
- Tiempo de espera agotado (Timeout): MySQL tiene un límite de tiempo para mantener una conexión inactiva abierta. Si tu tienda tarda mucho en procesar una tarea (por ejemplo, importar un CSV grande o generar un informe pesado), la conexión se cierra y PHP muestra este error.
- Paquetes demasiado grandes: Si intentas enviar una consulta muy grande (como una importación masiva de productos o la instalación de un módulo pesado), el servidor MySQL puede rechazarla si el tamaño del paquete supera el límite permitido (
max_allowed_packet). - Falta de memoria o recursos: Si tu plan de hosting tiene poca memoria RAM (memoria límite por proceso) o el servidor está sobrecargado, MySQL puede caerse o reiniciarse, cortando todas las conexiones activas.
- Conexiones simultáneas agotadas: MySQL tiene un límite de conexiones simultáneas (
max_connections). Si tu tienda recibe mucho tráfico o tienes muchos procesos en cola, es posible que se alcance ese límite y se rechacen nuevas conexiones. - Reinicio del servicio MySQL/MariaDB: A veces, el servicio de base de datos se reinicia automáticamente por mantenimiento del servidor o por un fallo puntual. Esto corta todas las conexiones existentes.
Soluciones paso a paso para "MySQL server has gone away" en PrestaShop
Vamos a ir de lo más sencillo a lo más complejo. Te recomiendo seguir este orden, ya que en la mayoría de los casos la solución está en los primeros pasos.
Paso 1: Aumentar el límite de memoria PHP (memory_limit)
Este es el primer paso y uno de los más efectivos. PrestaShop es una plataforma que consume muchos recursos, especialmente al ejecutar tareas de importación/exportación o al usar módulos de terceros. Si el límite de memoria de PHP es demasiado bajo, el proceso se mata y pierde la conexión con MySQL.
Cómo hacerlo en DirectAdmin:
- Accede a tu panel de control DirectAdmin.
- Busca la sección "Administración de cuentas" o "Configuración de PHP". El nombre puede variar según la versión de DirectAdmin, pero suele estar bajo el nombre de "Selector de versión de PHP" o "Configuración de PHP".
- Dentro, verás una lista de opciones de configuración. Busca
memory_limit. - Cámbiala a un valor más alto. Te recomiendo empezar con
256M(256 Megas). Si tu tienda es grande, puede que necesites512Mo incluso1024M. - Guarda los cambios. DirectAdmin suele reiniciar PHP automáticamente.
[TIP] Si no encuentras la opción, puedes hacerlo manualmente desde el administrador de archivos de DirectAdmin. Busca el archivo php.ini en la raíz de tu cuenta o crea uno nuevo con la línea memory_limit = 256M.
Paso 2: Aumentar el tamaño máximo de paquete (max_allowed_packet)
Este es el culpable número uno cuando el error ocurre al importar productos o al instalar un módulo. El valor por defecto en muchos servidores es de 16MB o 32MB, lo cual puede ser insuficiente.
Cómo hacerlo en DirectAdmin:
- Ve a la sección "MySQL Management" o "Administración de MySQL" en tu panel de DirectAdmin.
- Busca la opción "Editar configuración de MySQL" o similar. A veces está dentro de "Configuración personalizada de MySQL".
- Localiza la variable
max_allowed_packet. - Cámbiala a un valor mayor, como
64Mo128M. - Guarda los cambios y reinicia el servicio MySQL desde el propio panel (o espera a que DirectAdmin lo haga automáticamente).
[WARNING] Si no tienes acceso a esta configuración, contacta con tu proveedor de hosting. Es posible que necesites que ellos lo cambien a nivel de servidor.
Paso 3: Optimizar el tiempo de espera de MySQL (wait_timeout)
Si el error aparece cuando tu tienda está inactiva por un rato y luego intentas acceder al panel de administración, es probable que el problema sea el tiempo de espera.
Cómo hacerlo:
- Sigue los mismos pasos que en el Paso 2 para llegar a la configuración de MySQL en DirectAdmin.
- Busca la variable
wait_timeout. - El valor por defecto suele ser
28800(8 horas). Puedes aumentarlo a36000(10 horas) o más si tu tienda procesa tareas largas. - También busca
interactive_timeouty establece un valor similar.
Paso 4: Revisar la configuración de conexión en PrestaShop
A veces, la solución no está en el servidor, sino en la propia configuración de PrestaShop. El archivo config/settings.inc.php (en versiones antiguas) o el archivo .env (en versiones modernas de PrestaShop 1.7+) contiene los datos de conexión a la base de datos.
Qué debes revisar:
- Accede al administrador de archivos de tu hosting en DirectAdmin.
- Navega hasta la carpeta raíz donde está instalado PrestaShop.
- Abre el archivo
config/settings.inc.php(PrestaShop 1.6) o.env(PrestaShop 1.7+). Ojo, el archivo.enves oculto, actívalo en el administrador de archivos. - Busca la línea que define la constante
_DB_SERVER_oDATABASE_URL. Asegúrate de que apunta alocalhosto127.0.0.1. A veces, si apunta a un servidor remoto, la conexión es más lenta y propensa a errores. - También revisa que el usuario y la contraseña de la base de datos sean correctos.
Paso 5: Comprobar los recursos del servidor (memoria y CPU)
Si has llegado hasta aquí y el error persiste, es momento de mirar el estado general del servidor.
Cómo hacerlo en DirectAdmin:
- En la página principal de DirectAdmin, busca la sección de "Estadísticas del sistema" o "Monitor de recursos".
- Observa el uso de memoria (RAM) y CPU. Si están constantemente al 100%, tu plan de hosting es insuficiente para el tráfico y las tareas que realiza tu tienda.
- En este caso, la solución es contratar un plan de hosting superior o optimizar tu tienda PrestaShop (desactivar módulos innecesarios, limpiar caché, etc.).
Paso 6: Forzar el reinicio de MySQL desde DirectAdmin
A veces, una solución rápida es simplemente reiniciar el servicio de bases de datos. Esto puede solucionar un problema temporal de conexiones atascadas o memoria.
Cómo hacerlo:
- En DirectAdmin, ve a la sección "Servicios del sistema" o "Administración de servicios".
- Busca el servicio
mysqlomariadb. - Haz clic en "Reiniciar" o "Restart".
[WARNING] Esta acción cortará la conexión de todos los sitios web que usen esa base de datos durante unos segundos. Es recomendable hacerlo en horas de poco tráfico.
Solución avanzada: Modificar el archivo my.cnf manualmente
Si tienes acceso SSH a tu servidor (a través de la opción "Acceso SSH" en DirectAdmin) y te sientes cómodo con la línea de comandos, puedes hacer estos cambios de forma más precisa.
- Conéctate por SSH.
- Abre el archivo de configuración de MySQL. Normalmente está en
/etc/my.cnfo/etc/mysql/my.cnf. - Dentro del bloque
[mysqld], añade o modifica las siguientes líneas:
[mysqld]
max_allowed_packet = 128M
wait_timeout = 36000
interactive_timeout = 36000
- Guarda el archivo y reinicia MySQL con el comando
service mysql restartosystemctl restart mysql.
Preguntas frecuentes (FAQ)
¿Este error puede provocar la pérdida de datos en mi tienda?
No. Este error es una interrupción de la comunicación. Tus productos, pedidos y clientes están guardados en las tablas de la base de datos y no se pierden. Solo tienes que restablecer la conexión y guardar los cambios pendientes.
¿Por qué aparece este error solo a veces y no siempre?
Porque depende de la carga del servidor y de las tareas que se estén ejecutando en ese momento. Una importación puntual de muchos productos puede disparar el error, mientras que la navegación normal de los clientes no lo hace.
¿Debo cambiar de hosting si tengo este error?
No necesariamente. Primero prueba todas las soluciones anteriores. Si el error persiste y tu servidor está constantemente al límite de recursos, entonces sí, es un indicativo de que necesitas un plan más potente o un servidor dedicado (VPS). Si usas un servicio como Syspanel (accesible por el puerto 2106) para gestionar tu VPS, recuerda que también puedes ajustar estos parámetros desde su interfaz.
¿Qué hago si ninguna de estas soluciones funciona?
Si has seguido todos los pasos y el error persiste, te recomiendo contactar con el soporte técnico de tu proveedor de hosting. Ellos tienen acceso directo a los logs del servidor (errores de MySQL y PHP) y podrán diagnosticar el problema a un nivel más profundo. Dales toda la información que puedas: cuándo ocurre el error, qué acciones realizabas en ese momento y los cambios que ya has intentado.
En resumen
El error "MySQL server has gone away" en PrestaShop con DirectAdmin es un problema molesto pero, en la gran mayoría de los casos, solucionable. La clave está en ajustar la configuración de memoria y los tiempos de espera tanto de PHP como de MySQL. Empieza por aumentar el memory_limit y el max_allowed_packet, y en pocos minutos tu tienda debería volver a funcionar con normalidad.
[INFO] Recuerda que los cambios en la configuración de PHP y MySQL pueden tardar unos segundos en aplicarse. Después de cada cambio, borra la caché de PrestaShop (desde el panel de administración: Parámetros avanzados > Rendimiento > Vaciar caché) para asegurarte de que los nuevos parámetros se cargan correctamente.
Espero que esta guía te haya sido de gran ayuda. Si tienes más dudas, no dudes en dejar un comentario.
