Mysql
 sql >> Base de données >  >> RDS >> Mysql

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 largement utilisé (RDMS ) appartenant à Oracle . Au fil des ans, il a été le choix par défaut pour les applications Web et reste toujours populaire par rapport aux autres moteurs de base de données.

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 propulsé 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écrirons comment déterminer les causes des problèmes et ce qu'il faut faire pour les résoudre.

1. Impossible de se connecter au serveur MySQL local

L'une des erreurs courantes de connexion client-serveur 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'il n'y a pas de MySQL serveur (mysqld) en cours d'exécution sur le système hôte ou que vous avez spécifié un mauvais nom de fichier socket Unix ou TCP/IP port lors de la tentative de connexion au serveur.

Assurez-vous que le serveur est en cours d'exécution en vérifiant un processus nommé mysqld sur votre hôte de 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, 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 le MySQL état du service, utilisez la commande suivante.

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

À partir de la sortie de la commande ci-dessus, le MySQL service a échoué. Dans ce 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 fonctionne 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 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'il existe un MySQL serveur 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 susceptible 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, cependant, vous essayez de vous connecter en utilisant un TCP/IP port, canal nommé ou fichier de 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 de nom d'utilisateur et le ou les hôtes clients à partir desquels l'utilisateur peut se connecter au serveur. En outre, un compte peut également disposer d'informations d'authentification telles qu'un mot de passe.

Bien qu'il existe de nombreuses causes différentes de "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. Il indique que nom d'utilisateur spécifié dans la connexion n'a pas les privilèges d'accès à 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 d'un compte donné en exécutant la commande SHOW GRANTS commande comme indiqué.

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

Vous pouvez accorder des privilèges à un utilisateur particulier sur une base de données spécifique à 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, 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. Perte de connexion au serveur MySQL

Vous pouvez rencontrer cette erreur pour l'une des raisons suivantes :mauvaise connectivité réseau , délai de connexion ou un problème avec BLOB des valeurs supérieures à 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.

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

[mysqld]
connect_timeout=100
max_allowed_packet=500M

Si MySQL le fichier de configuration 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 MySQL le client rencontre le message "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 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/my.cnf fichier de configuration.

[mysqld]
max_connections=1000

6. Mémoire MySQL insuffisante

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

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

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

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 de meilleures performances.

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

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

7. MySQL n'arrête pas de planter

Si vous rencontrez ce problème, vous devriez essayer de savoir si le problème est que le MySQL serveur meurt ou si c'est le client avec 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, mais sans s'y limiter, l'arrêt de MySQL serveur et en activant le débogage, puis redémarrez le service. Vous pouvez essayer de créer 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 de 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 ce qui cause un problème ou une erreur

Bien que nous ayons examiné certains éléments MySQL courants problèmes et erreurs et a é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 que cela signifie (en termes de 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 démarre pas, vérifiez son état à l'aide de systemctl ou utilisez le journetctl (avec le -xe flag) 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 les raisons de votre problème.
  4. Essayez d'utiliser des outils tels que Mytop, regards, 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 autres. autre ressource importante.
  5. En supposant que le problème est un processus incontrôlable, vous pouvez toujours essayer de le tuer (à l'aide de l'utilitaire pkill ou kill) afin que MySQL fonctionne normalement.
  6. En supposant que mysqld serveur pose des problèmes, vous pouvez exécuter la commande :mysqladmin -u root ping ou mysqladmin -u root processlist pour obtenir une réponse de sa part.
  7. Si le problème concerne votre programme client lors de la tentative de connexion 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 ces articles liés à 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 de MySQL/MariaDB sous Linux
  5. 12 bonnes 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 plus encore.