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?
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?
Réponses:
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.
/etc/hosts
fichier 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.
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
service mariadb start
parce que mariadb.org/debian-9-released-mariadb-mysql-variant
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
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).
N'existe probablement mysql.sock
pas 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
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
mariadb-server
et mariadb
, n'oubliez pas d'exécuter mysql_secure_installation
pour nettoyer certains paramètres dangereux par défaut.
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.sock
vers/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.
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;
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.cnf
et 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
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.
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.
innodb_buffer_pool_size
dans my.cnf
. Le mettre à une petite valeur comme innodb_buffer_pool_size = 50M
est un bon test pour écarter cette hypothèse;)
Voici ce qui a fonctionné pour moi:
ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock
service mysqld restart
Veuillez vérifier si un autre service mysql est en cours d'exécution.
Assurez-vous d'avoir démarré le serveur:
mysql.server start
Connectez-vous ensuite avec l'utilisateur root:
mysql -uroot
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 !!
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 / *
Entrez d'abord "service mysqld start" et connectez-vous
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
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.
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)
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 ~ $
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!
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
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!
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.
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.