Magento MySQL a disparu Erreur


14

J'ai des tas de problèmes étranges sur Magento CE 1.7.0.2. Pendant les opérations normales, le site produira occasionnellement une page d'erreur Magento (il y a eu une erreur lors du traitement de votre demande ) sur le frontend et le backend. En affichant le rapport associé, je vois le message suivant:

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

Parfois, mais plus rarement, le message de rapport se lit comme suit:

 Connection reset by peer

J'ai regardé var> log> system.log et l' MySQL has gone awayerreur est accompagnée de ce qui suit:

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

En plus de cela, l'erreur suivante semble se produire sur chaque demande, ainsi que les MySQL has gone awayerreurs:

 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

J'ai regardé la plupart des articles que je peux trouver à ce sujet et j'ai bricolé les paramètres de la base de données jusqu'à ce que les vaches rentrent à la maison, mais l'erreur persiste.

Après avoir suivi un autre QnA sur le compilateur, je remarque que la page d'administration Système> Outils> Compilation est complètement vide. Je pense que ce sont toutes des erreurs liées, mais tout aperçu du débogage ou des causes serait très utile.

Je m'excuse si cela est incohérent; Je suis éveillé depuis environ 42 heures, alors veuillez demander des éclaircissements. Je vous remercie.

-- mise à jour --

Ma pile de serveurs pour plus de clarté:

PHP 5.5.4 (PHP-FPM)
Nginx 1.4.2
MySQL 5.5.33

-- mise à jour --

Il me vient à l'esprit (après un peu de sommeil) que je n'ai jamais spécifié - la base de code PHP et la base de données MySQL sont sur des serveurs matériels séparés - très important de savoir si vous allez m'aider !! Je m'excuse.


1
Utilisez-vous des connexions de base de données persistantes? Si oui, essayez de les désactiver. Je vérifierais également les journaux mysql pour voir s'il y a des erreurs ou s'il redémarre réellement par rapport à la connexion abandonnée.
davidalger

Thx David, qui suit les journaux MySQL et la base de données n'est jamais touché lorsque l'erreur se produit. J'utilisais des connexions persistantes, la désactivation n'a pas aidé :(
Jongosi

1
Avez-vous considéré que la connexion est mauvaise. Une cause de cette erreur est que la base de données n'a jamais reçu le msg. Essayez de déboguer en utilisant les informations de connexion de local.xml pour appeler les fonctions mysqli. Voyez ce qui se passe.
SH-

merci, semble avoir résolu mon problème d'édition du fichier local

Réponses:


9

Cela est principalement dû à l'une des deux raisons ci-dessous

  1. Le serveur a expiré et a fermé la connexion.
    correction: essayez d'augmenter la wait_timeoutvariable dans le my.cnf/my.ini fichier de configuration de votre mysqld .
  2. Le serveur a supprimé un paquet incorrect ou trop volumineux.
    correction: augmentez la limite maximale de taille de paquet en augmentant la valeur de max_allowed_packetin my.cnf/my.ini file.

Veuillez archiver les fichiers si vous essayez d'obtenir quelque chose qui prend trop de temps ou qui n'est pas applicable.


Thx Anshu, je suis le journal des requêtes MySQL et la base de données n'est jamais frappée par une demande. De plus, si je redémarre le serveur, une erreur peut parfois se produire dans les 20 secondes suivant la connexion du serveur - beaucoup trop court pour que même les paramètres par défaut expirent. Je me suis mis max_allowed_packetà 2G et wait_timoutà 86400, toujours sans aide.
Jongosi

Veuillez vérifier si la connexion à la base de données est correcte, vérifiez votre fichier app / etc / local.xml
Anshu Mishra

Thx Anshu, oui, c'est correct - la connexion se produit pour environ 68% des demandes
Jongosi

6

Problème résolu! Merci à tous pour l'aide. Il s'agissait d'un problème de pare-feu matériel avec l'hôte Web, même après qu'il ait été désactivé par nous.

Comme confirmé par l' équipe serveur de 1 & 1 , les pare-feu matériels étaient correctement configurés, mais ils interceptaient incorrectement du trafic valide entre le serveur de fichiers et le serveur db environ 25% du temps.

Nous avons plutôt configuré iptables et fermé complètement les pare-feu matériels. Disponibilité à 100% maintenant.


2
Oh mon! Pare-feu sporadique… je dois aimer ce genre de problème. Je suis heureux que tu l'aie résolu. :)
davidalger

Même problème ici et il semble que votre solution fonctionnera aussi pour nous. Je vais parler 1 & 1 aussi. Le support vous a-t-il aidé d'une manière ou d'une autre? Puis-je vous contacter? Twitter? Facebook? Veuillez consulter mon profil pour plus de détails. Merci
webDEVILopers

2

J'ai rencontré le même problème pour Magento 2.1 et mon journal d'erreurs mysql a montré l'erreur suivante plusieurs fois pendant le processus "MySQL a disparu":

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

Pour résoudre potentiellement ce problème, vérifiez d'abord la open filesvaleur avec $ ulimit -n, qui dans mon cas était 256.

Deuxièmement, ajoutez table_open_cache = {that ulimit -n value}sous la [mysqld]section dans votre my.cnf.

Redémarrez maintenant MySQL et j'espère que vous êtes de retour dans l'action.

Remarque: j'exécute Magento 2.1 localement sur OS X El Capitan avec PHP 7.1 et MySQL 5.7.15 avec Homebrew. Mais je parie que cette solution fonctionnerait aussi sur des configurations plus anciennes ou différentes.


1

Modifiez le fichier app / etc / local.xml dans votre dossier Magento, en remplaçant l'entrée de l'hôte par «127.0.0.1» au lieu de «localhost».


La base de données se trouve sur un serveur matériel séparé, donc l'adresse IP du serveur MySQL est utilisée.
Jongosi

1

A rencontré la même erreur lors de la migration d'une grande base de données entre 2 serveurs.

L'ajout temporaire des éléments suivants dans le fichier de configuration mysql (/etc/mysql/my.cnf) sur mon serveur local (de destination) et le redémarrage de mysql (service mysql restart) ont résolu le problème pour moi:

max_allowed_packet      = 160M
wait_timeout            = 28800000
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.