web-dev-qa-db-fra.com

erreur: 'Impossible de se connecter au serveur MySQL local via le socket' /var/run/mysqld/mysqld.sock '(2)' - Manquant /var/run/mysqld/mysqld.sock

Mon problème a commencé avec le fait que je ne puisse plus me connecter en tant que root sur mon installation mysql. J'essayais d'exécuter mysql sans mot de passe activé ... mais chaque fois que j'exécutais la commande

# mysqld_safe --skip-grant-tables &

Je ne récupérerais jamais l'invite. J'essayais de suivre ces instructions pour récupérer le mot de passe .

L'écran ressemble à ceci:

root@jj-SFF-PC:/usr/bin# mysqld_safe --skip-grant-tables
120816 11:40:53 mysqld_safe Logging to syslog.
120816 11:40:53 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql

et je ne reçois pas d'invite pour commencer à taper les commandes SQL pour réinitialiser le mot de passe.

Quand je le tue en appuyant sur CTRL + C, Je reçois le message suivant:

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

Check that mysqld is running and that the socket: '/var/run/mysqld/mysqld.sock' exists!

Si je réessaie la commande et la laisse suffisamment longue, la série de messages suivante est générée:

root@jj-SFF-PC:/run/mysqld# 120816 13:15:02 mysqld_safe Logging to syslog.
120816 13:15:02 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
120816 13:16:42 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended

[1]+  Done                    mysqld_safe --skip-grant-tables
root@jj-SFF-PC:/run/mysqld#

Mais alors si j'essaie de me connecter en tant que root en faisant:

# mysql -u root

Je reçois le message d'erreur suivant:

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

J'ai vérifié et le fichier /var/run/mysqld/mysqld.sock n'existe pas. Le dossier fait, mais pas le fichier.

De plus, je ne sais pas si cela aide ou non, mais j'ai lancé find / -name mysqld et il est venu avec:

/var/run/mysqld - folder
/usr/sbin/mysqld - file
/run/mysqld - folder

Je suis nouveau sur Linux et MySQL, donc je ne sais pas si c'est normal ou non. Mais j'inclus cette information au cas où cela aiderait.

J'ai finalement décidé de désinstaller et de réinstaller mysql.

apt-get remove mysql-server
apt-get remove mysql-client
apt-get remove mysql-common
apt-get remove phpmyadmin

Après avoir réinstallé tous les paquets à nouveau dans le même ordre que ci-dessus, lors de l'installation de phpmyadmin, j'ai eu la même erreur:

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

J'ai donc essayé à nouveau de désinstaller/réinstaller. Cette fois, après avoir désinstallé les paquetages, j'ai également renommé manuellement tous les fichiers et répertoires mysql en mysql.bad à leurs emplacements respectifs.

/var/lib/mysql 
/var/lib/mysql/mysql
/var/log/mysql
/usr/lib/Perl5/DBD/mysql
/usr/lib/Perl5/auto/DBD/mysql
/usr/lib/mysql
/usr/bin/mysql
/usr/share/mysql
/usr/share/dbconfig-common/internal/mysql
/etc/init.d/mysql
/etc/apparmor.d/abstractions/mysql
/etc/mysql

Ensuite, j'ai essayé de réinstaller mysql-server et mysql-client. Mais j'ai remarqué que cela ne me demande pas un mot de passe. N'est-il pas supposé demander un mot de passe administrateur?

262
dot

Pour trouver tous les fichiers de socket sur votre système, exécutez:

Sudo find / -type s

Le système de mon serveur Mysql avait le socket ouvert à /var/lib/mysql/mysql.sock

Une fois que vous avez trouvé où ouvrir le socket, ajoutez ou modifiez la ligne dans votre fichier /etc/my.cnf avec le chemin d'accès au fichier de socket:

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

Parfois, le script de démarrage du système qui a lancé l'exécutable de ligne de commande spécifie un indicateur --socket=path. Cet indicateur peut remplacer l’emplacement my.cnf et il en résulterait qu’un socket n’est pas trouvé là où le fichier my.cnf indique qu’il devrait l'être. Ensuite, lorsque vous essayez d’exécuter le client en ligne de commande mysql, il lit le fichier my.cnf pour rechercher le socket, mais ne le trouvera pas car il diffère de celui où le serveur en a créé un. Donc, à moins que vous ne vous préoccupiez de l'emplacement du socket, il suffit de changer le fichier my.cnf pour qu'il corresponde. 

Ensuite, arrêtez le processus mysqld. La façon dont vous faites cela variera selon le système.

Si vous êtes un super utilisateur du système Linux, essayez l’une des méthodes suivantes si vous ne connaissez pas la méthode spécifique utilisée par votre configuration Mysql:

  • service mysqld stop
  • /etc/init.d/mysqld stop
  • mysqladmin -u root -p shutdown
  • Certains systèmes ne sont pas configurés pour avoir un moyen élégant d’arrêter mysql (ou pour une raison quelconque, mysql ne répond pas) et vous pouvez forcer mettre fin à mysql avec soit:
    • Une étape: pkill -9 mysqld
    • Deux étapes (moins préféré):
      • Trouvez l'identifiant du processus de mysql avec pgrep mysql ou ps aux | grep mysql | grep -v grep
      • En supposant que l'ID de processus est 4969, terminer par kill -9 4969

Cela fait, vous voudrez peut-être rechercher un fichier pid dans /var/run/mysqld/ et le supprimer.

Assurez-vous que les permissions sur votre socket sont telles que tout utilisateur que mysqld est en train de lancer puisse le lire/écrire. Un test simple consiste à l’ouvrir en lecture/écriture et à voir s’il fonctionne toujours:

chmod 777 /var/run/mysqld/mysqld.sock

Si le problème est résolu, vous pouvez personnaliser les autorisations et la propriété du socket en fonction de vos paramètres de sécurité. 

De plus, le répertoire dans lequel se trouve le socket doit être accessible par l'utilisateur qui exécute le processus mysqld.

159
Ray

Essayez cette commande,

Sudo service mysql start
199
Joe Cheng

Cette erreur est due à plusieurs installations de mysql. Exécutez la commande: 

ps -A|grep mysql

Tuez le processus en utilisant:

Sudo pkill mysql

puis exécutez la commande:

ps -A|grep mysqld

Aussi, tuez ce processus en lançant:

Sudo pkill mysqld

Maintenant que vous êtes complètement configuré, exécutez les commandes suivantes:

service mysql restart
mysql -u root -p

J'ai de nouveau très bien travaillé avec MySQL

97
Hammad Raza

La solution est beaucoup plus facile. 

  1. Tout d’abord, vous devez localiser (dans Terminal avec "Sudo find/-type s") l’emplacement de votre fichier mysql.sock. Dans mon cas c'était en /opt/lampp/var/mysql/mysql.sock 
  2. Allumer le terminal et émettre Sudo Nautilus
    Ceci démarre votre gestionnaire de fichiers avec les privilèges de super utilisateur 
  3. À partir de Nautilus, accédez à l'emplacement de votre fichier mysql.sock
  4. Faites un clic droit sur le fichier et sélectionnez Créer un lien
  5. Renommez le fichier de liaison en mysqld.sock puis cliquez sur le fichier avec le bouton droit de la souris et Couper le
  6. Allez à /var/run et créez un dossier appelé mysqld et entrez-le
  7. Maintenant, faites un clic droit et Coller le fichier de lien
  8. Voila! Vous aurez maintenant un fichier mysqld.sock à /var/run/mysqld/mysqld.sock :)
35
Ioan Stef

Il suffit de démarrer le service MySQL après l’installation:

Pour Ubuntu:

Sudo service mysql start;

Pour CentOS ou RHEL:

Sudo service mysqld start;
22
Pratik Patil

Ok, il suffit de copier et coller ces codes: Ceci devrait être fait dans le terminal, à l'intérieur d'un serveur, lorsque votre base de données mysql n'est pas correctement installée, et lorsque vous obtenez cette erreur: "Impossible de se connecter au serveur MySQL local via socket" var/run/mysqld/mysqld.sock '(2)'.

Stop MySql

Sudo /etc/init.d/mysqld stop

Redémarrez ou démarrez

Sudo /etc/init.d/mysqld restart or Sudo /etc/init.d/mysqld start

Faites un lien comme celui-ci et donnez-le au système

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

Exécutez une installation sécurisée qui guide tout le processus à suivre pour configurer mysql

/usr/bin/mysql_secure_installation
11
coolcool1994

Il existe un bogue sur Ubuntu avec MySQL 5.6 et 5.7 où var/run/mysqld/ disparaîtrait à chaque fois que le service MySQL s’arrête ou est redémarré. Cela empêche l'exécution de MySQL. Vous avez trouvé cette solution de contournement, qui n'est pas parfaite, mais au moins, elle s'exécute après l'arrêt/le redémarrage:

mkdir /var/run/mysqld/
chown mysqld /var/run/mysqld/
10
motorbaby

J'ai fait face à la même erreur et j'ai constaté que c'était dû à la mise à niveau des paquets. Donc, après avoir redémarré mon système, j'ai résolu l'erreur.

Je pense qu'en raison de la mise à jour des bibliothèques/paquets SQL, une erreur s'est produite. Essayez ceci si vous effectuez une mise à niveau :)

9
Taimoor Changaiz

Il y a plusieurs raisons à ce problème, mais parfois il suffit de redémarrer le serveur mysql pour résoudre le problème 

Sudo service mysql restart
7
Leopathu

* Erreur: 'Impossible de se connecter au serveur MySQL local via le socket' /var/run/mysqld/mysqld.sock '(2)'

solutions

enfin désinstaller et réinstaller mysql. **

  • Sudo apt-get supprimer mysql-server
  • Sudo apt-get supprimer mysql-client
  • Sudo apt-get remove mysql-common
  • Sudo apt-get remove phpmyadmin

puis installez à nouveau par 

  • Sudo apt-get installer mysql-server-5.6

Après cette opération, 164 Mo d’espace disque supplémentaire seront utilisés.

  • Voulez-vous continuer? [Y/n] Y appuyez sur YES pour une installation complète

......

  • Enfin, vous obtiendrez ces lignes ....

    Mise en place de libhtml-template-Perl (2.95-1) ...

    Configuration de mysql-common-5.6 (5.6.16-1 ~ exp1) ... Traitement des déclencheurs pour libc-bin (2.19-0ubuntu6) Traitement des déclencheurs pour ureadahead (0.100.0-16) ...

  • Et alors

    root @ ubuntu1404: ~ # mysql -u root -p (pour chaque mot de passe utilisé en premier par u devrait être utilisé)

  • Entrer le mot de passe:

  • Remarque: le mot de passe entré doit être identique à l'heure d'installation Mot de passe de mysql (comme .root, system, admin, rahul etc ...)

    Puis tapez

  • USE rahul_db (nom de la base de données);

Merci.**

5

La réponse de l'étape de chargement de l'utilisateur a fonctionné pour moi . Il est parfois nécessaire de modifier le fichier dans /etc/mysql/my.cnf

[client]
password = your_mysql_root_password
port  = 3306
Host  = 127.0.0.1
socket  = /var/lib/mysql/mysql.sock
5
user3002884

Utiliser XAMPP sur Ubuntu:

  1. Créez un dossier appelé mysqld inside/var/run directory. Vous pouvez accomplir cela en utilisant la commande Sudo mkdir /var/run/mysqld.

  2. Créez un lien symbolique vers mysql.sock fichier créé par le serveur XAMPP lors de son démarrage. Vous pouvez utiliser la commande Sudo ln -s /opt/lampp/var/mysql/mysql.sock /var/run/mysqld/mysqld.sock.

Remarque: Le fichier mysql.sock est créé au démarrage du serveur et supprimé à l’arrêt du serveur. Le lien que vous avez créé peut parfois sembler rompu, mais il doit fonctionner tant que vous avez a démarré le serveur en utilisant Sudo /opt/lampp/lampp start ou tout autre moyen.

  1. Démarrez le serveur s'il n'est pas déjà en cours d'exécution et essayez à nouveau d'exécuter votre programme.

Bonne chance! J'espère que vous vous en tirerez cette fois.

3
Robert Odoch

Peut-être que quelqu'un face à ce problème. J'utilise Mysql Workbench on Ubuntu 14 et j'ai cette erreur.

mysqldump: Got error: 2002: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) when trying to connect

Recherchez votre fichier de socket en exécutant Sudo find / -type s, dans mon cas, il s'agissait de /run/mysqld/mysqld.sock

Donc, je viens de créer un lien vers ce fichier dans le répertoire tmp.

Sudo ln -s /var/run/mysqld/mysqld.sock /tmp/mysql.sock
3
Bilal

Cela a déjà été mentionné plusieurs fois, mais cela a immédiatement fonctionné pour moi: 

service mysql redémarrer

3
Jack BeNimble

vous pouvez trouver mysqld.sock dans /var/run/mysqld si vous avez déjà installé mysql-server par Sudo apt-get install mysql-server

3
spencer

Je viens d'avoir ce problème sur Ubuntu 14.10

Le mysql-server n'est plus installé (il a en quelque sorte été supprimé), mais je ne pouvais pas simplement l'installer car il y avait des paquets cassés et des problèmes/conflits de dépendance.

En fin de compte, j'ai dû réinstaller mysql

Sudo apt-get remove mysql-client
Sudo apt-get install mysql-server
2
Dew
2
Pranay Aryal

Dans mon cas, deux processus mysqld étaient en cours d'exécution .. Ont tué le processus facultatif en utilisant Pkill -9 mysqld

2
amindri

Je pense que votre serveur MySQL n'a pas encore démarré. Donc, démarrez le serveur en utilisant l’une des commandes suivantes.

#services mysql start

ou

#/etc/init.d/mysql start
2
Susampath

Si vous avez beaucoup de bases de données et de tables sur votre système et que vous avez défini innodb_file_per_table dans my.cnf, votre serveur mysql risque de manquer d’objets/fichiers ouverts (ou plutôt des descripteurs de ces objets). un nouveau nombre maximum avec

open-files-limit = 2048

et redémarrez mysql . Cette approche peut aider lorsque le socket n’est pas créé du tout, mais ce n’est peut-être pas le vrai problème, il existe un problème sous-jacent.

2
knb

J'exécute MySQL sur une machine virtuelle sous Ubuntu. Donc, ce qui s'est passé est le moment où j'ai redémarré mon hôte et la machine virtuelle. L'adresse IP a changé. J'avais configuré mysql pour fonctionner sur IP 192.168.0.5 et maintenant, en raison de l'allocation dynamique d'IP, mon nouvel IP était 192.168.0.8

Si vous rencontrez le même problème, vérifiez simplement votre adresse IP avec la commande ifconfig.

Vérifiez votre liaison MySQL avec la commande cat /etc/mysql/my.cnf | grep bind-address

Si les deux adresses IP sont identiques, réinstallez votre serveur mysql

Sinon, changez votre adresse IP dans /etc/network/interfaces en utilisant nano, vi, vim ou tout ce que vous préférez.

Je préfère Sudo nano /etc/network/interfaces

et entrez les informations suivantes

auto eth0
iface eth0 inet static
address 192.168.0.5
netmask 255.255.255.0

Enregistrez le fichier d'interface, redémarrez votre interface Sudo ifdown eth0 && Sudo ifup eth0 et remplacez "eth0" par votre interface réseau

Redémarrez MySQL Sudo service mysql stop suivi de Sudo service mysql start

Si vous avez le même problème que le mien, vous êtes prêt à partir!

1
Aman Chawla

Changer Host en 127.0.0.1 a fonctionné pour moi.

Editez le fichier dans /etc/mysql/my.cnf et ajoutez la ligne mentionnée ci-dessous à la section: client

[client]
port  = 3306
Host  = 127.0.0.1
socket  = /var/lib/mysql/mysql.sock

Après que vous avez fini avec ça. Exécutez la commande suivante.

Sudo service mysql start
1
Dulith De Costa

J'ai eu le même problème avec un CentOS VPS. Si MySQL ne démarre pas ou continue à planter juste après, essayez ces étapes:

1) Recherchez le fichier my.cnf (le mien se trouvait dans /etc/my.cnf) et ajoutez la ligne suivante:

innodb_force_recovery = X

en remplaçant X par un nombre compris entre 1 et 6, en commençant par 1, puis en incrémentant si MySQL ne démarre pas. Définir sur 4, 5 ou 6 peut supprimer vos données, soyez donc prudent et lisez http://dev.mysql.com/doc/refman/5.7/en/forcing-innodb-recovery.html before.

2) Redémarrez le service MySQL. Seul SELECT fonctionnera et c'est normal à ce stade.

3) Dumpez toutes vos bases de données/schémas avec mysqldump un par un, ne compressez pas les dumps, car il vous faudrait quand même les décompresser plus tard.

4) Déplacez (ou supprimez!) Uniquement les répertoires de bd à l'intérieur de/var/lib/mysql, en conservant les fichiers individuels à la racine.

5) Arrêtez MySQL puis décommentez la ligne ajoutée en 1). Démarrez MySQL.

6) Récupérer tous les disques stockés en 3).

Bonne chance!

1
Heitor

Assurez-vous que le chemin d'accès au fichier de socket inaccessible est identique à '/var/run/mysqld/mysqld.sock', sinon changez le chemin tel que le vôtre. Arrêtez le mysqld

$ Sudo /etc/init.d/mysqld stop

Si le processus est toujours en cours d'exécution;

$ Sudo pkill -9 mysqld

Supprimez le répertoire mysql où le socket va créer. Pour moi, il n’était pas permis de le retirer, alors j’ai dû le retirer avec force.

$ Sudo mkdir -p /var/run/mysqld

Définir la propriété dans le répertoire

$ Sudo chown mysql:mysql /var/run/mysqld

Démarrer mysql

$ Sudo /etc/init.d/mysql start

Essayer de connecter mysql

$ Sudo mysql -u dbuser -p
1
Sadee

Je voudrais aussi vérifier la configuration de MySQL. Je rencontrais ce problème avec mon propre serveur, mais j’étais un peu trop pressé et j’ai mal configuré l’innodb_buffer_pool_size pour ma machine.

innodb_buffer_pool_size = 4096M

Il fonctionne généralement bien jusqu'en 2048 mais je suppose que je n'ai pas la mémoire nécessaire pour supporter 4 concerts.

J'imagine que cela pourrait également se produire avec d'autres paramètres de configuration mysql.

1
Greg

Parfois, c'est simplement que vous n'avez pas assez d'espace sur le serveur, libérez de l'espace (par exemple, en effaçant les fichiers journaux) et démarrez mysql:

/etc/init.d/mysql start

0
Prashant

J'utilise XAMPP sur Ubuntu. J'ai trouvé cette erreur lors de la connexion à la base de données via un terminal. Je le résous sans aucune configuration car le chemin du fichier de socket par défaut dans XAMPP est écrit dans "/opt/lampp/etc/my.cnf" comme suit:

[client]
#password   = your_password
port        = 3306
socket      = /opt/lampp/var/mysql/mysql.sock

maintenant vous pouvez vous connecter simplement en donnant ce paramètre de chemin de socket avec la commande mysql sur le terminal, comme:

mysql -u root --socket /opt/lampp/var/mysql/mysql.sock

et c'est fait sans aucune configuration.

Si vous ne voulez pas taper le chemin de socket à chaque fois, alors changez le chemin par défaut dans my.cnf par "/var/run/mysqld/mysqld.sock". Fournissez des autorisations et redémarrez le serveur mysql.

0
Ani

Commencez par créer dir/var/run/mysqld

avec commande:

mkdir -p /var/run/mysqld

puis ajouter des droits au répertoire

chown mysql:mysql /var/run/mysqld

après cet essai

mysql -u root
0
Ingo

Dans mon cas, le problème était l'adresse de liaison dans /etc/mysql/my.cnf, puis:

nano /etc/mysql/my.cnf

rechercher des adresses de liaison et supprimer les informations spécifiques avec l'adresse IP de l'hôte (pas l'adresse 127.0.0.1)

0
barresoft

J'ai eu ce type de problème lorsque j'ai redimensionné le droplet sur digitalocean. J'avais mis à jour la version de MySQL et travaille pour moi. Voici le tutoriel que j'ai appliqué - https://serverpilot.io/community/articles/how-to-upgrade-mysql-5.5-to-5.6-on-ubuntu-14.04.html

0
Sam

Essayez ce qui suit à l’invite du terminal:

Sudo mysql

Une fois que cela vous permet d'entrer, vous pouvez créer un nouvel utilisateur et attribuer les privilèges que vous souhaitez sur la base de données spécifique à laquelle ils ont besoin d'accéder. 

Mysql 5.7 a changé certaines choses et utilise par défaut le plugin auth_socket (par opposition à mysql_native_password) pour root afin d'éviter que le compte ne soit piraté. Vous pouvez remplacer ceci en définissant le champ du plugin pour root, mais à moins que vous n'ayez une très bonne raison, vous ne devriez probablement pas contourner la protection. Surtout quand Sudo mysql est plus facile que mysql -u root -p de toute façon. 

J'ai découvert cette information - de tous les endroits - d'un Raspberry Pi site d'aide. Travaillé comme un charme après que Lubuntu 18.04 m'ait énervé pendant deux heures.

0
JohanTux

J'ai eu exactement le même problème. Après avoir lutté pendant une heure, j'ai trouvé un moyen de le corriger sans réinstaller mysql-common, mysql-client, mysql-server.

Tout d’abord, allez dans "/ var/run/mysqld". Vous constaterez que le mysql.sock n'existe pas. Supprimez simplement tout le répertoire mysqld, recréez-le et donnez-lui les privilèges nécessaires.

# rm -rf /var/run/mysqld && mkdir /var/run/mysqld && chown mysql /var/run/mysqld/

Maintenant, tuez le processus mysql dans son intégralité. Il est possible que la commande "/etc/init.d/mysql status" soit affichée "en attente du nettoyeur de page" même après l'arrêt du service.

Pour fermer complètement le service, utilisez

# pkill -9 mysqld

Une fois le processus tué, essayez de le redémarrer en utilisant

# /etc/init.d/mysql start

Et vous verrez que ça marche bien! Et aussi il n'y aura pas de problème à l'arrêter aussi.

0
xscorp7

Le fichier mysql.sock est créé au démarrage de MariaDB et est supprimé lorsque MariaDB est arrêté. Cela n’existera pas si MariaDB n’est pas lancé . Peut-être n’avez-vous pas installé MariaDB . VOUS POURRIEZ SUIVRE L’INSTRUCTION SUIVANTE: https://www.linode.com/docs/databases/mariadb/comment-installer-mariadb-on-centos-7 BEST

0
jsina

J'ai essayé presque toutes les solutions listées, aucune ne fonctionnait pour moi jusqu'à ce que je redémarre la machine, puis le serveur mysql a redémarré lorsque j'ai lancé la commande "service mysql restart". 

0
SyCode

sur archlinux, j'ai rencontré cette erreur et le problème était que le service mysqld- n'était pas en cours d'exécution.

Cependant, je ne pouvais pas activer le service mysql avec systemctl start mysqld comme indiqué dans la documentation Archlinux. Je pense que l'erreur était quelque chose comme

mysqld.service introuvable

J'ai d'abord dû redémarrer le système.

Ensuite, j'ai à nouveau saisi la commande (et entré systemctl enable mysqld) et maintenant mysql était capable de trouver le mysql.sock créé.

0
Arch Linux Tux

Ma solution;

Ubuntu 18.04 (WSL)

/ etc/mysql/my.cnf

!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/

/ 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

J'ai changé le port. Cela a fonctionné pour moi. Vous pouvez écrire un autre port. Exemple 3355

0
omfaer