139 votes

Impossible de se connecter au serveur MySQL local via le socket homebrew

J'ai récemment essayé d'installer MySQL avec homebrew ( brew install mysql ) et lorsque j'essaie de l'exécuter, j'obtiens l'erreur suivante :

ERREUR 2002 (HY000) : Impossible de se connecter au serveur MySQL local via le socket '/tmp/mysql.sock' (2)

No hay /tmp/mysql.sock ni un /var/lib/mysql.sock .

J'ai cherché et je n'ai rien trouvé. mysql.sock archivo.

Comment puis-je réparer cela ?

0 votes

Vous pouvez voir ce lien Réponse de GeekHades. stackoverflow.com/questions/4847069/

0 votes

J'ai installé mysql récemment et j'ai eu le même problème après que la batterie de mon ordinateur portable soit morte et ait forcé un arrêt incomplet. Cela vaut la peine de lancer mysqld pour vérifier les choses et s'assurer que MySQL s'est arrêté correctement la dernière fois. S'il y a eu un arrêt "sale" (par exemple, si une batterie d'ordinateur portable force l'arrêt du système), cela devrait le nettoyer. Vous pouvez alors relancer le serveur MySQL : mysql.server start .

1 votes

Cette réponse a fonctionné pour moi : stackoverflow.com/a/6378429/2641861

7voto

Le dossier /tmp/mysql.sock est probablement un Named-Pipe, puisqu'il se trouve dans un dossier temporaire. Un tuyau nommé est un fichier spécial qui n'est jamais stocké de façon permanente.

Si nous créons deux programmes, et que nous voulons qu'un programme envoie un message à un autre programme, nous pouvons créer un fichier texte. Nous demandons à un programme d'écrire quelque chose dans le fichier texte et à l'autre programme de lire ce que l'autre programme a écrit. C'est ce qu'est un pipe, sauf qu'il n'écrit pas le fichier sur le disque dur de notre ordinateur, IE ne stocke pas le fichier de façon permanente (comme nous le faisons lorsque nous créons un fichier et le sauvegardons).

Un Socket est exactement la même chose qu'un Pipe. La différence est que les Sockets sont généralement utilisés sur un réseau, entre ordinateurs. Un Socket envoie des informations à un autre ordinateur ou reçoit des informations d'un autre ordinateur. Les pipes et les sockets utilisent tous deux un fichier temporaire à partager pour pouvoir "communiquer".

Il est difficile de discerner lequel des deux MySql utilise dans ce cas. Mais cela n'a pas d'importance.

La commande mysql.server start devrait permettre au "serveur" (programme) de lancer sa boucle infinie qui créera ce fichier spécial et attendra les modifications ( listen pour les écritures).

Ensuite, un problème courant peut être que le programme MySql n'a pas la permission de créer un fichier sur votre machine, vous devez donc lui donner des privilèges Root.

sudo mysql.server start

0 votes

Ça a bien marché, merci. Je viens de lancer mysql.server start , mysql.server stop et a ensuite redémarré le service via homebrew avec brew services start mysql@5.7 et tout s'est bien passé.

5voto

dingalapadum Points 28

Comme j'ai passé pas mal de temps à essayer de résoudre ce problème et que je suis toujours revenu à cette page en cherchant cette erreur, je vais laisser ma solution ici en espérant que quelqu'un économise le temps que j'ai perdu. Bien que dans mon cas j'utilise mariadb plutôt que MySql, vous pouvez peut-être adapter cette solution à vos besoins.

Mon problème

est le même, mais ma configuration est un peu différente (mariadb au lieu de mysql) :

Installé mariadb avec homebrew

$ brew install mariadb

Démarrage du démon

$ brew services start mariadb

J'ai essayé de me connecter et j'ai obtenu l'erreur mentionnée ci-dessus.

$ mysql -uroot
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

Ma solution

Découvrez les my.cnf sont utilisés par mysql (comme suggéré dans ce commentaire ) :

$ mysql --verbose --help | grep my.cnf
/usr/local/etc/my.cnf ~/.my.cnf
                        order of preference, my.cnf, $MYSQL_TCP_PORT,

vérifier où le fichier socket Unix est exécuté (presque comme décrit aquí ) :

$ netstat -ln | grep mariadb
.... /usr/local/mariadb/data/mariadb.sock

(vous pourriez vouloir grep mysql au lieu de mariadb)

Ajoutez le fichier socket que vous avez trouvé à ~/.my.cnf (créer le fichier si nécessaire)(en supposant que ~/.my.cnf a été listé lors de l'exécution de la mysql --verbose ... de la commande ci-dessus) :

[client]
socket = /usr/local/mariadb/data/mariadb.sock

Redémarrez votre mariadb :

$ brew services restart mariadb

Après cela, j'ai pu lancer mysql et j'ai obtenu :

$ mysql -uroot
ERROR 1698 (28000): Access denied for user 'root'@'localhost'

J'ai donc exécuté la commande avec les privilèges de superutilisateur et après avoir entré mon mot de passe, j'ai obtenu :

$ sudo mysql -uroot
MariaDB [(none)]>

Notes :

  1. Je ne suis pas tout à fait sûr des groupes dans lesquels il faut ajouter le socket, au début je l'avais [client-serveur] mais ensuite je me suis dit que [client] devrait suffire. Je l'ai donc modifié et ça fonctionne toujours.

  2. En cours d'exécution mariadb_config | grep socket J'ai compris : --socket [/tmp/mysql.sock] ce qui est un peu déroutant puisqu'il semble que /usr/local/mariadb/data/mariadb.sock est l'endroit actuel (au moins sur ma machine)

  3. Je me demande où je peux configurer le /usr/local/mariadb/data/mariadb.sock pour être réellement /tmp/mysql.sock afin que je puisse utiliser les paramètres par défaut au lieu d'avoir à modifier mes .my.cnf (mais je suis trop fatigué maintenant pour le découvrir...)

  4. À un moment donné, j'ai aussi fait des choses mentionnées dans d'autres réponses avant de trouver cette solution.

5voto

GnrlBzik Points 813

Après l'installation de macos mojave, j'ai dû effacer le dossier mysql qui se trouvait sous /usr/local/var/mysql et ensuite réinstaller via brew install mysql sinon les choses liées à la permission apparaîtraient partout.

0 votes

J'ai résolu mon problème avec votre réponse, j'avais installé précédemment mysql et j'ai ensuite essayé de rétrograder vers mysql@5.6.

0 votes

Merci mec. cela a résolu mon problème aussi. supprimer /usr/local/var/mysql et réinstaller était la solution pour moi.

2 votes

Attention : la suppression /usr/local/var/mysql vous supprimerez également toutes vos bases de données existantes !

3voto

gouravtiwari21 Points 88

J'ai eu la même erreur et voici ce qui m'a aidé :

$ln -sfv /usr/local/opt/mysql/*.plist ~/Library/LaunchAgents
$launchctl load ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist
$mysql -uroot
mysql>

3voto

Hany Sakr Points 594

J'ai rencontré le même problème sur mon mac et je l'ai résolu en suivant les tutoriels suivants

https://mariadb.com/resources/blog/installing-mariadb-10116-mac-os-x-homebrew

Mais n'oubliez pas de tuer ou de désinstaller l'ancienne version avant de continuer.

Commandes :

brew uninstall mariadb

xcode-select --install

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" - See more at: https://mariadb.com/resources/blog/installing-mariadb-10116-mac-os-x-homebrew#sthash.XQoxRoJp.dpuf

brew doctor

brew update

brew info mariadb

brew install mariadb

mysql_install_db

mysql.server start

1 votes

Veuillez expliquer, à l'aide de quelques brefs exemples, comment le lien que vous avez fourni vous a aidé. Les liens peuvent disparaître, ce qui peut entraîner la suppression de votre réponse.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X