Impossible de se connecter au serveur MySQL local via le socket '/var/lib/mysql/mysql.sock' (2)

255

J'obtiens l'erreur suivante lorsque j'essaie de me connecter à mysql:

Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

Existe-t-il une solution à cette erreur? Quelle pourrait en être la raison?

Atul
la source
J'ai répondu à cette question ici, veuillez vérifier le lien ci-dessous: stackoverflow.com/a/35577309/4773290
Pratik Patil

Réponses:

222

Vous connectez-vous à "localhost" ou "127.0.0.1"? J'ai remarqué que lorsque vous vous connectez à "localhost", le connecteur de socket est utilisé, mais lorsque vous vous connectez à "127.0.0.1", le connecteur TCP / IP est utilisé. Vous pouvez essayer d'utiliser "127.0.0.1" si le connecteur de socket n'est pas activé / ne fonctionne pas.

Jan Thomä
la source
27
Dans ce cas, vous devriez probablement vérifier si votre serveur MYSQL fonctionne réellement.
Jan Thomä
3
Vous pouvez également forcer l'utilisation d'une socket avec le paramètre socket (-S avec / usr / bin / mysql) et forcer TCP / IP en fournissant un port (-P avec / usr / bin / mysql.)
Kaoru
L'utilisation d'un nom de réseau complet autre que localhost a fonctionné pour moi. Assurez-vous simplement qu'il est déclaré dans le fichier «hosts» côté client.
Fabien Haddadi
2
Remarque pour les utilisateurs de cygwin: si le client cygwin mysql essaie de se connecter à un serveur mysql WAMP local par exemple, utilisez -h <nom d'hôte autre que localhost>. N'essayez pas de créer un fichier mysql.sock et de le déclarer dans le fichier my.cnf, cela ne fonctionnera pas.
Fabien Haddadi
Un mauvais nom d'hôte m'a donné exactement la même erreur. La lecture du /etc/hostsfichier dans mon conteneur Docker m'a montré que le nom d'hôte MySql était mysql. L'utilisation de ce même nom d'hôte dans ma configuration de connexion a résolu le problème.
Stephane
188

Assurez-vous que votre service mysql fonctionne

service mysqld start

Ensuite, essayez l'une des opérations suivantes:

(si vous n'avez pas défini de mot de passe pour mysql)

mysql -u root

si vous avez déjà défini un mot de passe

mysql -u root -p
Haja Peer Mohamed H
la source
5
sur les nouvelles versions de debian: service mariadb startparce que mariadb.org/debian-9-released-mariadb-mysql-variant
Zahra
2
Donnez à ce gars une médaille.
Siraj Alam
Ce fut la réponse pour moi. Puisque j'utilise mariadb, la solution était d'exécuter ce qui suit: "sudo systemctl start mariadb". Tout allait bien après ça.
mohsen
Donnez une médaille à @Zahra
Ahmed C
28

Si votre fichier my.cnf (généralement dans le dossier etc) est correctement configuré avec

socket=/var/lib/mysql/mysql.sock

vous pouvez vérifier si mysql fonctionne avec la commande suivante:

mysqladmin -u root -p status

essayez de modifier votre autorisation sur le dossier mysql. Si vous travaillez localement, vous pouvez essayer:

sudo chmod -R 777 /var/lib/mysql/

qui l'a résolu pour moi

marimaf
la source
Cela fonctionne aussi pour moi, mais après avoir mis à niveau vers la dernière version, ce problème apparaît, puis-je savoir pourquoi cela se produit?
Ben
sudo chmod -R 777 / var / lib / mysql / A travaillé pour moi avec un problème que j'ai eu lors du démarrage d'un conteneur docker mysql
user3152459
23

Le serveur MySQL n'est pas en cours d'exécution, ou ce n'est pas l'emplacement de son fichier socket (consultez my.cnf).

Dan Grossman
la source
J'ai eu le problème décrit ci-dessus et c'était le problème. Merci.
oshirowanen
3
Où serait-ce pour l'installation de Homebrew?
pal4life
19

N'existe probablement mysql.sockpas en /var/lib/mysql/.

Si vous trouvez le même fichier dans un autre emplacement, créez un lien symbolique:

Par exemple: je l'ai dans /data/mysql_datadir/mysql.sock

Basculez l'utilisateur vers mysql et exécutez comme mentionné ci-dessous:

su mysql

ln -s /data/mysql_datadir/mysql.sock /var/lib/mysql/mysql.sock

Cela a résolu mon problème

sreddy
la source
renommer mysql.sock en quelque chose d'autre, puis redémarrer mysqld ("service mysqld restart"), puis renommer autre chose en mysql.sock a fonctionné pour moi. Une légère variation sur cette réponse, alors merci.
Analyse floue
Cette réponse peut aider à localiser le mysql.sockfichier
Nobita
15

Si vous êtes sur un RHEL récent, vous devrez peut-être démarrer mariadb (un db mysql open source) au lieu du db mysql:

yum remove mysql
yum -y install mariadb-server mariadb
service mariadb start

Vous devriez alors pouvoir accéder à mysql de la manière habituelle:

mysql -u root -p
duhaime
la source
Pour info, cela fonctionne aussi pour CentOS 8.1. Après l'installation mariadb-serveret mariadb, n'oubliez pas d'exécuter mysql_secure_installationpour nettoyer certains paramètres dangereux par défaut.
Dio Phung
13

Dans mon cas, j'ai déplacé le fichier socket vers un autre emplacement à l'intérieur /etc/my.cnf de /var/lib/mysql/mysql.sockvers/tmp/mysql.sock

Même après avoir redémarré le service mysqld, je vois toujours le message d'erreur lorsque j'essaie de me connecter. ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

Le problème vient de la façon dont le client est configuré. L'exécution des diagnostics affiche en fait le chemin de socket correct. par exempleps aux | grep mysqld

Travaux:

mysql -uroot -p -h127.0.0.1
mysql -uroot -p --socket=/tmp/mysql.sock

Ne marche pas:

mysql -uroot -p
mysql -uroot -p -hlocalhost

Vous pouvez résoudre ce problème en ajoutant la même ligne de socket dans la [client]section à l'intérieur de la configuration mysql.

Dejan
la source
13

Modifiez simplement /etc/my.cnf Ajouter les lignes suivantes àmy.cnf

[mysqld]

socket=/var/lib/mysql/mysql.sock 

[client]

socket=/var/lib/mysql/mysql.sock

Redémarrez mysql et reconnectez-vous

mysql -u utilisateur -p base de données de mots de passe -h hôte;

minhas23
la source
La seule bonne réponse. Je me demande pourquoi il n'a pas assez de votes positifs.
CentAu
11

Vérifiez si votre service mysqld fonctionne ou non, sinon, lancez le service.

Si votre problème n'est pas résolu, recherchez /etc/my.cnfet modifiez comme suit, où vous voyez une ligne commençant par socket. Faites une sauvegarde de ce fichier avant de faire cette mise à jour.

socket=/var/lib/mysql/mysql.sock  

Changer pour

socket=/opt/lampp/var/mysql/mysql.sock -u root
vkGunasekaran
la source
1
Salut Sekar, j'ai entré "find / -name my.cnf", et j'ai obtenu deux emplacements. 1) /opt/lampp/etc/my.cnf 2) /etc/mysql/my.cnf. Alors, lequel utiliser .. J'ai posé la question ici .. stackoverflow.com/questions/32437796/…
Nana Partykar
7

MariaDB, un fork de MySQL développé par la communauté, est devenu l'implémentation par défaut de MySQL dans de nombreuses distributions.

Vous devez donc commencer,

$ sudo systemctl start mariadb

Si cela échoue, essayez plutôt,

$ sudo systemctl start mysqld

Ensuite, pour démarrer mysql,

$ mysql -u root -p

À ce jour, dans Fedora, le package est nommé mariadb Et dans Ubuntu, il est appelémariadb-server .

Vous devrez donc peut-être l'installer s'il n'est pas déjà installé sur votre système.

Gayan Weerakutti
la source
7

Assurez-vous qu'il vous reste suffisamment d'espace /var . Si le démon Mysql n'est pas en mesure d'écrire des informations supplémentaires sur le lecteur, le serveur mysql ne démarre pas et cela conduit à l'erreurCan't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

Pensez à utiliser

expire_logs_days = 10
max_binlog_size = 100M

Cela vous aidera à réduire l'utilisation du disque.

Karthik
la source
Merci, j'utilise mysql sur oracle virtualbox et quand j'ai fait un vidage de mon bd, j'ai manqué d'espace et je n'ai pas pu démarrer le serveur mysql, quand j'ai supprimé le fichier de vidage j'ai pu redémarrer le serveur mysql.
JayCee
1
Cela l'a résolu pour moi. J'ai défini innodb_buffer_pool_size à une valeur très élevée pour les environnements de production et cela a fait planter mysql sur ma machine virtuelle.
Benjamin Brizzi
1
J'ai eu ce problème lors de l' utilisation phabricator et la solution a été de changer innodb_buffer_pool_sizedans my.cnf. Le mettre à une petite valeur comme innodb_buffer_pool_size = 50Mest un bon test pour écarter cette hypothèse;)
Yercalamarino
C'était le problème, j'ai tout vérifié sauf l'espace disque. Libéré de l'espace depuis / var, il est revenu!
Nadjib Mami
5

Voici ce qui a fonctionné pour moi:

ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock
service mysqld restart
Utilisateur
la source
4

Veuillez vérifier si un autre service mysql est en cours d'exécution.

Kishore Relangi
la source
4

Assurez-vous d'avoir démarré le serveur:

mysql.server start

Connectez-vous ensuite avec l'utilisateur root:

mysql -uroot
Deniz Ozger
la source
3

Si votre mysql fonctionnait précédemment et s'est arrêté soudainement, "redémarrez" le serveur.

Était confronté à ce problème sur mon CentOS VPS .->

Recevait constamment

Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock'(2)

J'ai essayé toutes les techniques, enfin le redémarrage du serveur a résolu les problèmes ->

shutdown -r now

J'espère que cela t'aides !!

Shashank Agarwal
la source
3

essayer

echo 0 > /selinux/enforce
dvin
la source
3

si vous changez des fichiers dans / var / lib / mysql [comme copier ou remplacer cela], vous devez définir le propriétaire des fichiers sur mysql c'est si important si le redémarrage de mariadb.service a échoué

chown -R mysql: mysql / var / lib / mysql / *

chmod -R 700 / var / lib / mysql / *

Mohsen Beiranvand
la source
2

Entrez d'abord "service mysqld start" et connectez-vous

hPrasad
la source
Qu'est-ce que tu veux dire? veuillez lire la FAQ avant de poser une question ici
Freak
Il a été répondu avec succès à cette question il y a trois ans. Cette réponse exacte a été donnée plus complètement l'année dernière.
Cairnarvon
2

Veuillez vous assurer d'avoir installé correctement le serveur MySQL, j'ai rencontré cette erreur plusieurs fois et je pense que c'est compliqué à déboguer à partir du socket, je veux dire qu'il pourrait être plus facile de le réinstaller.

Si vous utilisez CentOS 7, voici la bonne façon de l'installer:

Tout d'abord, ajoutez la source de la communauté mysql
yum install http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm

Ensuite, vous pouvez l'installer en yum install mysql-community-server

Démarrez-le avec systemctl: systemctl start mysqld

Zernel
la source
1

Mon problème était que j'avais installé mysql avec succès et cela fonctionnait bien.

Mais un jour, la même erreur s'est produite.

Impossible de se connecter au serveur MySQL local via le socket '/var/lib/mysql/mysql.sock' (2)

Et aucun fichier mysql.sock n'existait.

Cette sollution a résolu mon problème et mysql était de nouveau opérationnel:

Connectez-vous en tant que root:

sudo su -

Courir:

systemctl stop mysqld.service
systemctl start mysqld.service
systemctl enable mysqld.service

Testez en tant que root:

mysql -u root -p

mysql devrait maintenant être opérationnel.

J'espère que cela peut aussi aider quelqu'un d'autre.

bharald
la source
1

Notez que tandis que mysql lit les informations de l'emplacement du fichier socket à partir du fichier my.cnf, le programme mysql_secure_installation semble parfois ne pas le faire correctement.

Donc, si vous êtes comme moi et que vous mélangez les choses au moment de l'installation, vous pourriez vous retrouver dans la situation où vous pouvez vous connecter à la base de données avec mysql très bien, mais la chose ne peut pas être sécurisée (ne pas utiliser ce script de toute façon).

Pour résoudre ce problème, la suggestion de sreddy fonctionne bien: créez un lien logiciel d'où le script s'attendrait à ce que le socket se trouve réellement. Exemple:

ln -s /tmp/mysql.sock /var/lib/mysql/mysql.sock

(J'utilise / tmp / comme emplacement par défaut pour les sockets)

Ellert van Koperen
la source
1

Cela a fonctionné pour moi avec les changements suivants

Quel que soit le chemin pour socket est mentionné dans [mysqld] et identique dans [client] dans my.cnf et redémarrez mysql

[mysqld] socket = / var / lib / mysql / mysql.sock

[client] socket = / var / lib / mysql / mysql.sock

minhas23
la source
1

Une façon de reproduire cette erreur: si vous vouliez vous connecter à un serveur étranger mais vous connecter au serveur local inexistant:

eric@dev ~ $ mysql -u dev -p
Enter password:
ERROR 2002 (HY000): Can't connect to local MySQL server through 
socket '/var/lib/mysql/mysql.sock' (2)
eric@dev ~ $

Vous devez donc spécifier l'hôte comme ceci:

eric@dev ~ $ mysql --host=yourdb.yourserver.com -u dev -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 235
Server version: 5.6.19 MySQL Community Server (GPL)

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+-------------------------+
| Database                |
+-------------------------+
| information_schema      |
| mysql                   |
| performance_schema      |
+-------------------------+
3 rows in set (0.00 sec)

mysql> exit
Bye
eric@dev ~ $
Eric Leschinski
la source
1

Cela peut être une suggestion stupide, mais assurez-vous à 100% que votre base de données est toujours hébergée chez localhost. Par exemple, si un administrateur réseau a choisi (ou changé pour) l'hébergement Amazon DB, vous aurez besoin de ce nom d'hôte à la place!

Le seul et unique ChemistryBlob
la source
J'utilise le fournisseur d'hébergement 1and1 et j'ai obtenu cette erreur après ssh-ing à l'hôte. Le correctif consistait simplement à fournir le nom d'hôte "mysql -u dbo70123521 -p --host db70313321.db.1and1.com db703133520"
rob
1

Dans mon cas, j'importais une nouvelle base de données et je n'ai pas pu me reconnecter par la suite. Finalement, j'ai réalisé que c'était un problème d'espace.

Vous pouvez donc supprimer la dernière base de données et étendre votre disque dur ou ce que j'ai fait, restauré un instantané de ma machine virtuelle.

Juste au cas où quelqu'un pense que c'est utile

Evan
la source
0

a rencontré ce problème lors de la tentative de connexion de mysql dans le client SSH, a trouvé que l'ajout du chemin de socket à la commande était utile lors du basculement entre les sockets.

> mysql -u user -p --socket=/path/to/mysql5143.sock
Jaak Kütt
la source
0

Il s'agit d'un problème si vous manquez d'espace disque. La solution consiste à libérer de l'espace sur le disque dur.

Veuillez lire la suite pour avoir l'explication:

Si vous utilisez MySQL sous LINUX, vérifiez l'espace libre du disque dur avec la commande disk free:

 df 

si vous obtenez quelque chose comme ça:

Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda2              5162828   4902260         0 100% /
udev                    156676        84    156592   1% /dev
/dev/sda3              3107124     70844   2878444   3% /home

Alors c'est le problème et maintenant vous avez la solution!

Étant donné que mysql.sock veut être créé dans le dossier mysql qui se trouve presque toujours sous le dossier racine, il n'a pas pu y parvenir par manque d'espace.

Si vous donnez périodiquement la commande ls sous le répertoire mysql (à openSUSE 11.1 se trouve dans / var / lib / mysql) vous obtiendrez quelque chose comme:

hostname:/var/lib/mysql #
.protected  IT     files        ibdata1             mysqld.log  systemtemp
.tmp        NEWS   greekDB      mysql               mysqld.pid  test
ARXEIO      TEMP1  ib_logfile0  mysql.sock          polis
DATING      deisi  ib_logfile1  mysql_upgrade_info  restore

Le fichier mysql.sock apparaissant et disparaissant souvent (vous devez essayer d'attribuer avec le ls pour frapper une instance avec le fichier mysql.sock sur le dossier).

Cela est dû au manque d'espace disque.

J'espère que j'aiderai certaines personnes !!!! Merci!

c.chasapis
la source
0

J'ai dû désactiver explicit_defaults_for_timestampmon.cnf.

powtac
la source
0

Essayez les 2, 3 premières solutions. L'erreur est toujours popup et si vous ne trouvez pas/var/lib/mysql/mysql.sock

find /var/ -name mysql.sock

Vérifiez l'espace disponible dans / var /

df

Si le répertoire est plein, supprimez certains fichiers / répertoires inutiles

rm /var/cache/*

Votre problème sera probablement trié maintenant.

Sadee
la source
0

Si vous êtes dans le shell de sf.net , essayez:

mysql --host=mysql-{LETTER} --user={LETTER}{GROUP ID}admin -p

Modifiez {LETTRE} et {GROUP ID} comme indiqué dans votre base de données MySQL du profil d'administrateur de projet.

Chetabahana
la source