Magento MySQL ha desaparecido error

14

Tengo muchos problemas extraños en Magento CE 1.7.0.2. Durante las operaciones normales, el sitio ocasionalmente producirá una página de error de Magento (se ha producido un error al procesar su solicitud ) tanto en el front-end como en el back-end. Al ver el informe asociado, veo el siguiente mensaje:

"SQLSTATE[HY000] [2006] MySQL server has gone away"

A veces, pero más raramente, el mensaje del informe leerá:

 Connection reset by peer

He mirado el var> log> system.log y el MySQL has gone awayerror va acompañado de lo siguiente:

Warning: PDO::__construct(): MySQL server has gone away  in /var/www/html/domain.com/live/lib/Zend/Db/Adapter/Pdo/Abstract.php on line 129
Error while reading greeting packet. PID=1863  in /var/www/html/domain.com/live/lib/Zend/Db/Adapter/Pdo/Abstract.php on line 129

Además de esto, el siguiente error parece estar ocurriendo en cada solicitud, así como los MySQL has gone awayerrores:

 Warning: include(File.php): failed to open stream: No such file or directory  in /var/www/html/domain.com/live/lib/Varien/Autoload.php on line 93
 Warning: include(): Failed opening 'File.php' for inclusion

He revisado la mayoría de los artículos que puedo encontrar sobre esto y he modificado los parámetros de la base de datos hasta que las vacas llegaron a casa, pero el error persiste.

Después de seguir otra QnA sobre el compilador, noto que la página de administración Sistema> Herramientas> Compilación está completamente en blanco. Creo que todos estos son errores relacionados, pero cualquier idea sobre la depuración o las causas sería muy útil.

Pido disculpas si esto es incoherente; Estuve despierto unas 42 horas, así que solicite cualquier aclaración. Gracias.

- actualización -

Mi pila de servidores para mayor claridad:

PHP 5.5.4 (PHP-FPM)
Nginx 1.4.2
MySQL 5.5.33

- actualización -

Se me ocurre (después de dormir un poco) que nunca especifiqué: la base de código PHP y la base de datos MySQL están en servidores de hardware separados, ¡es muy importante saber si me ayudarán! Pido disculpas.

Jongosi
fuente
1
¿Está utilizando conexiones de base de datos persistentes? Si es así, intente deshabilitarlos. También verificaría los registros de mysql para ver si hay errores allí o si realmente se está reiniciando frente a solo la conexión que se está cayendo.
davidalger
Gracias David, siguiendo los registros de MySQL y la base de datos nunca se ve afectada cuando se produce el error. Estaba usando conexiones persistentes, deshabilitar no ayudó :(
Jongosi
1
¿Has considerado que la conexión es mala? Una causa de ese error es que el DB nunca recibió el mensaje. Intente depurar utilizando la información de conexión de local.xml para llamar a las funciones de mysqli. Mira qué pasa.
SH-
gracias, parecía haber solucionado mi problema al editar el archivo local

Respuestas:

9

Esto se debe principalmente a cualquiera de las dos razones siguientes

  1. El servidor agotó el tiempo de espera y cerró la conexión.
    corrección: intente aumentar la wait_timeoutvariable en el my.cnf/my.ini archivo de configuración de mysqld .
  2. El servidor descartó un paquete incorrecto o demasiado grande.
    Solución: aumente el límite máximo de tamaño de paquete aumentando el valor de max_allowed_packetin my.cnf/my.ini file.

Verifique los archivos si está intentando obtener algo que está tardando demasiado o que no puede aplicar.

Anshu Mishra
fuente
Gracias Anshu, estoy siguiendo el registro de consultas de MySQL y la base de datos nunca recibe una solicitud. Además, si reinicio el servidor, a veces puede producirse un error dentro de los 20 segundos posteriores a la conexión del servidor, demasiado corto como para que se agote el tiempo de espera de la configuración predeterminada. Configuré max_allowed_packet2G y wait_timout86400, todavía no ayuda.
Jongosi
Compruebe si la conexión de la base de datos es correcta, consulte el archivo de su aplicación / etc / local.xml
Anshu Mishra
Thx Anshu, sí, es correcto - la conexión ocurre alrededor del 68% de las solicitudes
Jongosi
6

¡Problema resuelto! Gracias a todos por la ayuda. Este fue un problema de firewall de hardware con el servidor web, incluso después de que los desactivamos.

Según lo confirmado por el equipo del servidor de 1 & 1 , los cortafuegos de hardware se configuraron correctamente, pero estaban interceptando incorrectamente el tráfico válido entre el servidor de archivos y el servidor db aproximadamente el 25% del tiempo.

En su lugar, configuramos iptables y apagamos completamente los firewalls de hardware. 100% de disponibilidad ahora.

Jongosi
fuente
2
¡Oh mi! Firewall esporádico ... tengo que amar ese tipo de problema. Me alegro de que lo arregló. :)
davidalger
El mismo problema aquí y parece que su solución también funcionará para nosotros. Voy a hablar 1 y 1 también. ¿El soporte te ayudó de alguna manera? ¿Puedo contactarte? ¿Gorjeo? ¿Facebook? Por favor vea mi perfil para más detalles. Gracias
webDEVILopers
2

Experimenté el mismo problema para Magento 2.1 y mi registro de errores de mysql mostró el siguiente error varias veces durante el proceso "MySQL se ha ido":

...[Warning] File Descriptor 1228 exceeded FD_SETSIZE=1024

Para resolver potencialmente este problema, primero verifique el open filesvalor con $ ulimit -n, que en mi caso fue 256.

En segundo lugar, agregue table_open_cache = {that ulimit -n value}debajo de la [mysqld]sección en su my.cnf.

Ahora reinicie MySQL y esperemos que vuelva a la acción.

Nota: estoy ejecutando Magento 2.1 localmente en OS X El Capitan con PHP 7.1 y MySQL 5.7.15 build con Homebrew. Pero apuesto a que esta solución también funcionaría en configuraciones anteriores o diferentes.


fuente
1

Edite el archivo app / etc / local.xml en su carpeta Magento, reemplazando la entrada para que el host sea '127.0.0.1' en lugar de 'localhost'.

broc
fuente
La base de datos está en un servidor de hardware separado, por lo que se utiliza la dirección IP del servidor MySQL.
Jongosi
1

Experimentó el mismo error al migrar una gran base de datos entre 2 servidores.

Agregar temporalmente lo siguiente en el archivo de configuración de mysql (/etc/mysql/my.cnf) en mi servidor local (destino) y reiniciar mysql (reinicio del servicio mysql) me solucionó el problema:

max_allowed_packet      = 160M
wait_timeout            = 28800000
Miguel
fuente