Recherche de site Web

Conseils utiles pour résoudre les erreurs courantes dans MySQL


MySQL est un système de gestion de base de données relationnelle open source (RDMS) largement utilisé et appartenant à Oracle. Au fil des années, il a été le choix par défaut pour les applications Web et reste toujours populaire par rapport aux autres moteurs de bases de données.

Lire aussi : Comment installer la dernière version de MySQL sur RHEL/CentOS et Fedora

MySQL a été conçu et optimisé pour les applications Web. Il fait partie intégrante des principales applications Web telles que Facebook, Twitter, . Wikipédia, YouTube et bien d'autres.

Votre site ou votre application Web est-il alimenté par MySQL ? Dans cet article détaillé, nous expliquerons comment résoudre les problèmes et les erreurs courantes sur le serveur de base de données MySQL. Nous décrirons comment déterminer les causes des problèmes et que faire pour les résoudre.

1. Impossible de se connecter au serveur MySQL local

L'une des erreurs de connexion client-serveur les plus courantes dans MySQL est « ERREUR 2002 (HY000) : impossible de se connecter au serveur MySQL local via le socket '/var/run/mysqld/mysqld.sock' (2) ».

Cette erreur indique qu'aucun serveur MySQL (mysqld) n'est en cours d'exécution sur le système hôte ou que vous avez spécifié un mauvais nom de fichier de socket Unix ou TCP/IP<. lorsque vous essayez de vous connecter au serveur.

Assurez-vous que le serveur est en cours d'exécution en vérifiant un processus nommé mysqld sur l'hôte de votre serveur de base de données à l'aide de la commande ps et de la commande grep ensemble, comme indiqué.

ps xa | grep mysqld | grep -v mysqld

Si les commandes ci-dessus n'affichent aucune sortie, cela signifie que le serveur de base de données n'est pas en cours d'exécution. Le client ne peut donc pas s’y connecter. Pour démarrer le serveur, exécutez la commande systemctl suivante.

sudo systemctl start mysql        #Debian/Ubuntu
sudo systemctl start mysqld       #RHEL/CentOS/Fedora

Pour vérifier l'état du service MySQL, utilisez la commande suivante.

sudo systemctl status mysql       #Debian/Ubuntu
sudo systemctl status mysqld      #RHEL/CentOS/Fedora

D'après le résultat de la commande ci-dessus, le service MySQL a échoué. Dans un tel cas, vous pouvez essayer de le redémarrer et vérifier à nouveau son état.

sudo systemctl restart mysql
sudo systemctl status mysql

De plus, si le serveur s'exécute comme indiqué par la commande suivante, mais que vous voyez toujours l'erreur ci-dessus, vous devez également vérifier que le port TCP/IP est bloqué par un pare-feu ou tout service de blocage de port. .

ps xa | grep mysqld | grep -v mysqld

Pour trouver le port sur lequel le serveur écoute, utilisez la commande netstat comme indiqué.

sudo netstat -tlpn | grep "mysql"

2. Impossible de se connecter au serveur MySQL

Une autre erreur de connexion fréquemment rencontrée est « (2003) Impossible de se connecter au serveur MySQL sur le « serveur » (10061) », ce qui signifie que la connexion réseau a été refusée.

Ici, commencez par vérifier qu'un serveur MySQL est en cours d'exécution sur le système, comme indiqué ci-dessus. Assurez-vous également que les connexions réseau sont activées sur le serveur et que le port réseau que vous utilisez pour vous connecter est celui configuré sur le serveur.

Les autres erreurs courantes que vous êtes susceptibles de rencontrer lorsque vous essayez de vous connecter au serveur MySQL sont :

ERROR 2003: Can't connect to MySQL server on 'host_name' (111)
ERROR 2002: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (111)

Ces erreurs indiquent que le serveur est peut-être en cours d'exécution, mais que vous essayez de vous connecter en utilisant un port TCP/IP, un canal nommé ou un fichier socket Unix différent de celui sur lequel le serveur écoute.

3. Erreurs d'accès refusé dans MySQL

Dans MySQL, un compte utilisateur est défini en termes d'un nom d'utilisateur et du ou des hôtes clients à partir desquels l'utilisateur peut se connecter au serveur. De plus, un compte peut également disposer d’informations d’authentification telles qu’un mot de passe.

Bien qu'il existe de nombreuses causes différentes d'erreurs « Accès refusé », l'une des causes courantes est liée aux comptes MySQL que le serveur autorise les programmes clients à utiliser lors de la connexion. Cela indique que le nom d'utilisateur spécifié dans la connexion ne dispose pas des privilèges nécessaires pour accéder à la base de données.

MySQL permet la création de comptes permettant aux utilisateurs clients de se connecter au serveur et d'accéder aux données gérées par le serveur. À cet égard, si vous rencontrez une erreur d'accès refusé, vérifiez si le compte utilisateur est autorisé à se connecter au serveur via le programme client que vous utilisez, et éventuellement l'hôte d'où provient la connexion. .

Vous pouvez voir les privilèges dont dispose un compte donné en exécutant la commande SHOW GRANTS comme indiqué.

> SHOW GRANTS FOR 'tecmint'@'localhost';

Vous pouvez accorder des privilèges à un utilisateur particulier sur une base de données spécifique sur l'adresse IP distante à l'aide des commandes suivantes dans le shell MySQL.

> grant all privileges on *.test_db to 'tecmint'@'192.168.0.100';
> flush privileges;

De plus, les erreurs d'accès refusé peuvent également résulter de problèmes de connexion à MySQL, reportez-vous aux erreurs expliquées précédemment.

4. Connexion perdue au serveur MySQL

Vous pouvez rencontrer cette erreur pour l'une des raisons suivantes : une mauvaise connectivité réseau, un délai de connexion ou un problème avec les valeurs BLOB supérieures à max_allowed_packet. En cas de problème de connexion réseau, assurez-vous de disposer d'une bonne connexion réseau, surtout si vous accédez à un serveur de base de données distant.

S'il s'agit d'un problème de délai de connexion, notamment lorsque MySQL tente d'utiliser une première connexion au serveur, augmentez la valeur du paramètre connect_timeout . Mais dans le cas de valeurs BLOB supérieures à max_allowed_packet, vous devez définir une valeur plus élevée pour le max_allowed_packet dans votre /etc. /my.cnf dans la section [mysqld] ou [client] comme indiqué.

[mysqld]
connect_timeout=100
max_allowed_packet=500M

Si le fichier de configuration MySQL n'est pas accessible pour vous, vous pouvez définir cette valeur à l'aide de la commande suivante dans le shell MySQL.

> SET GLOBAL connect_timeout=100;
> SET GLOBAL max_allowed_packet=524288000;

5. Trop de connexions MySQL

Dans le cas où un client MySQL rencontre l'erreur « trop de connexions », cela signifie que toutes les connexions disponibles sont utilisées par d'autres clients. Le nombre de connexions (la valeur par défaut est 151) est contrôlé par la variable système max_connections ; vous pouvez remédier au problème en augmentant sa valeur pour autoriser davantage de connexions dans votre fichier de configuration /etc/my.cnf.

[mysqld]
max_connections=1000

6. Mémoire MySQL insuffisante

Si vous exécutez une requête à l'aide du programme client MySQL et rencontrez l'erreur en question, cela signifie que MySQL ne dispose pas de suffisamment de mémoire pour stocker l'intégralité du résultat de la requête.

La première étape consiste à vous assurer que la requête est correcte. Si c'est le cas, procédez comme suit :

  • si vous utilisez directement le client MySQL, démarrez-le avec --quick switch, pour désactiver les résultats mis en cache ou
  • si vous utilisez le pilote MyODBC, l'interface utilisateur de configuration (UI) comporte un onglet avancé pour les indicateurs. Cochez « Ne pas mettre en cache les résultats ».

Un autre excellent outil est MySQL Tuner : un script utile qui se connecte à un serveur MySQL en cours d'exécution et donne des suggestions sur la façon dont il peut être configuré pour des performances plus élevées.

sudo apt-get install mysqltuner     #Debian/Ubuntu
sudo yum install mysqltuner         #RHEL/CentOS/Fedora
mysqltuner

Pour obtenir des conseils d'optimisation et d'optimisation des performances MySQL, lisez notre article : 15 conseils utiles d'optimisation et d'optimisation des performances MySQL/MariaDB.

7. MySQL continue de planter

Si vous rencontrez ce problème, vous devriez essayer de savoir si le problème vient de la panne du serveur MySQL ou si c'est le client qui a un problème. Notez que de nombreux plantages de serveur sont causés par des fichiers de données ou des fichiers d'index corrompus.

Vous pouvez vérifier l'état du serveur pour déterminer depuis combien de temps il est opérationnel.

sudo systemctl status mysql       #Debian/Ubuntu
sudo systemctl status mysqld      #RHEL/CentOS/Fedora

Vous pouvez également exécuter la commande mysqladmin suivante pour connaître la disponibilité du serveur MySQL.

sudo mysqladmin version -p 

D'autres solutions incluent, sans s'y limiter, l'arrêt du serveur MySQL et l'activation du débogage, puis le redémarrage du service. Vous pouvez essayer de créer un scénario de test qui peut être utilisé pour répéter le problème. De plus, ouvrez une fenêtre de terminal supplémentaire et exécutez la commande suivante pour afficher les statistiques du processus MySQL pendant que vous exécutez vos autres requêtes :

sudo mysqladmin -i 5 status
OR
sudo mysqladmin -i 5 -r status 

L’essentiel : déterminer la cause d’un problème ou d’une erreur

Bien que nous ayons examiné certains problèmes et erreurs MySQL courants et que nous ayons également fourni des moyens de les dépanner et de les résoudre, la chose la plus importante pour diagnostiquer une erreur est de comprendre ce qu'elle signifie (en termes de cause). .

Alors, comment pouvez-vous déterminer cela ? Les points suivants vous guideront sur la façon de déterminer exactement la cause du problème :

  1. La première et la plus importante étape consiste à examiner les journaux MySQL qui sont stockés dans le répertoire /var/log/mysql/. Vous pouvez utiliser des utilitaires de ligne de commande tels que tail pour lire les fichiers journaux.
  2. Si le service MySQL ne démarre pas, vérifiez son état à l'aide de systemctl ou utilisez la commande journetctl (avec l'indicateur -xe) sous systemd pour examiner le problème.
  3. Vous pouvez également examiner le fichier journal du système tel que /var/log/messages ou similaire pour connaître les raisons de votre problème.
  4. Essayez d'utiliser des outils tels que Mytop, looks, top, ps ou htop pour vérifier quel programme utilise tout le processeur ou verrouille la machine ou pour vérifier si vous manquez de mémoire, d'espace disque, de descripteurs de fichiers ou d'autres ressources importantes. .
  5. En supposant que ce problème soit dû à un processus incontrôlable, vous pouvez toujours essayer de le tuer (en utilisant l'utilitaire pkill ou kill) pour que MySQL fonctionne normalement.
  6. En supposant que le serveur mysqld pose des problèmes, vous pouvez exécuter la commande : mysqladmin -u root ping ou mysqladmin -u root processlist pour obtenir réponse de celui-ci.
  7. Si le problème vient de votre programme client lorsque vous essayez de vous connecter au serveur MySQL, vérifiez pourquoi il ne fonctionne pas correctement, essayez d'en obtenir une sortie à des fins de dépannage.

Vous aimerez peut-être également lire les articles suivants sur MySQL :

  1. Apprendre MySQL/MariaDB pour les débutants – Partie 1
  2. Comment surveiller les bases de données MySQL/MariaDB à l'aide de Netdata sur CentOS 7
  3. Comment transférer toutes les bases de données MySQL de l'ancien vers le nouveau serveur
  4. Mytop – Un outil utile pour surveiller les performances MySQL/MariaDB sous Linux
  5. 12 meilleures pratiques de sécurité MySQL/MariaDB pour Linux

Pour plus d'informations, consultez le manuel de référence MySQL concernant les problèmes et les erreurs courantes. Il répertorie de manière exhaustive les problèmes courants et les messages d'erreur que vous pouvez rencontrer lors de l'utilisation de MySQL, y compris ceux dont nous avons discuté ci-dessus et bien plus encore.