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

3voto

Wayne Points 960

Juste pour ajouter à ces réponses, dans mon cas, je n'avais pas de serveur mySQL local, il fonctionnait à l'intérieur d'un conteneur docker. Donc le fichier socket n'existe 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/ip le fichier sock n'est pas nécessaire e.g.

mysql --host=127.0.0.1 --port=3306 --user=xyz --password=xyz

0 votes

Mon problème était que j'ai essayé d'utiliser localhost o http://localhost

3voto

JBaczuk Points 5056

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_logfile0 pour se débarrasser de l'erreur (j'ai dû faire la même chose avec ib_logfile1 après).

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

3voto

Bonjiro Points 165

Si "mysqld" est en cours d'exécution, il est possible que vos données soient corrompues. Essayez d'exécuter ceci :

mysqld

Lisez le mur de données, et vérifiez si mysqld rapporte que la base de données est corrompue. La corruption peut se présenter de plusieurs façons peu intuitives :

  • mysql -uroot renvoie "ERROR 2002 (HY000) : Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)".
  • mysql.server start retourne "ERROR ! Le serveur a quitté sans mettre à jour le PID".
  • Sequel Pro et MySQL Workbench répondent qu'ils ne peuvent pas se connecter à MySQL sur localhost ou 127.0.0.1.

Pour récupérer vos données, ouvrez my.cnf et ajoutez la ligne suivante dans le fichier [mysqld] section :

innodb_force_recovery=1

Redémarrez mysqld :

$ brew services restart mysql@5.6

Vous pouvez maintenant vous y connecter, mais en mode lecture seule.

Si vous utilisez InnoDB, exécutez ceci pour exporter toutes vos données :

$ mysqldump -u root -p --all-databases --add-drop-database --add-drop-table > data-recovery.sql

Le fichier est créé dans votre répertoire ~. Cela peut prendre un certain temps.

Une fois terminé, retirez innodb_force_recovery=1 de my.cnf, puis redémarrez mysql en mode normal :

$ brew services restart mysql@5.6

Laissez tomber toutes les bases de données. Je l'ai fait en utilisant Sequel Pro. Cela supprime toutes vos données d'origine. Assurez-vous que votre data-recovery.sql a l'air bon avant de faire cela. Pensez également à sauvegarder /usr/local/var/mysql de faire très attention.

Ensuite, restaurez les bases de données, les tables et les données avec ceci :

$ mysql -uroot < ~/data-recovery.sql

Le processus d'importation/restauration peut être long. Une fois terminé, vous êtes prêt à partir !

Merci à https://severalnines.com/database-blog/my-mysql-database-corrupted-what-do-i-do-now pour les instructions de récupération. Le lien contient des instructions supplémentaires sur la récupération de MyISAM.

2voto

krobs Points 136

Vous devez exécuter mysql_install_db - Le plus simple est de se trouver dans le répertoire d'installation :

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

Alternativement, vous pouvez alimenter mysql_install_db a basedir comme le suivant :

$ mysql_install_db --basedir="$(brew --prefix mysql)"

2voto

timo Points 21

Après un redémarrage, je n'ai pas pu me connecter avec le mariadb local, une recherche m'a également amené à cette page et je voulais 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 bogue connu avec homebrew qui est décrit et résolu ici. https://github.com/Homebrew/homebrew-core/issues/36801

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

0 votes

Cela a fonctionné pour moi. Impossible de se connecter au mariadb local après brew update et redémarrer. brew services list le résultat montrait l'état de mariadb started en jaune. Merci pour le conseil.

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