Conseils utiles pour dépanner les erreurs courantes dans MySQL

Conseils utiles pour dépanner les erreurs courantes dans MySQL

Mysql est un système de gestion de base de données relationnel open source largement utilisé (SHRD) appartenant à Oracle. Au fil des ans, il a été le choix par défaut pour les applications Web et reste populaire par rapport à d'autres moteurs de base de données.

Lire aussi: Comment installer le dernier 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 plein d'autres.

Votre site ou votre application Web est-elle alimentée par Mysql? Dans cet article détaillé, nous expliquerons comment résoudre les problèmes et les erreurs courantes dans Mysql serveur de base de données. Nous décrire comment déterminer les causes des problèmes et quoi faire pour les résoudre.

1. Impossible de se connecter au serveur MySQL local

L'une des erreurs de connexion du client et du serveur communes dans MySQL est «Erreur 2002 (HY000): Impossible de se connecter au serveur MySQL local via Socket '/ Var / Run / MySQLD / MySQLD.chaussette '(2)".

Impossible de se connecter au serveur MySQL local

Cette erreur indique qu'il n'y a pas Mysql serveur (mysqld) Exécution sur le système hôte ou que vous avez spécifié un mauvais nom de fichier Unix Socket ou TCP / IP port lorsque vous essayez de se connecter au serveur.

Assurez-vous que le serveur s'exécute en vérifiant un processus nommé mysqld sur votre hôte de serveur de base de données en utilisant la commande ps et la commande grep ensemble comme indiqué.

$ ps xa | grep mysqld | grep -v mysqld 

Si les commandes ci-dessus n'affichent aucune sortie, le serveur de base de données n'exécute pas. Par conséquent, le client ne peut 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 le Mysql État du service, utilisez la commande suivante.

$ sudo systemctl status mysql # debian / ubuntu $ sudo systemctl status mysqld # rhel / centos / fedora 
Vérifiez l'état de MySQL

De la sortie de la commande ci-dessus, le Mysql Le service a échoué. Dans un tel cas, vous pouvez essayer de le redémarrer et de vérifier à nouveau son statut.

$ sudo systemctl redémarrer mysql $ sudo systemctl status mysql 
Redémarrez MySQL et vérifiez le statut

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 TCP / IP Le port est bloqué par un pare-feu ou tout autre 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 couramment rencontrée est «(2003) ne peut pas se connecter au serveur MySQL sur «serveur» (10061)», Ce qui signifie que la connexion réseau a été refusée.

Ici, commencez par vérifier qu'il y a un Mysql Serveur fonctionnant sur le système comme indiqué ci-dessus. Assurez-vous également que le serveur a des connexions réseau activées et que le port réseau que vous utilisez pour 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:

Erreur 2003: Impossible de se connecter au serveur MySQL sur 'host_name' (111) Erreur 2002: Impossible de se connecter au serveur MySQL local via Socket '/ TMP / MySQL.chaussette '(111) 

Ces erreurs indiquent que le serveur pourrait être en cours d'exécution, cependant, vous essayez de vous connecter à l'aide d'un TCP / IP Port, nommé Pipe, ou fichier de socket Unix différent de celui sur lequel le serveur écoute.

3. Accès aux erreurs refusées dans MySQL

Dans Mysql, Un compte utilisateur est défini en termes de nom d'utilisateur et l'hôte client ou les hôtes à partir de laquelle l'utilisateur peut se connecter au serveur. De plus, un compte peut également avoir des informations d'authentification telles qu'un mot de passe.

Bien qu'il existe de nombreuses causes différentes de «Accès refusé”Erreurs, l'une des causes courantes concerne les comptes MySQL que le serveur permet aux programmes clients d'utiliser lors de la connexion. Cela indique que nom d'utilisateur spécifié dans la connexion n'a pas de privilèges pour accéder à la base de données.

MySQL permet la création de comptes qui permettent aux utilisateurs des clients de se connecter au serveur et d'accès aux données gérées par le serveur. À cet égard, si vous rencontrez un Erreur d'accès refusé, Vérifiez si le compte d'utilisateur est autorisé à se connecter au serveur via le programme client que vous utilisez, et éventuellement l'hôte à partir de laquelle la connexion provient.

Vous pouvez voir quels privilèges a un compte donné en exécutant le AFFICHER LES DROITS Commande comme indiqué.

> Afficher les subventions pour 'Tecmint' @ 'localhost'; 

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

> accorder tous les privilèges sur *.test_db à 'Tecmint' @ '192.168.0.100 '; > Privilèges de rinçage; 

En outre, Erreurs d'accès refusées peut également résulter de problèmes de connexion à MySQL, reportez-vous aux erreurs expliquées précédemment.

4. Connexion perdue à MySQL Server

Vous pouvez rencontrer cette erreur pour l'une des raisons suivantes: Mauvaise connectivité réseau, délai de connection dépassé ou Un problème avec blob des valeurs plus grandes que max_allowed_packet. En cas de problème de connexion réseau, assurez-vous d'avoir une bonne connexion réseau, surtout si vous accédez à un serveur de base de données distant.

Si c'est un délai de connection dépassé problème, en particulier quand Mysql essaie d'utiliser une connexion initiale au serveur, augmenter la valeur du connect_timeout paramètre. Mais en cas de Blob Valeurs qui sont plus grands que max_allowed_packet, vous devez définir une valeur plus élevée pour le max_allowed_packet dans ton / etc / mon.CNF Fichier de configuration sous [mysqld] ou [client] Section comme indiqué.

[mysqld] connect_timeout = 100 max_allowed_packet = 500m 

Si la Mysql Le fichier de configuration n'est pas accessible pour vous, alors vous pouvez définir cette valeur en utilisant la commande suivante dans le shell MySQL.

> Définir Global Connect_timeout = 100; > Définir Global Max_ALLOWED_PACKET = 524288000; 

5. Trop de connexions MySQL

Dans le cas où Mysql Le client rencontre le «Trop de connections”Erreur, cela signifie que toutes les connexions disponibles sont utilisées par d'autres clients. Le nombre de connexions (par défaut est 151) est contrôlé par le max_connections variable système; Vous pouvez remédier au problème en augmentant sa valeur pour permettre plus de connexions dans votre / etc / mon.CNF fichier de configuration.

[mysqld] max_connections = 1000 

6. Hors de la mémoire mysql

Au cas où vous exécutez une requête en utilisant le Mysql Programme client et rencontrez l'erreur en question, cela signifie que MySQL n'a pas assez de mémoire pour stocker l'ensemble du résultat de la requête.

La première étape consiste à s'assurer que la requête est correcte, si elle est, alors effectuez ce qui suit:

  • Si vous utilisez directement le client MySQL, commencez-le avec --interrupteur rapide, pour désactiver les résultats mis en cache ou
  • Si vous utilisez le Myodbc Pilote, l'interface utilisateur de configuration (UI) a un onglet avancé pour les drapeaux. Vérifier "Ne pas cache Résultat".

Un autre excellent outil est, Tuner mysql - Un script utile qui se connectera à 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 les conseils d'optimisation et de réglage des performances MySQL, lisez notre article: 15 Conseils utiles de réglage des performances MySQL / MARIADB.

7. Mysql continue de s'écraser

Si vous rencontrez ce problème, vous devriez essayer de savoir si le problème est que le Mysql le serveur décède ou que ce soit le client avec un problème. Notez que de nombreux accidents de serveur sont causés par des fichiers de données corrompus ou des fichiers index.

Vous pouvez vérifier l'état du serveur pour établir pendant combien de temps il est opérationnel.

$ sudo systemctl status mysql # debian / ubuntu $ sudo systemctl status mysqld # rhel / centos / fedora 

Alternativement, exécutez la commande mysqladmin suivante pour trouver la disponibilité du serveur MySQL.

$ sudo mysqladmin version -p 
Trouver la disponibilité de MySQL Server

D'autres solutions incluent, mais sans s'y limiter Mysql serveur et activer le débogage, puis recommencer le service. Vous pouvez essayer de faire un cas 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 statut ou $ sudo mysqladmin -i 5 -r statut 

L'essentiel: déterminer ce qui cause un problème ou une erreur

Bien que nous ayons regardé certains communs Mysql Problèmes et erreurs et a également fourni des moyens de dépanner et de les résoudre, la chose la plus importante avec le diagnostic d'une erreur est de comprendre ce que cela signifie (en termes de ce qui le cause).

Alors, comment pouvez-vous déterminer cela? Les points suivants vous guideront sur la façon de déterminer ce qui cause exactement un 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 parvient pas, vérifiez son statut à l'aide de SystemCTL ou utilisez le Journetctl (avec le -xe Flag) Commande sous Systemd pour examiner le problème.
  3. Vous pouvez également examiner le fichier journal système tel que / var / log / messages ou similaire pour des raisons de votre problème.
  4. Essayez d'utiliser des outils tels que MyTop, Glances, Top, PS ou HTOP pour vérifier quel programme prend tout CPU ou verrouille la machine ou pour inspecter si vous êtes à court de mémoire, d'espace disque, de descripteurs de fichiers ou d'une autre ressource importante.
  5. En supposant que le problème est un processus de fuite, vous pouvez toujours essayer de le tuer (en utilisant l'utilitaire PKILL ou KILL) afin que MySQL fonctionne normalement.
  6. En supposant que le mysqld Le serveur cause des problèmes, vous pouvez exécuter la commande: mysqladmin -u root ping ou Mysqladmin -u Root Listelist Pour en obtenir une réponse.
  7. Si le problème concerne votre programme client tout en essayant de vous connecter au serveur MySQL, vérifiez pourquoi il ne fonctionne pas bien, essayez d'en tirer une sortie à des fins de dépannage.

Vous aimerez peut-être également lire ces articles liés à MySQL suivants:

  1. Apprenez 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 au nouveau serveur
  4. MYTOP - Un outil utile pour surveiller les performances MySQL / MARIADB dans 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 approfondie les problèmes et les messages d'erreur courants que vous pouvez rencontrer tout en utilisant MySQL, y compris ceux dont nous avons discuté ci-dessus et plus.