SQLSTATE – Pourquoi MySQL ne répond pas?

Écrit par Mario SAM

Les problèmes de communication avec la base de données se produisent dans n’importe quel système, que ce soit Magento ou non.

En fait, cette publication aide tous les développeurs à travailler avec la base de données, plus spécifiquement avec MySQL.

Le SQLSTATE signale un problème qui a causé le problème de communication. Mais cela n’indique pas son origine. Voyons ci-dessous.

Interprétation des messages

Habituellement, ce sont des messages courts, de type:

SQLSTATE[HY000]: General error: 2013 Lost connection to MySQL server during query
SQLSTATE[HY000]: General error: 2006 MySQL server has gone away

Cela ne nous dit rien, juste ce que nous savons déjà (a donné une erreur). Une traduction gratuite pour ces messages serait respectivement:

Erreur générique: 2013 Je suis allé consulter la base de données et perdu sur le dos
Erreur générique: 2006 Le serveur de base de données vous a abandonné

Et il est tellement difficile de trouver une solution prête, car nous ne connaissons pas les causes du problème.

Causes possibles

Serveur hors service. Et cela peut se produire pendant quelques secondes ou quelques heures. Le serveur de base de données peut avoir redémarré ou arrêté.

Et cela peut se produire pour plusieurs raisons, comme une mise à niveau ou une sécurité de la version, une panne de courant, un arrêt accidentel, une surcharge, des pannes, etc.

Temps de réponse. Chaque système a une limite d’attente, et lorsque votre système «parle» à la base de données, une demande est faite… MySQL accepte votre demande et va traiter… et cela peut prendre un certain temps… si vous attendez pas longtemps assez, partez sans la réponse.

C’est-à-dire qu’il existe un paramètre qui indique au serveur quel est le temps d’exécution d’une requête. Si le temps éclate, le processus est interrompu et un message d’erreur est affiché sur le système.

Je n’ai pas l’intention d’approfondir le sujet, mais il y a aussi la file d’attente. Vous souhaitez faire une requête à la base de données, mais avant vous, 300 personnes sont en attente de faire la requête. Et le volume des transactions affecte son temps de réponse, ainsi que les frais généraux mentionnés précédemment.

Infrastructure

Comme je l’ai dit au début de la publication, il est difficile de donner une solution définitive, car la cause du problème est inconnue ou incertaine. Cependant, souvent, l’insuffisance réside dans l’infrastructure utilisée.

Serveur et hébergement. Beaucoup de gens confondent le serveur et l’hébergement, et il n’est pas possible de donner une explication détaillée en ce moment. Mais en résumé:

Serveur, est la machine, l’ordinateur qui restera connecté et connecté à Internet pour que les personnes puissent accéder à votre site.

Hébergement, c’est votre configuration dans ce serveur, les fonctionnalités qui seront disponibles pour votre système.

Les deux sont importants, il est donc impératif d’embaucher un serveur de qualité avec un bon plan d’hébergement (VPS, Dédié ou Cloud).

Entreprises recommandées: Rackspace, Nexcess, UolHost, Hostgator, Digital Ocean

Configuration

Parfois, vous pouvez résoudre le problème en configurant, au moins temporairement (jusqu’à l’absence de ressources). Accédez à votre MySQL via PhpMyAdmin et cliquez sur Variables.

Variables PhpMyAdmin

Toutes les variables peuvent (et doivent) être configurées en fonction des besoins de votre système et/ou du volume d’accès. Dans le cas de Magento, vous pouvez modifier les valeurs de:

#La valeur par défaut est 10 (secondes), augmentez si votre problème est une erreur de 2013.
connect_timeout=30

#temps maximum (secondes) que le serveur attend avant de fermer une connexion sans activité.
wait_timeout=300

#25% de la mémoire disponible pour la base de données est recommandé. si elle dépasse 50%, la machine est len
key_buffer_size=64M

#devrait être double max_connections
table_open_cache=2000

#nombre maximal de connexions simultanées
max_connections=1000

Référence officielle: connect_timeout, wait_timeout, key_buffer_size, table_open_cache, max_connections.

Redémarrez mysql après avoir effectué les modifications.

Vous n’aurez pas toujours accès à ces paramètres, surtout si vous utilisez un plan d’hébergement partagé.

Attention! Si vous utilisez un plan partagé, les problèmes se reproduiront.

Au moins maintenant, vous avez une idée de ce qui peut être fait pour résoudre le problème.

Succès!

L'auteur

Mario SAM

En attendant qu'une opportunité se présente de m'installer en France, je continue d'aider à distance.