Impossible de se connecter au serveur MySQL local via l'homebrew de socket

109

J'ai récemment essayé d'installer MySQL avec homebrew ( brew install mysql) et lorsque j'essaye 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)

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

J'ai cherché et n'ai trouvé aucun mysql.sockfichier.

Comment puis-je réparer cela?

socketman
la source
Vous pouvez voir ce lien réponse GeekHades. stackoverflow.com/questions/4847069/…
GeekHades
J'ai installé mysql et j'ai eu le même problème après la mort de la batterie de mon ordinateur portable et la force d'un arrêt incomplet. Cela vaut la peine de courir mysqldpour vérifier les choses et s'assurer que MySQL s'est correctement arrêté la dernière fois. S'il y avait un arrêt «sale» (par exemple, si une batterie d'ordinateur portable force un arrêt du système), cela devrait le nettoyer. Ensuite , vous pouvez commencer à nouveau serveur MySQL: mysql.server start.
Dave Everitt
1
Cette réponse a fonctionné pour moi: stackoverflow.com/a/6378429/2641861
ArnoHolo
Cela s'est produit pour moi après la restauration d'un nouveau Mac Mini à partir d'une sauvegarde Time Machine. J'ai dû désinstaller [email protected] et le réinstaller pour qu'il commence à fonctionner. J'ai mordu un marteau mais c'était relativement indolore puisque toutes mes configurations ont été conservées.
Joshua Pinter

Réponses:

93

Lorsque le serveur fonctionne 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 correctement avec localhost et 127.0.0.1 .

Le mérite revient à Henry

AAGD
la source
1
Cela a également résolu mon problème avec Wordpress ne parvenant pas à se connecter à mySQL. Merci encore
Ayoub
20
Quand j'essaye, mysql.server startje reçois ERROR! The server quit without updating PID file (/usr/local/var/mysql/lyahdav-C02R32HCG8WM.pid). J'avais besoin d'une ancienne version de MySQL, installée via brew install [email protected].
Liron Yahdav
3
fonctionnement. mysql.server startréparé pour moi
ivange94
@Liron, avez-vous résolu le problème auquel vous êtes confronté? Je suis confronté au même problème sans aide.
Buddy
@EB ça fait un moment que je n'ai pas eu ce problème, mais en regardant mon commentaire, vous avez essayé la solution de contournement pour installer une ancienne version de MySQL? A part ça, je suis malheureusement à court d'idées.
Liron Yahdav
61

Il semble que votre serveur mysql ne soit pas démarré. J'exécute généralement la commande d'arrêt, puis je la relance:

mysqld stop
mysql.server start

Même erreur, et cela fonctionne pour moi.

je suis
la source
89
. ERREUR! Le serveur s'est arrêté sans mettre à jour le fichier PID (/usr/local/var/mysql/myHostName.pid). ?
Pesulap
J'ai fait un mysqld &commentaire ci-dessus, mais je pense que cela ferait probablement la même chose car mysqld stop je suis presque sûr que dans mon cas, c'était à cause d'un arrêt incorrect.
Mitch VanDuyn
54

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

J'ai résolu ce problème en procédant comme suit:

Commencez par désinstaller mysql

brew uninstall mysql@5.6

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

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

Réinstallez mysql et liez-le

brew install mysql@5.6
brew link --force [email protected]

Activer et démarrer le service

brew services start mysql@5.6
Royal.O
la source
3
Merci beaucoup :) Toutes les instructions ont échoué mais la vôtre
Vyacheslav Loginov
1
Merci - cette réponse a mis fin à 24 heures de coups de tête contre un mur
vladiim
1
Cela a également fonctionné pour moi après avoir essayé tout le reste! Je vous remercie!!!! :)
Eric
1
Il semble que le problème pour moi était que j'avais toujours / usr / local / var / mysql après une installation précédente. La suppression a fait l'affaire! Merci pour votre suggestion.
themantimes8
J'avais besoin d'exécuter l'étape "mysql_secure_installation" mentionnée par homebrew avant que cette erreur ne disparaisse.
searaig
27

Essayez de vous connecter en utilisant "127.0.0.1" au lieu de "localhost".

Iswanto San
la source
2
@Esteban MySQL essaiera de se connecter au socket unix si vous lui dites de se connecter à "localhost". Si vous lui dites de se connecter à 127.0.0.1, vous le forcez à se connecter à la prise réseau. Vous avez donc probablement configuré MySQL pour n'écouter que le socket réseau et non le socket du système de fichiers. (Source: serverfault.com/a/295300/59101 )
Ardee Aram
Cela m'a aidé à forcer le client mysql à utiliser le socket TCP, car j'exécute un tunnel SSH sur localhost vers ma base de données MySQL distante.
Iow
22

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

brew services list

2) et si vous pouvez démarrer mysql avec la commande ci-dessous;

mysql server start

ça signifie; mysql est capable de démarrer manuellement, mais il ne démarre pas automatiquement au démarrage du système d'exploitation. L'ajout de mysql aux services résoudra ce problème. 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 pour voir s'il a démarré automatiquement. J'ai fait la même chose et j'ai cessé de recevoir l'erreur ci-dessous;

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

J'espère que ça aide.

Berk
la source
@berk, cela a aidé dans mon cas à récupérer l'erreur mais à déclencher une autre erreur 'ERREUR 1045 (28000): Accès refusé pour l'utilisateur' utilisateur '@' localhost '(en utilisant le mot de passe: NON)'
Pratik Khadka
Salut @PratikKhadka, l'erreur que vous obtenez maintenant, signifie que mysql est en cours d'exécution et que vous avez un problème d'authentification. Selon le message d'erreur que vous avez publié, vous utilisez le nom d'utilisateur en tant qu'utilisateur et n'utilisez aucun mot de passe. Vous devez utiliser un nom d'utilisateur et un mot de passe valides. Je vous suggère de vérifier le lien suivant; " forums.mysql.com/read.php?34,140320,140324 "
Berk
Pas besoin de redémarrer le système d'exploitation, le simple fait d'exécuter "brew services start mysql" a fonctionné pour moi. Merci!
AKS
Salut @AKS, vous avez raison. Le redémarrage n'est pas nécessaire pour le faire fonctionner. J'ai modifié la réponse pour expliquer pourquoi un redémarrage est nécessaire. Il est nécessaire de voir si mysql démarre automatiquement au démarrage du système d'exploitation. Merci pour votre retour!
Berk
5

Le fichier /tmp/mysql.sockest probablement un canal nommé, puisqu'il se trouve dans un dossier temporaire. Un tube 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. Nous avons un programme qui é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 manière permanente (comme nous le faisons lorsque nous créons un fichier et le sauvegardons.)

Un socket est exactement le même qu'un tuyau. La différence est que les sockets sont généralement utilisés sur un réseau - entre les ordinateurs. Un socket envoie des informations à un autre ordinateur ou reçoit des informations d'un autre ordinateur. Les tuyaux et les sockets utilisent un fichier temporaire à partager afin de pouvoir «communiquer».

Il est difficile de discerner lequel MySql utilise dans ce cas. Cela n'a pas d'importance cependant.

La commande mysql.server startdevrait faire exécuter au «serveur» (programme) sa boucle infinie qui créera ce fichier spécial et attendra les modifications ( listenpour les écritures).

Après cela, un problème courant peut être que le programme MySql n'a pas l'autorisation de créer un fichier sur votre machine, vous devrez donc peut-être lui donner les privilèges root

sudo mysql.server start
Tyler Curtis Jowers
la source
Cela a très bien fonctionné, merci. Je viens de courir mysql.server start, mysql.server stoppuis j'ai redémarré le service via homebrew avec brew services start [email protected]et les choses se sont bien déroulées.
taylorthurlow
4

Après avoir installé macos mojave, il fallait effacer le dossier mysql sous /usr/local/var/mysql, puis le réinstaller via brew install mysqlsinon des choses liées à la permission se produiraient partout.

GnrlBzik
la source
J'ai résolu mon problème avec votre réponse, j'avais installé précédemment mysql, puis j'ai essayé de revenir à [email protected]
Rodrirokr
Merci mec. cela a aussi résolu mon problème. supprimer / usr / local / var / mysql et réinstaller était une solution pour moi.
Oğuz Can Sertel
1
Attention: en supprimant, /usr/local/var/mysqlvous supprimerez également toutes vos bases de données existantes!
Leonardo le
3

J'ai eu 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>
gouravtiwari21
la source
3

Juste pour ajouter à ces réponses, dans mon cas, je n'avais pas de serveur mySQL local, il fonctionnait dans un conteneur docker. Le fichier 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 fonctionne pas en local, il n'a pas besoin du fichier sock.

En spécifiant un nom d'hôte / une adresse IP, le fichier chaussette n'est pas nécessaire, par exemple

mysql --host=127.0.0.1 --port=3306 --user=xyz --password=xyz
Wayne
la source
3

Étant donné que j'ai passé un certain temps à essayer de résoudre cela et que je suis toujours revenu sur cette page pour rechercher cette erreur, je laisserai 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 pourrez peut-être encore 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

Lancement du démon

$ brew services start mariadb

J'ai essayé de se 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 quels my.cnffichiers 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érifiez où s'exécute le fichier de socket Unix (presque comme décrit ici ):

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

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

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

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

Redémarrez votre mariadb:

$ brew services restart mariadb

Après cela, je pourrais exécuter mysql et obtenir:

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

Donc, j'exécute la commande avec les privilèges de superutilisateur à la place 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 dans lesquels vous devez ajouter le socket, d'abord je l'ai eu [client-serveur] mais ensuite j'ai pensé que [client] devrait suffire. Alors je l'ai changé et ça marche toujours.

  2. En cours d'exécution, mariadb_config | grep socketj'obtiens: --socket [/tmp/mysql.sock] ce qui est un peu déroutant car il semble que ce /usr/local/mariadb/data/mariadb.socksoit l'endroit réel (du moins sur ma machine)

  3. Je me demande où je peux configurer le /usr/local/mariadb/data/mariadb.sockpour /tmp/mysql.sockque je puisse utiliser les paramètres par défaut au lieu d'avoir à modifier mon .my.cnf(mais je suis trop fatigué maintenant pour comprendre cela ...)

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

dingalapadum
la source
2

Vous devrez exécuter mysql_install_db- le plus simple est si vous êtes dans le répertoire d'installation:

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

Vous pouvez également alimenter mysql_install_dbun basedirparamètre comme celui-ci:

$ mysql_install_db --basedir="$(brew --prefix mysql)"
Kelley Robinson
la source
2

J'ai rencontré le même problème sur mon mac et 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
Hany Sakr
la source
1
Veuillez expliquer avec quelques brefs exemples comment le lien que vous avez fourni vous a aidé. Les liens peuvent disparaître, c'est pourquoi votre réponse peut être supprimée.
Kurt Van den Branden
2

Après un redémarrage je n'ai pas pu me connecter avec le mariadb local, une recherche m'a également amené sur cette page et j'ai voulu partager ma solution avec vous.

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

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

moyen rapide de réparer: mkdir /usr/local/etc/my.cnf.d

timo
la source
Cela a fonctionné pour moi. Impossible de se connecter au mariadb local après le brew updateredémarrage. brew services listLe résultat montrait le statut de mariadb starteden jaune. Merci pour le conseil.
nterms le
1

Lors de l'exécution de mysql_secure_installation et de la saisie du nouveau mot de passe, 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 retourné, et j'ai compris que cela signifiait qu'il n'y avait pas de fichier .sock.

J'ai donc ajouté ce qui suit à mon fichier my.cnf (soit dans /etc/my.cnf, soit dans mon cas, /usr/local/etc/my.cnf ).

Sous:

[mysqld]
socket=/tmp/mysql.sock

Sous:

[client]
socket=/tmp/mysql.sock

C'était basé sur ce post .

Ensuite, arrêtez / redémarrez mysql et réessayez mysql_secure_installation qui m'a finalement laissé entrer mon nouveau mot de passe root et continuer avec d'autres préférences de configuration.

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

Doit impressionner
la source
0

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

le chemin ici est

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

J'ai lancé manuellement mysql dans le volet des préférences système en initialisant la base de données puis en la démarrant. Cela a résolu mon problème.

Krish
la source
0

Dans mon cas, le coupable a été trouvé dans les fichiers journaux:

$ tail /usr/local/var/mysql/<hostname>.lan.err
2019-09-19  7:32:21 0 [ERROR] InnoDB: redo log file './ib_logfile0' exists. Creating system tablespace with existing redo log files is not recommended. Please delete all redo log files before creating new system tablespace.
2019-09-19  7:32:21 0 [ERROR] InnoDB: Database creation was aborted with error Generic error. You may need to delete the ibdata1 file before trying to start up again.

J'ai donc renommé ib_logfile0pour me débarrasser de l'erreur (j'ai dû faire de même avec ib_logfile1par la suite).

mv /usr/local/var/mysql/ib_logfile0 /usr/local/var/mysql/ib_logfile0_bak
mv /usr/local/var/mysql/ib_logfile1 /usr/local/var/mysql/ib_logfile1_bak
brew services restart mariadb
JBaczuk
la source
0

J'ai eu le même problème. Après avoir essayé toutes ces méthodes sans succès, j'ai fait ce qui suit:

tail -f the-mysql-or-maria-db-error-file.err

dans une autre console:

brew services restart mariadb

J'ai vu l'erreur suivante:

"MAC HOMEBREW La récupération après incident a échoué. Corrigez le problème (s'il s'agit, par exemple, d'une erreur de mémoire insuffisante) et redémarrez, ou supprimez le journal tc et démarrez mysqld avec"

J'ai donc changé l' tc.logextension tc.log.txtet redémarré mariadb

brew services restart mariadb

Et.. Voila!

Richard Rodriguez
la source
0

Cela fonctionne pour moi:

brew upgrade mysql

Merci

FianGaming
la source
0

Pour moi, j'avais installé mariadbil y a longtemps, puis installé[email protected] .

Quand j'ai exécuté mysql -uroot, j'obtiens l'erreur: ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

Lire les réponses:

  • J'ai désinstallé mariadb
  • Supprimé le dossier /usr/local/var/mysql
  • Ran la commande mysqld --initialize

Ensuite, j'ai pu mysql -uroot -p

wesamly
la source
-1

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

Pasichnik Roman
la source