Impossible de se connecter au serveur MySQL local via le socket '/var/mysql/mysql.sock' (38)

385

J'ai un gros problème en essayant de me connecter à mysql. Quand je cours:

/usr/local/mysql/bin/mysql start

J'ai l'erreur suivante:

Can't connect to local MySQL server through socket '/var/mysql/mysql.sock' (38)

J'ai mysql.socksous le /var/mysqlrépertoire.

En /etc/my.cnfj'ai:

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

[mysqld]
port=3306
socket=/var/mysql/mysql.sock
key_buffer_size=16M
max_allowed_packet=8M

et /etc/php.inij'ai:

; Default socket name for local MySQL connects.  If empty, uses the built-in
; MySQL defaults.
mysql.default_socket = /var/mysql/mysql.sock

J'ai redémarré apache en utilisant sudo /opt/local/apache2/bin/apachectl restart

Mais j'ai encore l'erreur.

Sinon, je ne sais pas si c'est pertinent mais quand je le fais, mysql_config --socketsje reçois

--socket         [/tmp/mysql.sock]
Lambivist
la source
53
MySQL fonctionne-t-il?
David
2
Cela explique certainement l'erreur en essayant de s'y connecter. Comment, comme @Romain l'a mentionné, y a-t-il quelque chose dans les journaux de MySQL (essayez /var/log/mysqlou quelque part par là) qui indique pourquoi il ne fonctionne pas? Obtenez-vous une erreur lorsque vous essayez de le démarrer?
David
5
J'obtenais la même erreur, mais dans mon cas, j'ai découvert que mysql ne démarrerait pas car le disque était plein à 100%. /var/log/mysqld.log était utile.
yellavon
4
la raison pour laquelle ils demandent s'il fonctionne, je présume, c'est parce que le socket est fait au démarrage du service. j'ai installé mysql, mais je n'ai jamais démarré le service, donc le fichier .sock n'existe pas. tapez service mysqld startsi vous venez d'installer. hth
changokun
2
La réponse ci-dessous de shimanyi sudo service mysql startm'a sauvé
Kiren Siva

Réponses:

218

Si votre fichier my.cnf (généralement dans le dossier / etc / mysql / ) est correctement configuré avec

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

vous pouvez vérifier si mysql fonctionne avec la commande suivante:

mysqladmin -u root -p status

essayez de modifier votre autorisation sur le dossier mysql. Si vous travaillez localement, vous pouvez essayer:

sudo chmod -R 755 /var/lib/mysql/

qui l'a résolu pour moi

marimaf
la source
11
Cela m'a aidé après avoir suivi les étapes ci-dessus et redémarré le mysqldservice.
whirlwin
11
Il serait préférable de définir les autorisations sur 755 afin que seul le propriétaire du répertoire puisse y écrire.
codewaggle
2
Mon problème était en fait juste que mon volume de stockage pour mon application web était à court d'espace! Classique!
James T Snell
3
Sur mon openSUSE 12.3, my.cnf se trouve dans / etc /.
nous devons également changer l'autorisation en /var/log/mysqld.log, Merci
Allahbakash.G
94

êtes-vous sûr d'avoir installé mysql ainsi que le serveur mysql ..

Par exemple, pour installer le serveur mySql, j'utiliserai yum ou apt pour installer à la fois l'outil de ligne de commande mysql et le serveur:

yum -y install mysql mysql-server (or apt-get install mysql mysql-server)

Activez le service MySQL:

/sbin/chkconfig mysqld on

Démarrez le serveur MySQL:

/sbin/service mysqld start

définissez ensuite le mot de passe racine MySQL:

mysqladmin -u root password 'new-password' (with the quotes)

J'espère que ça aide.

Waqas
la source
J'ai utilisé des homebrews et cela a fonctionné comme un charme:brew install mysql
JaKXz
2
J'avais déjà installé le client, la commande dont j'avais besoin était sudo apt-get install mysql-serveralors la vie était belle
ErichBSchulz
1
La sortie Can't connect to local MySQL server through socket '/var/mysql/mysql.sock' (38) du client n'est-elle pas ? C'est le client qui essaie de ne pas se connecter, non? (Je pense que la question d'origine doit être modifiée pour clarifier cela).
msouth
76

Une solution rapide qui a fonctionné pour moi: essayez d'utiliser l'adresse IP locale (127.0.0.1) au lieu de 'localhost' dans mysql_connect (). Cela "force" php à se connecter via TCP / IP au lieu d'un socket Unix.

Maurizio
la source
Cela a fonctionné ... mais pourquoi? MySQL ne résout-il pas localhostet n'obtient-il pas de 127.0.0.1toute façon avant même d'essayer de se connecter?
Jaime Hablutzel
3
non ... lorsque vous utilisez localhost, vous n'utilisez pas de socket Internet. Vous utilisez un socket IPC. en.wikipedia.org/wiki/Unix_domain_socket . 127.0.0.1 est un bouclage local, ce qui signifie que la requête ne quittera pas votre machine mais qu'elle utilisera TCP / IP, ce qui sera donc plus lent ...
Master Yogurt
Fonctionne aussi pour moi. Je suis sur ubuntu 14.04, hhvm et nginx.
Maykonn
1
Merci. cela fonctionne pour moi, mais la réponse ne me permet pas de savoir quelle est la solution
Nathan Buesgens
Ceci est également nécessaire lorsque vous vous connectez au serveur distant via un tunnel ssh
Tamm
51

J'ai l'erreur suivante

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

J'ai essayé plusieurs façons et je l'ai finalement résolu de la manière suivante

sudo gksu gedit /etc/mysql/my.cnf

modifié

#bind-address       = 127.0.0.1

à

bind-address        = localhost

et redémarré

sudo /etc/init.d/mysql restart

ça a marché

AnupRaj
la source
J'ai eu un problème similaire; est passé d'Ethernet (192.168.220.11) au wifi (192.168.220.12) mais avait une adresse de liaison codée en dur sur IP Ethernet. Changer pour le localhostcorriger.
Chris G
30

Assurez-vous que vous utilisez mysqld: /etc/init.d/mysql start

Zorayr
la source
3
Ou sudo service mysql start|restartpour Ubuntu.
Wtower
18

Pour éviter que le problème ne se produise, vous devez effectuer un arrêt progressif du serveur à partir de la ligne de commande plutôt que de mettre le serveur hors tension.

shutdown -h now

Cela arrêtera les services en cours d'exécution avant d'éteindre la machine.

Basé sur Centos, une méthode supplémentaire pour le récupérer à nouveau lorsque vous rencontrez ce problème consiste à déplacer mysql.sock:

mv /var/lib/mysql/mysql.sock /var/lib/mysql/mysql.sock.bak

service mysqld start

Le redémarrage du service crée une nouvelle entrée appelée mqsql.sock

Ali Hashemi
la source
14

J'ai eu cette erreur lorsque j'ai défini le travail cron pour mon fichier. J'ai changé les autorisations du fichier en 777 mais cela n'a toujours pas fonctionné pour moi. J'ai finalement trouvé la solution. Peut-être que ce sera utile pour les autres.

Essayez avec cette commande:

mysql -h 127.0.0.1 -P 3306 -u root -p

N'oubliez pas que -h signifie hôte , -P signifie port et -p signifie mot de passe.

Doulat Khan
la source
Forcer une connexion sur TCP / IP au lieu d'utiliser un socket est inefficace (et nécessite que vous activiez la prise en charge TCP / IP localhost sur le serveur, conformément à cette réponse précédente ). La réponse acceptée de 2011 est meilleure: configurez le serveur pour pouvoir utiliser correctement un socket.
Quentin
10
-pne signifie pas port , cela signifie mot de passe , vous l'avez confondu avec-P
Quentin
Cela semble être, plus ou moins, une copie de cette réponse antérieure
Quentin
Pour moi, il s'agissait simplement de définir l'hôte correct: mysql -h 127.0.0.1 -u root -p
kghbln
12

Comme le montrent les nombreuses réponses ici, de nombreux problèmes peuvent entraîner ce message d'erreur lorsque vous démarrez le service MySQL. Le fait est que MySQL vous dira généralement exactement ce qui ne va pas, si vous regardez simplement dans le fichier journal approprié.

Par exemple, sur Ubuntu, vous devriez vérifier /var/log/syslog. Étant donné que de nombreuses autres choses peuvent également être enregistrées dans ce fichier, vous souhaiterez probablement utiliser greppour consulter les messages mysql et tailpour ne consulter que les plus récents. Dans l'ensemble, cela pourrait ressembler à:

grep mysql /var/log/syslog | tail -50

Ne modifiez pas aveuglément votre configuration, car quelqu'un d'autre a dit: "Cela a fonctionné pour mon système". Découvrez ce qui ne va pas avec votre système et vous obtiendrez un meilleur résultat beaucoup plus rapidement.

matt2000
la source
5
+1 Pour avoir pris du recul et signalé quelque chose que la plupart des autres réponses ne prennent même pas en compte - voir réellement ce que l'application aurait pu signaler comme un problème est une bien meilleure approche que de se précipiter aveuglément et d'apporter des modifications qui pourraient ne pas même être applicable ...!
SlySven
Ah, donc ça utilise le mauvais .cnf. Ceci explique cela. Maintenant, je peux arrêter d'essayer des choses aléatoires et résoudre le problème réel. Merci.
Synetech
11

Une autre solution consiste à modifier /etc/my.cnf et à inclure l'hôte dans la section [client]

 [client]
 #password       = your_password
 host            = 127.0.0.1
 port            = 3306
 socket          = /var/run/mysql/mysql.sock

Et puis redémarrer le service mysql.

Cette solution de contournement a été testée dans: Version du serveur: 5.5.25a-log Distribution source

l'ombre
la source
l'ajout de la section [client] est recommandé s'il n'est pas déjà dans my.cnf
Cris
7

J'ai eu le même problème et cela a été causé par une mise à jour des pilotes mysql lorsque le serveur mysql était en cours d'exécution. Je l'ai corrigé en redémarrant à la fois mysql et apache2:

sudo service mysql stop

sudo service mysql start

sudo service apache2 stop

sudo service apache2 start

fustaki
la source
Dans mon cas, mysqlne fonctionnait pas. J'ai couru sudo service mysql startaprès avoir couru sudo service mysql statuspour vérifier qu'il ne fonctionnait pas.
Tass
6

Dans mon cas, j'utilisais Centos 5.5. J'ai trouvé que le problème était dû au fait que le service mysql avait été arrêté. J'ai donc commencé le service mysql avec la commande:

 /etc/init.d/mysqld start

Donc .. erreur stupide.

Shyamkkhadka
la source
6

Si tout a bien fonctionné et que vous venez de voir cette erreur, avant de faire quoi que ce soit d'autre, assurez-vous que vous n'êtes pas à court d'espace disque:

df -h

Si le volume où le mysql.sock est créé est à 100% utilisé, MySql ne pourra pas le créer et ce sera la cause de cette erreur. Tout ce que vous devez faire est de supprimer quelque chose qui n'est pas nécessaire, comme les anciens fichiers journaux.

Derek Gogol
la source
6

essayez avec -h (hôte) et -P (port):

mysql -h 127.0.0.1 -P 3306 -u root -p

Ramil Mammadov
la source
5
sudo service mysql start

Cela devrait vous servir très bien. Il est possible que vous ayez modifié certaines commandes qui ont affecté les configurations mysql.

shimanyi
la source
ou systemctl start mariadb.service dans Fedora 22 ou RedHat 7. Après cela, il est possible de définir le mot de passe root.
Junior Mayhé
5

Il existe de nombreuses solutions à ce problème mais pour ma situation, j'avais juste besoin de corriger la DATE sur la machine / le serveur ( Ubuntu 16.04 Server ).

i) Vérifiez la date de votre serveur et corrigez-la.

ii) Exécuter sudo /etc/init.d/mysql restart

Cela devrait le faire démarrer.

Huey Mataruse
la source
4

J'obtenais l'erreur parce que j'exécutais MAMP et que mon fichier .sock était dans un emplacement différent. Je viens d'ajouter un lien symbolique où l'application pensait que cela devrait être celui qui indiquait où il se trouvait réellement et cela fonctionnait comme un charme.

Devin Henkel-Legare
la source
Comment peut-on ajouter un lien symbolique là où l'application a pensé qu'il devrait être celui qui indiquait où il se trouvait réellement?
Gilberto Ibarra
4

J'ai également constaté qu'il s'agissait d'un problème d'autorisations. J'ai comparé les fichiers MySQL à une installation fonctionnelle (à la fois sur Debian 6 squeeze) et j'ai dû faire les changements de propriété suivants (oùmydatabase se les bases de données que vous avez).

Propriété mysql:mysql:

chown mysql:mysql /var/lib/mysql
chown mysql:mysql /var/lib/mysql/ib*
chown mysql:mysql /var/lib/mysql/mydatabase
chown mysql:mysql /var/lib/mysql/mydatabase/*
chown mysql:mysql /var/lib/mysql/mysql/* 

Propriété mysql:root:

chown mysql:root /var/lib/mysql/mysql
chown mysql:root /var/run/mysqld 

Propriété mysql:adm:

chown mysql:adm /var/log/mysql
chown mysql:adm /var/log/mysql.err
chown mysql:adm /var/log/mysql.log* 
SharpC
la source
4

Pour moi, c'était simplement un cas où MySQL prenait beaucoup de temps à charger. J'ai plus de 100 000 tables dans l'une de mes bases de données et cela a finalement commencé, mais cela doit évidemment prendre beaucoup de temps dans ce cas.

Antony
la source
3

Si vous utilisez la version Micro d'AWS (Amazon Web Services), il s'agit d'un problème de mémoire. Quand j'ai couru

mysql

du terminal, il dirait

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

J'ai donc essayé ce qui suit et cela échouerait.

service mysqld restart

Après de nombreuses recherches, j'ai découvert que vous devez créer un fichier d'échange pour que MySQL ait suffisamment de mémoire. Les instructions sont répertoriées: http://www.prowebdev.us/2012/05/amazon-ec2-linux-micro-swap-space.html .

Ensuite, j'ai pu redémarrer mysqld.

jth_92
la source
J'ai eu le même problème sur l'instance "micro" du serveur AWS et je peux confirmer que la création du fichier d'échange DID corrige l '"ERREUR 2002 (HY000): Impossible de se connecter au serveur MySQL local via socket / var / run / mysqld / mysqld .sock '(111) ". Merci @ jth_92!
Konaras
3

vous pouvez toujours démarrer le serveur mysql en spécifiant l'emplacement du fichier mysql.sock en utilisant l' --socketoption comme

mysql --socket=/var/mysql/mysql.sock 

Cela fonctionnera même si l'emplacement du fichier socket est spécifié dans un emplacement différent dans le fichier my.cnf.

David Okwii
la source
3

Pour ceux dont aucune solution n'a fonctionné, essayez:

cd /etc/mysql

vérifier si my.cnf est présent

nano my.cnf

et assurez-vous que vous n'avez qu'une seule adresse de liaison comme suit:

bind-address = 127.0.0.1

Sinon, cela pourrait être le problème, quittez simplement nano et enregistrez le fichier.

et service mysql start

notez que si vous n'avez pas nano (c'est un éditeur de texte) installez-le simplement apt-get install nanoet appuyez une fois sur Ctrl + X pour quitter, n'oubliez pas de dire Y pour enregistrer et utiliser le même fichier)

Jack M.
la source
Malheureusement, cela n'a pas fonctionné. Cela dit simplement que seule la machine locale peut accéder à mysql. Aucune connexion à distance.
stephen
3

J'ai également eu ce problème lors de la tentative de démarrage du serveur, de sorte que la plupart des réponses ici qui disent simplement de démarrer le serveur n'ont pas fonctionné. La première chose que vous pouvez faire est d'exécuter ce qui suit pour voir s'il y a des erreurs de configuration:

/usr/sbin/mysqld --verbose --help 1>/dev/null

J'ai eu une erreur qui est apparue:

160816 19:24:33 [Note] /usr/sbin/mysqld (mysqld 5.5.50-0ubuntu0.14.04.1-log) starting as process 9461 ...
160816 19:24:33 [Warning] Using unique option prefix myisam-recover instead of myisam-recover-options is deprecated and will be removed in a future release. Please use the full name instead.
160816 19:24:33 [Note] Plugin 'FEDERATED' is disabled.
160816 19:24:33 [ERROR] /usr/sbin/mysqld: unknown variable 'innodb-online-alter-log-max-size=4294967296'
160816 19:24:33 [ERROR] Aborting

Un simple grep -HR "innodb-online-alter-log-max-size" /etc/mysql/ m'a montré exactement quel fichier contenait la ligne incriminée, j'ai donc supprimé cette ligne du fichier.

Ensuite, en vérifiant mon /var/log/mysql/error.logdossier, j'avais:

InnoDB: Error: log file ./ib_logfile0 is of different size 0 5242880 bytes
InnoDB: than specified in the .cnf file 0 671088640 bytes!
160816 22:46:46 [ERROR] Plugin 'InnoDB' init function returned error.
160816 22:46:46 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
160816 22:46:46 [ERROR] Unknown/unsupported storage engine: InnoDB
160816 22:46:46 [ERROR] Aborting

Sur la base de cette question, la solution acceptée ne fonctionnerait pas car je ne pouvais même pas démarrer le serveur, j'ai donc suivi ce que certains commentaires ont dit et supprimé mes fichiers /var/lib/mysql/ib_logfile0et /var/lib/mysql/ib_logfile1.

Cela a permis au serveur de démarrer et j'ai pu me connecter et exécuter des requêtes, mais en vérifiant mon fichier journal des erreurs, il se remplissait rapidement de plusieurs dizaines de milliers de lignes comme ceci:

160816 22:52:15  InnoDB: Error: page 1415 log sequence number 82039318708
InnoDB: is in the future! Current system log sequence number 81640793100.
InnoDB: Your database may be corrupt or you may have copied the InnoDB
InnoDB: tablespace but not the InnoDB log files. See
InnoDB: http://dev.mysql.com/doc/refman/5.5/en/forcing-innodb-recovery.html
InnoDB: for more information.

Sur la base d'une suggestion d' ici , pour résoudre ce problème, j'ai fait un mysqldump et une restauration de toutes les bases de données (voir le lien pour plusieurs autres solutions).

$ mysqldump -u root -p --allow-keywords --add-drop-database --comments --hex-blob --opt --quote-names --databases db_1 db_2 db_3 db_etc > backup-all-databases.sql
$ mysql -u root -p < backup-all-databases.sql

Tout semble fonctionner comme prévu maintenant.

Mike
la source
La vérification a /var/log/mysql/error.logaidé dans mon cas. Il y en a eu [ERROR] Can't init tc logqui a été rapidement corrigé en utilisant la réponse suivante: dba.stackexchange.com/a/185006/163583
Juraj.Lorinc
2

Ajouter

--protocol=tcp 

à la liste des pramaters dans votre relation a fonctionné pour moi.

barryred
la source
2

C'était assez bon pour moi

sudo /etc/init.d/mysql restart
Vikram
la source
2

J'ai rencontré ce problème aujourd'hui. Aucune de ces réponses n'a fourni le correctif. J'ai dû faire les commandes suivantes (trouvées ici https://stackoverflow.com/a/20141146/633107 ) pour que mon service mysql démarre:

sudo /etc/init.d/mysql stop
cd /var/lib/mysql/
ls ib_logfile*
mv ib_logfile0 ib_logfile0.bak
mv ib_logfile1 ib_logfile1.bak
... etc ...
/etc/init.d/mysql restart

Cela était en partie indiqué par les erreurs suivantes dans /var/log/mysql/error.log:

140319 11:58:21 InnoDB: Completed initialization of buffer pool
InnoDB: Error: log file ./ib_logfile0 is of different size 0 50331648 bytes
InnoDB: than specified in the .cnf file 0 5242880 bytes!
140319 11:58:21 [ERROR] Plugin 'InnoDB' init function returned error.
140319 11:58:21 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
140319 11:58:21 [ERROR] Unknown/unsupported storage engine: InnoDB
140319 11:58:21 [ERROR] Aborting

J'ai également vu l'erreur de disque plein, mais uniquement lors de l'exécution de commandes sans sudo. Si la vérification des autorisations échoue, il signale que le disque est plein (même lorsque votre partition n'est même pas presque pleine).

Splaktar
la source
2

CentOS 7, 64 bits. Nouvelle installation.
Dans mon cas, l'erreur était due au fait que je n'avais pas le bon serveur MySQL et le client MySQL installés.
En utilisant yum, j'ai supprimé mariadbet l'édition mysql-community. J'ai téléchargé les rpm du client et du serveur sur le site officiel de MySQL et installé le serveur et le client.

Lors de l'installation du serveur, on m'a montré un message indiquant que le mot de passe du compte root pour MySQL était stocké dans un fichier que je pouvais visualiser sudo cat /root/.mysql_secret.

Donc, après avoir installé le client et le serveur, j'ai vérifié si MySQL fonctionnait (je pense avoir redémarré avant de le faire) avec la commande sudo service mysql statuset j'ai obtenu le résultat.

MySQL en cours d'exécution (2601) [OK]

Je me suis connecté en MySQL en utilisant le mot de passe du fichier .mysql_secret:
mysql -uroot -pdxM01Xfg3DXEPabpf. Notez quedxM01Xfg3DXEPabpf s'agit du mot de passe mentionné dans le fichier .mysql_secret.

puis tapé entré la commande suivante à l'invite mysql pour changer le mot de passe de root:

mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('somePassword');

Tout a bien fonctionné à partir de là.

Nav
la source
1
même cas sur RHEL6U6 avec la version serveur: 5.6.23-enterprise-commercial-advanced.
Le HCD
2
sudo service mysqld start

J'ai travaillé pour moi, j'utilise Centos

ikuchris
la source
2

Cela ne répond pas directement à votre question mais à un sous-ensemble de celle-ci, à savoir l'utilisation de PythonAnywhere. Je n'arrêtais pas de trébucher sur cette question lorsque je cherchais un correctif, donc je l'ajoute ici dans l'espoir que cela aidera les autres dans ma situation.


PythonAnywhere a décidé de changer les noms d'hôte de connexion à la base de données afin d'améliorer l'efficacité et la fiabilité, comme détaillé ici :

Le nom d'hôte officiel que vous devez utiliser pour vous connecter à l'instance de base de données MySQL de votre compte est passé de mysql.server à votre nom d' utilisateur .mysql.pythonanywhere-services.com . Cela contourne une partie de notre infrastructure qui a commencé à présenter des problèmes au cours des dernières semaines, et elle devrait être beaucoup plus efficace et fiable que l'ancienne.

Par conséquent, vous devrez mettre à jour votre nom d'hôte à la valeur indiquée ci-dessus.

Vlad Schnakovszki
la source
2

Je viens d'avoir ce problème. après une journée de vérification, j'ai enfin la réponse: le fichier mysql.sock est créé au démarrage de MariaDB et supprimé lorsque MariaDB est arrêté. Il n'existera pas si MariaDB n'est pas en cours d'exécution. vous n'avez peut-être pas installé MariaDB. VOUS POUVEZ SUIVRE L'INSTRUCTION CI-DESSOUS: https://www.linode.com/docs/databases/mariadb/how-to-install-mariadb-on-centos-7 BEST

jsina
la source
1

J'ai eu cette erreur de socket et cela est essentiellement dû au fait que MySQL ne fonctionnait pas. Si vous exécutez une nouvelle installation, assurez-vous d'installer 1) le package système et 2) le programme d'installation du panneau (mysql.prefPane). Le programme d'installation du panneau vous permettra d'accéder à vos préférences système et d'ouvrir MySQL, puis de lancer une instance.

Notez que, lors d'une nouvelle installation, j'avais besoin de réinitialiser mon ordinateur pour que les modifications prennent correctement effet. Après un redémarrage, j'ai obtenu une nouvelle instance en cours d'exécution et j'ai pu ouvrir une connexion à localhost sans problème.

Il convient également de noter que j'avais apparemment installé des versions précédentes de MySQL, mais que j'avais supprimé le panneau, ce qui rend facile l'exécution d'une instance de MySQL pour les utilisateurs de Mac.

Un bon lien pour ce processus de réinstallation: http://www.coolestguyplanettech.com/how-to-install-php-mysql-apache-on-os-x-10-6/

tandy
la source