web-dev-qa-db-fra.com

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, l'erreur suivante apparaît:

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

Il n'y a pas de /tmp/mysql.sock ni de /var/lib/mysql.sock.

J'ai cherché et n'ai trouvé aucun fichier mysql.sock.

Comment puis-je réparer cela?

72
socketman

Quand le serveur tourne via

mysql.server start

vous devriez voir le socket dans /tmp/mysql.sock. Cependant, le système semble l’attendre dans /var/mysql/mysql.sock. Pour résoudre ce problème, vous devez créer un lien symbolique dans / var/mysql:

Sudo mkdir /var/mysql

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

Cela a résolu le problème pour moi. Maintenant, mon phpMyAdmin fonctionne avec localhost} _ et _ ​​127.0.0.1.

Le crédit va à Henry

75
AAGD

On dirait que votre serveur mysql n'est pas démarré. Je lance habituellement la commande stop puis le redémarre:

mysqld stop
mysql.server start

Même erreur, et cela fonctionne pour moi.

47
jesuis

Essayez de vous connecter en utilisant "127.0.0.1" à la place de "localhost".

21
Iswanto San

1) Si vous êtes capable de voir "mysql arrêté" lorsque vous exécutez ci-dessous la commande;

brew services list

2) et si vous êtes capable de démarrer mysql avec la commande ci-dessous;

mysql server start

ensuite, ajouter mysql aux services résoudra votre problème. Avec cette méthode, mysql démarrera en tant que service au démarrage de votre système d'exploitation. Pour ce faire, vous pouvez exécuter la commande ci-dessous;

brew services start mysql

Après cela, vous pouvez redémarrer votre système d’exploitation et essayer de vous connecter à mysql. J'ai fait la même chose et je cesse de recevoir l'erreur ci-dessous;

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

J'espère que ça aide.

11
Berk

Il me restait quelques répertoires d’une autre installation de MySQL (8.0), qui n’ont pas été supprimés.

J'ai résolu ceci en procédant comme suit:

D'abord désinstaller mysql

brew uninstall [email protected]

Supprimer les dossiers/fichiers qui n'ont pas été supprimés

rm -rf /usr/local/var/mysql
rm /usr/local/etc/my.cnf

Réinstaller mysql et le lier

brew install [email protected]
brew link --force [email protected]

Activer et démarrer le service

brew services start [email protected]
7
Royal.O

J'ai la même erreur et c'est 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>
3
gouravtiwari21

Puisque j'ai passé pas mal de temps à essayer de résoudre ce problème et que je revenais toujours sur cette page lorsque je cherchais cette erreur, je laisse ma solution ici dans l’espoir que quelqu'un gagne le temps que j’ai perdu. Bien que dans mon cas, j'utilise mariadb plutôt que MySql, vous pourrez peut-être quand même 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):

Mariadb installé avec homebrew 

$ brew install mariadb

Commencé le démon 

$ brew services start mariadb

J'ai essayé de me connecter et j'ai eu 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 quels fichiers 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érifie où le fichier de socket Unix est exécuté (presque comme décrit ici ):

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

(vous voudrez peut-être grep mysql au lieu de mariadb)

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

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

Redémarrez votre mariadb:

$ brew services restart mariadb

Après cela, je pourrais lancer mysql et obtenir:

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

Donc, je lance 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)]>

Remarques:

  1. Je ne suis pas tout à fait sûr des groupes où vous devez ajouter le socket, je l'avais d'abord [client-serveur], mais ensuite je me suis dit que [client] devrait suffire. Alors je l'ai changé et ça fonctionne toujours.

  2. En exécutant mariadb_config | grep socket, je reçois: --socket [/tmp/mysql.sock] Ce qui est un peu déroutant, car il semble que /usr/local/mariadb/data/mariadb.sock soit le lieu réel (au moins sur ma machine).

  3. Je me demande où je peux configurer le /usr/local/mariadb/data/mariadb.sock pour qu'il soit réellement /tmp/mysql.sock afin de pouvoir utiliser les paramètres par défaut au lieu de modifier mon .my.cnf (mais je suis trop fatigué pour le savoir ...)

  4. À un moment donné, j'ai également fait les choses mentionnées dans d'autres réponses avant de proposer ceci.

2
dingalapadum

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 supprimer 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
2
Hany Sakr

Le fichier /tmp/mysql.sock est probablement un tube nommé, puisqu'il se trouve dans un dossier temporaire. Un canal nommé est un fichier spécial qui n'est jamais stocké de manière permanente. 

Si nous créons deux programmes et que nous voulons qu'un programme envoie un message à un autre programme, nous pourrions créer un fichier texte. Un programme écrit quelque chose dans le fichier texte et l'autre programme lit ce que notre autre programme a écrit. C’est ce qu’est un tube, 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)

Une prise est exactement la même chose qu'un tuyau. 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. Pipes et Sockets utilisent un fichier temporaire à partager pour pouvoir «communiquer».

Il est difficile de discerner lequel MySql utilise dans ce cas. Peu importe cependant.

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

Après cela, un problème courant peut être que le programme MySql n’est pas autorisé à créer un fichier sur votre ordinateur, vous devrez donc peut-être lui attribuer les privilèges root. 

Sudo mysql.server start
1

Vous devrez exécuter mysql_install_db - la manière la plus simple consiste à vous trouver dans le répertoire d'installation: 

$ cd /usr/local/Cellar/mysql/<version>/ 
$ mysql_install_db

Sinon, vous pouvez alimenter mysql_install_db un paramètre basedir comme suit:

$ mysql_install_db --basedir="$(brew --prefix mysql)"
1
Kelley Robinson

Juste pour ajouter à ces réponses, dans mon cas, je n’avais pas de serveur mySQL local, il s’exécutait dans un conteneur Docker. Le fichier de socket n’existe donc pas et ne sera pas accessible pour le client "mysql".

Le fichier sock est créé par mysqld et mysql l'utilise pour communiquer avec lui . Cependant, si votre serveur mySql ne s'exécute pas en local, il n'a pas besoin du fichier sock.

En spécifiant un nom d'hôte/ip, le fichier sock n'est pas requis, par exemple. 

mysql --Host=127.0.0.1 --port=3306 --user=xyz --password=xyz
1
Wayne

Après un redémarrage, je ne pouvais plus me connecter au mariadb local. Une recherche m'a également conduit à cette page et je souhaitais partager ma solution avec vous.

J'ai remarqué que le répertoire my.cnf.d dans/usr/local/etc/est manquant.

C'est un bug connu avec l'homebrew qui y est décrit et résolu. https://github.com/Homebrew/homebrew-core/issues/36801

moyen rapide de corriger: mkdir /usr/local/etc/my.cnf.d

0
timo

juste pour compléter ce fil . donc MAMP (PRO) est utilisé assez souvent

le chemin est ici

/Applications/MAMP/tmp/mysql/mysql.sock
0
alexdd55

J'ai démarré manuellement mysql dans la sous-fenêtre des préférences système en initialisant puis en démarrant la base de données. Cela a résolu mon problème.

0
krish

rm -rf/usr/local/var/mysql/ib_logfile *

0
Pasichnik Roman

Après l’installation de macos mojave, il a fallu effacer le dossier mysql sous /usr/local/var/mysql, puis le réinstaller via brew install mysql, faute de quoi des problèmes liés aux permissions s’y trouveraient.

0
GnrlBzik

Lors de l'exécution de et de mysql_secure_installation , le nouveau mot de passe que j'ai obtenu:


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


J'ai remarqué en essayant ce qui suit de cette réponse :

netstat -ln | grep mysql

Il n'a rien renvoyé et j'ai compris que cela signifiait qu'il n'y avait pas de fichier .sock.

Alors, j’ai ajouté ce qui suit à mon fichier my.cnf (soit dans /etc/my.cnf ou dans mon cas, /usr/local/etc/my.cnf ).

Sous:

[mysqld]
socket=/tmp/mysql.sock

Sous:

[client]
socket=/tmp/mysql.sock

Ceci était basé sur ce post .

Ensuite, arrêtez/démarrez à nouveau mysql et essayez à nouveau et mysql_secure_installation , ce qui me permet enfin de saisir mon nouveau mot de passe root et de continuer. avec d'autres préférences d'installation.

J'espère que ça aidera quelqu'un. Mec, je déteste ces trucs ...

0
Must Impress