Magento MySQL ha perso l'errore


14

Sto avendo un sacco di strani problemi su Magento CE 1.7.0.2. Durante le normali operazioni, il sito produrrà occasionalmente una pagina di errore Magento ( si è verificato un errore durante l'elaborazione della richiesta ) sia sul frontend che sul backend. Visualizzando il rapporto associato, vedo il seguente messaggio:

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

A volte, ma più raramente, il messaggio di report leggerà:

 Connection reset by peer

Ho esaminato var> log> system.log e l' MySQL has gone awayerrore è accompagnato da quanto segue:

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

Inoltre, sembra che si verifichi il seguente errore su ogni richiesta, nonché gli MySQL has gone awayerrori:

 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

Ho guardato la maggior parte degli articoli che posso trovare su questo e ho armeggiato con i parametri del database fino a quando le mucche sono tornate a casa ma l'errore rimane.

Dopo aver seguito un altro QnA sul compilatore, noto che la pagina di amministrazione Sistema> Strumenti> Compilazione è completamente vuota. Penso che questi siano tutti errori correlati, ma qualsiasi approfondimento sul debug o sulle cause sarebbe così utile.

Mi scuso se questo è incoerente; Sono stato sveglio per circa 42 ore, quindi ti preghiamo di chiedere qualsiasi chiarimento. Grazie.

-- aggiornare --

Il mio server stack per chiarezza:

PHP 5.5.4 (PHP-FPM)
Nginx 1.4.2
MySQL 5.5.33

-- aggiornare --

Mi viene in mente (dopo un po 'di sonno) che non ho mai specificato - la base di codice PHP e il db MySQL sono su server hardware separati - molto importante sapere se mi aiuterai !! Mi scuso.


1
Stai utilizzando connessioni al database persistenti? In tal caso, prova a disabilitarli. Controllerei anche i log di mysql per vedere se ci sono errori o se si sta effettivamente riavviando rispetto alla sola interruzione della connessione.
davidalger,

Grazie David, la coda dei log di MySQL e il DB non viene mai colpito quando si verifica l'errore. Stavo usando connessioni persistenti, la disabilitazione non ha aiutato :(
Jongosi il

1
Hai considerato che la connessione non è buona. Una causa di questo errore è che il DB non ha mai ricevuto il messaggio. Prova a eseguire il debug utilizzando le informazioni sulla connessione da local.xml per chiamare le funzioni mysqli. Guarda cosa succede.
SH-

grazie, sembra che il problema sia stato risolto modificando il file locale

Risposte:


9

Ciò è dovuto principalmente a uno dei due motivi seguenti

  1. Il server è scaduto e ha chiuso la connessione.
    correzione: prova ad aumentare la wait_timeoutvariabile nel my.cnf/my.ini file di configurazione di mysqld .
  2. Il server ha eliminato un pacchetto errato o troppo grande.
    correzione: aumenta il limite massimo di dimensione del pacchetto aumentando il valore di max_allowed_packetin my.cnf/my.ini file.

Controlla i file se stai cercando di ottenere qualcosa che impiega troppo tempo o non è applicabile.


Grazie Anshu, sto seguendo il registro delle query MySQL e il database non viene mai colpito con una richiesta. Inoltre, se riavvio il server, a volte può verificarsi un errore entro 20 secondi dal momento in cui il server è online - troppo breve per il timeout anche delle impostazioni predefinite. Ho impostato max_allowed_packetsu 2G e wait_timout86400, ancora nessun aiuto.
Jongosi,

Controlla se la connessione al database è corretta, controlla la tua app / etc / local.xml
Anshu Mishra

Grazie Anshu, sì, è corretto - la connessione avviene circa il 68% delle richieste
Jongosi,

6

Problema risolto! Grazie a tutti per l'aiuto. Questo era un problema di firewall hardware con l'host web, anche dopo che erano stati disabilitati da noi.

Come confermato dal team del server 1 & 1 , i firewall hardware sono stati configurati correttamente, ma intercettavano erroneamente il traffico valido tra il file server e il server db circa il 25% delle volte.

Abbiamo invece configurato iptables e spento completamente i firewall hardware. Disponibilità al 100% ora.


2
Oh mio! Firewall sporadico ... devo amare questo tipo di problema. Sono contento che tu l'abbia risolto. :)
davidalger

Lo stesso problema qui e sembra che la tua soluzione funzionerà anche per noi. Parlerò anche 1 e 1. Il supporto ti ha aiutato in qualche modo? Posso contattarti? Twitter? Facebook? Si prega di consultare il mio profilo per i dettagli. Grazie
webDEVILopers

2

Ho riscontrato lo stesso problema con Magento 2.1 e il mio registro degli errori mysql ha mostrato più volte il seguente errore durante il processo "MySQL è andato via":

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

Per risolvere potenzialmente questo problema, controlla innanzitutto il open filesvalore con $ ulimit -n, che nel mio caso era 256.

In secondo luogo, aggiungi table_open_cache = {that ulimit -n value}sotto la [mysqld]sezione nel tuo my.cnf.

Ora riavvia MySQL e spero che torni all'azione.

Nota: sto eseguendo Magento 2.1 localmente su OS X El Capitan con PHP 7.1 e MySQL 5.7.15 build con Homebrew. Scommetto che questa soluzione funzionerebbe anche con configurazioni precedenti o diverse.


1

Modifica il file app / etc / local.xml nella tua cartella Magento, sostituendo la voce per l'host in '127.0.0.1' invece di 'localhost'.


Il database si trova su un server hardware separato, quindi viene utilizzato l'indirizzo IP del server MySQL.
Jongosi,

1

Si è verificato lo stesso errore durante la migrazione di un database di grandi dimensioni tra 2 server.

L'aggiunta temporanea di quanto segue nel file di configurazione mysql (/etc/mysql/my.cnf) sul mio server (destinazione) locale e il riavvio di mysql (servizio mysql restart) ha risolto il problema per me:

max_allowed_packet      = 160M
wait_timeout            = 28800000
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.