Comment résoudre les erreurs de socket dans MySQL

Note

MySQL gère les connexions au serveur de base de données via l'utilisation d'unsocket file, un type spécial de fichier qui facilite les communications entre différents processus. Le fichier socket du serveur MySQL est nommémysqld.sock et sur les systèmes Ubuntu, il est généralement stocké dans le répertoire/var/run/mysqld/. Ce fichier est créé automatiquement par le service MySQL.

Parfois, des modifications apportées à votre système ou à votre configuration MySQL peuvent empêcher MySQL de lire le fichier socket, ce qui vous empêche d'accéder à vos bases de données. L'erreur de socket la plus commune ressemble à ceci:

OutputERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

Il y a plusieurs raisons pour lesquelles cette erreur peut se produire et quelques moyens potentiels pour la résoudre.

Une cause fréquente de cette erreur est que le service MySQL est arrêté ou n’a pas commencé au début, ce qui signifie qu’il n’a pas pu créer le fichier de socket en premier lieu. Pour savoir si c'est la raison pour laquelle vous voyez cette erreur, essayez de démarrer le service avecsystemctl:

sudo systemctl start mysql

Ensuite, essayez à nouveau d'accéder à l'invite MySQL. Si l'erreur de socket persiste, vérifiez à nouveau l'emplacement où votre installation MySQL recherche le fichier de socket. Ces informations se trouvent dans le fichiermysqld.cnf:

sudo nano /etc/mysql/mysql.conf.d/mysql.cnf

Recherchez le paramètresocket dans la section[mysqld] de ce fichier. Il ressemblera à ceci:

/etc/mysql/mysql.conf.d/mysqld.cnf

. . .
[mysqld]
user            = mysql
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
port            = 3306
. . .

Fermez ce fichier, puis assurez-vous que le fichiermysqld.sock existe en exécutant une commandels sur le répertoire où MySQL s'attend à le trouver:

ls -a /var/run/mysqld/

Si le fichier de socket existe, vous le verrez dans le résultat de cette commande:

Output.  ..  mysqld.pid  mysqld.sock  mysqld.sock.lock

Si le fichier n'existe pas, la raison peut en être que MySQL essaie de le créer, mais ne dispose pas des autorisations nécessaires pour le faire. Vous pouvez vous assurer que les autorisations appropriées sont en place en changeant la propriété de l'annuaire en l'utilisateur et le groupemysql:

sudo chown mysql:mysql /var/run/mysqld/

Assurez-vous ensuite que l'utilisateurmysql dispose des autorisations appropriées sur le répertoire. Les définir sur775 fonctionnera dans la plupart des cas:

sudo chmod -R 755 /var/run/mysqld/

Enfin, redémarrez le service MySQL afin qu’il puisse tenter de créer à nouveau le fichier de socket:

sudo systemctl restart mysql

Ensuite, essayez à nouveau d'accéder à l'invite MySQL. Si vous rencontrez toujours une erreur de socket, il existe probablement un problème plus grave avec votre instance MySQL. Dans ce cas, vous devez consulter le journal des erreurs pour voir s’il peut fournir des indices.

Related