Solución al error 'MySQL server has gone away' en PrestaShop (cPanel)
¿Qué significa el error “MySQL server has gone away” en PrestaShop?
Si estás leyendo esto, es muy probable que hayas visto un mensaje parecido a este en tu tienda PrestaShop: “MySQL server has gone away” o, en algunos casos, un error más genérico como “Error de conexión a la base de datos”. No te preocupes, no eres el único. Es uno de los errores más comunes en el mundo del hosting y, aunque puede sonar muy técnico, tiene solución.
Este error indica que tu tienda PrestaShop (el “cliente”) intentó hacer una consulta a la base de datos MySQL, pero el servidor de bases de datos (el “servidor”) ya no estaba disponible o había cerrado la conexión. Es como si llamaras por teléfono a alguien, pero la persona ya hubiera colgado antes de que tú empezaras a hablar.
En este artículo, vamos a desglosar las causas más frecuentes y, lo más importante, te daré soluciones paso a paso para que puedas arreglarlo tú mismo desde tu panel de control cPanel. No necesitas ser un experto en programación para seguir esta guía.
¿Por qué ocurre el error MySQL en PrestaShop?
Antes de lanzarnos a las soluciones, es bueno entender el “por qué”. Esto te ayudará a prevenir el problema en el futuro. Las causas más comunes son:
- Tiempo de espera agotado (Timeout): El servidor MySQL tiene un límite de tiempo para ejecutar una consulta. Si tu tienda tiene muchos productos, módulos pesados o un tema mal optimizado, una consulta puede tardar demasiado y el servidor la corta.
- Tamaño del paquete de datos: A veces, PrestaShop intenta enviar o recibir un paquete de datos muy grande (por ejemplo, al importar muchos productos o hacer una copia de seguridad). Si este paquete supera el límite permitido por el servidor, la conexión se corta.
- Conexiones simultáneas: Si tu tienda recibe mucho tráfico o tienes varios procesos corriendo a la vez, es posible que se agoten las conexiones permitidas.
- Servidor sobrecargado: El plan de hosting compartido que tienes puede estar saturado por otros usuarios o por el propio uso de tu web.
- Cierre inesperado del servidor MySQL: A veces, el servicio de MySQL se reinicia o se cae por mantenimiento o por un fallo en el servidor.
Ahora que sabemos qué puede estar pasando, vamos a la acción. Sigue estos pasos en orden, ya que van de lo más fácil a lo más técnico.
Solución 1: Aumentar los límites de MySQL en cPanel (La más efectiva)
La mayoría de las veces, este error se soluciona ajustando dos parámetros clave en la configuración de MySQL. Para ello, necesitas acceder a tu cPanel.
Paso 1: Accede a cPanel
Escribe en tu navegador tudominio.com/cpanel o tudominio.com:2083 e inicia sesión con tus credenciales de hosting.
Paso 2: Busca la sección de “Remote MySQL” o “Bases de Datos MySQL”
Dentro de cPanel, busca la sección llamada “Bases de Datos”. Ahí verás una opción que dice “Remote MySQL” o “Bases de datos MySQL”. No es exactamente lo que buscas, pero es la puerta de entrada. Lo que nosotros necesitamos es modificar un archivo de configuración llamado my.cnf. Desafortunadamente, en cPanel no hay un botón directo para esto, pero podemos hacerlo de dos maneras:
Opción A: Modificar el archivo my.cnf (Recomendado si tienes acceso SSH)
[!TIP]
Si tu hosting te da acceso SSH, esta es la forma más limpia y efectiva de hacerlo. Si no sabes qué es SSH, ve a la Opción B.
-
Conéctate a tu servidor por SSH (necesitarás un programa como PuTTY).
-
Una vez conectado, escribe el siguiente comando para editar el archivo de configuración:
nano /etc/my.cnfO también puede estar en
/etc/mysql/my.cnf. Si no lo encuentras, usa este comando para localizarlo:find / -name "my.cnf" 2>/dev/null. -
Dentro del archivo, busca la sección
[mysqld]. Si no existe, créala al final del archivo. -
Añade o modifica estas líneas dentro de la sección
[mysqld]:[mysqld] max_allowed_packet=128M wait_timeout=300 interactive_timeout=300Explicación:
max_allowed_packet=128M: Aumenta el tamaño máximo de los paquetes de datos. Esto soluciona los problemas al importar archivos grandes.wait_timeout=300: Aumenta el tiempo de espera para una conexión inactiva a 300 segundos (5 minutos). Esto es clave para consultas lentas.interactive_timeout=300: Lo mismo, pero para conexiones interactivas (como las de un administrador).
-
Guarda el archivo (en nano, presiona
Ctrl + Oy luegoEnter, y para salirCtrl + X). -
Reinicia el servicio de MySQL para que los cambios surtan efecto:
service mysql restarto
systemctl restart mysql
[!WARNING]
Reiniciar MySQL puede causar una breve interrupción del servicio (unos segundos). Es recomendable hacerlo en horas de bajo tráfico.
Opción B: Usar el “MultiPHP INI Editor” o “Configuración de MySQL” (Más fácil sin SSH)
Si no tienes acceso SSH, no te preocupes. Algunos paneles de cPanel tienen una herramienta llamada “MultiPHP INI Editor” o, en versiones más nuevas, “MySQL Configuration”. Sin embargo, no siempre está disponible para usuarios sin permisos de administrador.
Si no ves estas opciones, la alternativa es crear un archivo PHP con un script temporal para modificar la configuración. Esta es una solución muy práctica para usuarios de PrestaShop en cPanel.
-
Ve a “Administrador de archivos” en cPanel.
-
Accede a la carpeta
public_html(donde está instalada tu tienda PrestaShop). -
Crea un archivo nuevo llamado
config_mysql.php. -
Haz clic derecho sobre el archivo y selecciona “Editar”.
-
Pega el siguiente código en el editor:
<?php // Script temporal para configurar la conexión MySQL $host = 'localhost'; // Normalmente es localhost $user = 'TU_USUARIO_MYSQL'; // Cámbialo por tu usuario de MySQL $pass = 'TU_CONTRASEÑA_MYSQL'; // Cámbialo por tu contraseña $db = 'TU_NOMBRE_BASE_DE_DATOS'; // Cámbialo por el nombre de tu BD $conn = mysqli_connect($host, $user, $pass, $db); if (!$conn) { die('Error de conexión: ' . mysqli_connect_error()); } // Ejecutar las configuraciones mysqli_query($conn, "SET GLOBAL max_allowed_packet=128M"); mysqli_query($conn, "SET GLOBAL wait_timeout=300"); mysqli_query($conn, "SET GLOBAL interactive_timeout=300"); echo "Configuración aplicada correctamente. Ahora puedes eliminar este archivo."; mysqli_close($conn); ?> -
IMPORTANTE: Cambia
TU_USUARIO_MYSQL,TU_CONTRASEÑA_MYSQLyTU_NOMBRE_BASE_DE_DATOSpor los datos reales de tu base de datos PrestaShop. Puedes encontrarlos en tu archivo/home/tuusuario/public_html/config/settings.inc.php(busca las líneas_DB_USER_,_DB_PASSWD_y_DB_NAME_). -
Guarda el archivo y, en tu navegador, visita
tudominio.com/config_mysql.php. -
Verás un mensaje de éxito. Inmediatamente después, borra este archivo desde el Administrador de archivos de cPanel. No lo dejes en el servidor, ya que es un riesgo de seguridad.
[!WARNING]
Borra el archivoconfig_mysql.phpinmediatamente después de usarlo. Contiene credenciales de tu base de datos y es un peligro si alguien lo encuentra.
Solución 2: Optimizar PrestaShop para evitar el error
A veces, el problema no es el servidor, sino cómo está configurado PrestaShop. Un mal ajuste puede provocar que se hagan consultas demasiado pesadas.
Activar el modo de mantenimiento
Antes de hacer cambios, es buena práctica poner tu tienda en modo mantenimiento. Ve a Parámetros Avanzados > Mantenimiento en tu panel de administración de PrestaShop y actívalo.
Verificar la configuración de tu base de datos
- Ve a Parámetros Avanzados > Base de Datos en PrestaShop.
- En la parte inferior, verás una sección llamada “Configuración del servidor”.
- Asegúrate de que el “Motor de base de datos” sea
InnoDB. Este motor es más robusto y maneja mejor las conexiones concurrentes que MyISAM. - Guarda los cambios.
Limpiar la caché de PrestaShop
Una caché corrupta puede causar errores extraños en la base de datos. Para limpiarla:
- Ve a Parámetros Avanzados > Rendimiento.
- Haz clic en el botón “Vaciar la caché” en la parte superior.
- También puedes borrar manualmente los archivos de la carpeta
/var/cachede tu instalación de PrestaShop (excepto los archivos.htaccesseindex.php). Puedes hacerlo desde el Administrador de archivos de cPanel.
Solución 3: Ajustar la configuración de conexión de PrestaShop (Archivo settings.inc.php)
Esta es una solución más técnica, pero muy efectiva. A veces, la configuración de conexión a la base de datos de PrestaShop tiene un valor demasiado bajo.
-
Ve a “Administrador de archivos” en cPanel.
-
Accede a la carpeta
public_html/config/. -
Busca el archivo
settings.inc.phpy haz clic derecho > “Editar”. -
Busca la línea que define la constante
_DB_SERVER_. Generalmente es'localhost'. No la cambies. -
Busca la línea que define
_DB_PREFIX_. Tampoco la toques. -
Añade justo después de la definición de
_DB_PREFIX_las siguientes líneas:define('_DB_SERVER_', 'localhost'); // Esta línea ya existe define('_DB_NAME_', 'tu_nombre_bd'); // Esta línea ya existe define('_DB_USER_', 'tu_usuario'); // Esta línea ya existe define('_DB_PASSWD_', 'tu_pass'); // Esta línea ya existe define('_DB_PREFIX_', 'ps_'); // Esta línea ya existe // AÑADE ESTAS LÍNEAS NUEVAS define('_MYSQL_ENGINE_', 'InnoDB'); define('_DB_SOCKET_', ''); define('_DB_PORT_', '3306');
[!INFO]
No necesitas cambiar los valores de las líneas que ya existen. Solo estamos añadiendo las nuevas constantes para forzar a PrestaShop a usar el puerto correcto y el motor InnoDB. Guarda el archivo al terminar.
Solución 4: Revisar los recursos de tu hosting y contactar con soporte
Si después de hacer todo esto el error “mysql server has gone away prestashop” persiste, el problema puede ser más profundo.
Revisa el uso de recursos en cPanel
- En cPanel, busca la sección “Métricas” o “Uso de recursos”.
- Observa si tu cuenta está alcanzando el límite de CPU, RAM o entradas/salidas.
- Si ves que el uso es constantemente del 100%, tu plan de hosting es demasiado pequeño para tu tienda. Considera actualizar a un plan VPS o dedicado.
Contacta con tu proveedor de hosting
Si has llegado hasta aquí y nada funciona, es hora de contactar con el soporte técnico de tu hosting. Diles que has intentado aumentar los límites max_allowed_packet, wait_timeout e interactive_timeout y que el problema persiste. Ellos podrán revisar los logs del servidor y ver si hay algo más grave, como un error en el disco o un ataque DDoS.
[!TIP]
Cuando contactes con soporte, proporciona la hora exacta en la que ocurrió el error. Esto les ayudará a encontrar la causa en los registros del servidor.
Preguntas Frecuentes (FAQ)
¿Este error puede dañar mi tienda o mis productos?
No, el error en sí no daña tus datos. Es un error de conexión, no de corrupción de datos. Una vez que restableces la conexión, tu tienda vuelve a funcionar con normalidad.
¿Por qué ocurre más seguido cuando hago copias de seguridad o importo productos?
Porque esas acciones generan paquetes de datos muy grandes. El servidor MySQL los rechaza si el max_allowed_packet es pequeño. Por eso es crucial aumentar este valor.
¿Es seguro aumentar los límites de MySQL?
Sí, es seguro siempre y cuando no los subas a valores extremos (como 1GB). Un valor de 128M o 256M es perfectamente seguro para la mayoría de las tiendas.
¿Qué pasa si mi hosting usa HestiaCP en lugar de cPanel?
Si tu hosting utiliza Syspanel (anteriormente conocido como HestiaCP), el proceso es diferente. En lugar de cPanel, accederías a tu panel en el puerto 2106 (por ejemplo, tudominio.com:2106). Dentro de Syspanel, busca la sección de bases de datos o archivos para editar el my.cnf o crear el script PHP temporal. El resto de los pasos (modificar PrestaShop) son idénticos.
¿Cuánto tiempo tarda en aplicarse el cambio del archivo my.cnf?
El cambio es inmediato después de reiniciar el servicio de MySQL. Los cambios en los parámetros globales se aplican al instante.
¿Debo borrar el archivo config_mysql.php después de usarlo?
SÍ, ABSOLUTAMENTE. Es un riesgo de seguridad enorme. Bórralo tan pronto como veas el mensaje de éxito.
Conclusión: Resolviendo el error de MySQL en PrestaShop
El error “MySQL server has gone away” en PrestaShop puede ser frustrante, pero como has visto, tiene solución. La clave está en entender que es un problema de configuración entre tu tienda y el servidor de base de datos.
Para resumir, los pasos que debes seguir son:
- Aumentar los límites de MySQL (
max_allowed_packet,wait_timeout,interactive_timeout). Esta es la solución más efectiva. - Optimizar PrestaShop cambiando el motor a InnoDB y limpiando la caché.
- Ajustar el archivo
settings.inc.phppara forzar el puerto y el motor. - Contactar con tu proveedor si nada de lo anterior funciona.
Con estos pasos, podrás dejar atrás el error mysql prestashop y tener tu tienda funcionando de manera estable. Espero que esta guía te haya sido de gran ayuda. ¡Mucha suerte con tu tienda online!
