Es kann keine Verbindung zum lokalen MySQL-Server über den Socket '/var/lib/mysql/mysql.sock' hergestellt werden (2).

255

Beim Versuch, eine Verbindung zu MySQL herzustellen, wird folgende Fehlermeldung angezeigt:

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

Gibt es eine Lösung für diesen Fehler? Was könnte der Grund dafür sein?

Atul
quelle
Ich habe dies hier beantwortet, bitte überprüfen Sie den folgenden Link: stackoverflow.com/a/35577309/4773290
Pratik Patil

Antworten:

222

Stellen Sie eine Verbindung zu "localhost" oder "127.0.0.1" her? Ich habe festgestellt, dass beim Herstellen einer Verbindung zu "localhost" der Socket-Anschluss verwendet wird, beim Verbinden mit "127.0.0.1" jedoch der TCP / IP-Anschluss verwendet wird. Sie können versuchen, "127.0.0.1" zu verwenden, wenn der Socket-Anschluss nicht aktiviert ist / funktioniert.

Jan Thomä
quelle
27
In diesem Fall sollten Sie wahrscheinlich überprüfen, ob Ihr MYSQL-Server tatsächlich ausgeführt wird.
Jan Thomä
3
Sie können auch die Verwendung eines Sockets mit dem Socket-Parameter (-S mit / usr / bin / mysql) erzwingen und TCP / IP erzwingen, indem Sie einen Port (-P mit / usr / bin / mysql.) Angeben
Kaoru
Die Verwendung eines vollständig qualifizierten Netzwerknamens außer localhost hat für mich funktioniert. Stellen Sie einfach sicher, dass es in der clientseitigen 'Hosts'-Datei deklariert ist.
Fabien Haddadi
2
Hinweis für Cygwin-Benutzer: Wenn der Cygwin-MySQL-Client beispielsweise versucht, eine Verbindung zu einem lokalen WAMP-MySQL-Server herzustellen, verwenden Sie -h <anderer Hostname als localhost>. Versuchen Sie nicht, eine mysql.sock-Datei zu erstellen und in einer beliebigen my.cnf-Datei zu deklarieren. Dies funktioniert nicht.
Fabien Haddadi
Ein falscher Hostname hat mir genau den gleichen Fehler gegeben. Ein Blick auf die /etc/hostsDatei in meinem Docker-Container zeigte mir den MySQL-Hostnamen mysql. Die Verwendung des gleichen Hostnamens in meiner Verbindungskonfiguration hat das Problem behoben.
Stephane
188

Stellen Sie sicher, dass Ihr MySQL-Dienst ausgeführt wird

service mysqld start

Versuchen Sie dann eine der folgenden Möglichkeiten:

(wenn Sie kein Passwort für MySQL festgelegt haben)

mysql -u root

wenn Sie bereits ein Passwort festgelegt haben

mysql -u root -p
Haja Peer Mohamed H.
quelle
5
auf neueren Versionen von debian: service mariadb startweil mariadb.org/debian-9-released-mariadb-mysql-variant
Zahra
2
Gib dem Kerl eine Medaille.
Siraj Alam
Das war die Antwort für mich. Da ich Mariadb verwende, bestand die Lösung darin, Folgendes auszuführen: "sudo systemctl start mariadb". Danach war alles gut.
Mohsen
Geben Sie @Zahra eine Medaille
Ahmed C
28

Wenn Ihre Datei my.cnf (normalerweise im Ordner etc) korrekt konfiguriert ist mit

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

Sie können mit dem folgenden Befehl überprüfen, ob MySQL ausgeführt wird:

mysqladmin -u root -p status

Versuchen Sie, Ihre Berechtigung in den Ordner "MySQL" zu ändern. Wenn Sie lokal arbeiten, können Sie Folgendes versuchen:

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

das hat es für mich gelöst

Marimaf
quelle
Es funktioniert auch für mich, aber nachdem ich auf die neueste Version aktualisiert habe, erscheint dieses Problem. Kann ich wissen, warum dies passiert?
Ben
sudo chmod -R 777 / var / lib / mysql / Arbeitete für mich mit einem Problem, das ich beim Starten eines Docker-Containers mysql hatte
user3152459
23

Der MySQL-Server wird nicht ausgeführt oder dies ist nicht der Speicherort seiner Socket-Datei (überprüfen Sie my.cnf).

Dan Grossman
quelle
Ich hatte das oben beschriebene Problem und dies war das Problem. Vielen Dank.
oshirowanen
3
Wo würde das für Homebrew installiert werden?
Pal4life
19

Höchstwahrscheinlich mysql.sockexistiert nicht in /var/lib/mysql/.

Wenn Sie dieselbe Datei an einem anderen Ort finden, verknüpfen Sie sie mit folgenden Symbolen:

Zum Beispiel: Ich habe es in /data/mysql_datadir/mysql.sock

Wechseln Sie den Benutzer zu MySQL und führen Sie ihn wie folgt aus:

su mysql

ln -s /data/mysql_datadir/mysql.sock /var/lib/mysql/mysql.sock

Das hat mein Problem gelöst

sreddy
quelle
Das Umbenennen von mysql.sock in etwas anderes, das Neustarten von mysqld ("service mysqld restart") und das Umbenennen von etwas anderem in mysql.sock funktionierten für mich. Eine kleine Variation dieser Antwort, also danke.
Fuzzy-Analyse
Diese Antwort kann helfen, die mysql.sockDatei zu finden
Nobita
15

Wenn Sie ein aktuelles RHEL verwenden, müssen Sie möglicherweise Mariadb (eine Open-Source-MySQL-Datenbank) anstelle der MySQL-Datenbank starten:

yum remove mysql
yum -y install mariadb-server mariadb
service mariadb start

Sie sollten dann wie gewohnt auf MySQL zugreifen können:

mysql -u root -p
duhaime
quelle
Zu Ihrer Information, dies funktioniert auch für CentOS 8.1. Vergessen Sie nicht, nach der Installation mariadb-serverund mariadbauszuführen mysql_secure_installation, um einige unsichere Standardeinstellungen zu bereinigen.
Dio Phung
13

In meinem Fall habe ich Socket - Datei an einem anderen Ort innerhalb bewegt /etc/my.cnf von /var/lib/mysql/mysql.sockzu/tmp/mysql.sock

Selbst nach dem Neustart des mysqld-Dienstes wird immer noch die Fehlermeldung angezeigt, wenn ich versuche, eine Verbindung herzustellen. ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

Das Problem liegt in der Art und Weise, wie der Client konfiguriert ist. Durch Ausführen der Diagnose wird tatsächlich der richtige Socket-Pfad angezeigt. z.Bps aux | grep mysqld

Werke:

mysql -uroot -p -h127.0.0.1
mysql -uroot -p --socket=/tmp/mysql.sock

Funktioniert nicht:

mysql -uroot -p
mysql -uroot -p -hlocalhost

Sie können dieses Problem beheben , indem Sie dieselbe Socket- Zeile unter [client]Abschnitt in der MySQL-Konfiguration hinzufügen .

Dejan
quelle
13

Bearbeiten Sie /etc/my.cnf einfach Folgende Zeilen hinzufügen zumy.cnf

[mysqld]

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

[client]

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

Starten Sie MySQL neu und stellen Sie erneut eine Verbindung her

MySQL -u Benutzer -p Passwort Datenbank -h Host;

minhas23
quelle
Die einzig richtige Antwort. Ich frage mich, warum es nicht genug Stimmen gibt.
CentAu
11

Überprüfen Sie, ob Ihr mysqld-Dienst ausgeführt wird oder nicht. Wenn er nicht ausgeführt wird, starten Sie den Dienst.

Wenn Ihr Problem nicht gelöst ist, suchen /etc/my.cnfund ändern Sie Folgendes wie folgt: Eine Zeile beginnt mit socket. Erstellen Sie eine Sicherungskopie dieser Datei, bevor Sie dieses Update durchführen.

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

Ändern

socket=/opt/lampp/var/mysql/mysql.sock -u root
vkGunasekaran
quelle
1
Hallo Sekar, ich habe "find / -name my.cnf" eingegeben und zwei Standorte erhalten. 1) /opt/lampp/etc/my.cnf 2) /etc/mysql/my.cnf. Also, welche zu verwenden .. Ich stellte hier eine Frage .. stackoverflow.com/questions/32437796/…
Nana Partykar
7

MariaDB, eine von der Community entwickelte Version von MySQL, ist in vielen Distributionen zur Standardimplementierung von MySQL geworden.

Also zuerst solltest du anfangen,

$ sudo systemctl start mariadb

Wenn dies fehlschlägt, versuchen Sie es lieber,

$ sudo systemctl start mysqld

Dann, um MySQL zu starten,

$ mysql -u root -p

Ab heute heißt das Paket in Fedora mariadb und in Ubuntu heißt es mariadb-server.

Möglicherweise müssen Sie es installieren, wenn es nicht bereits in Ihrem System installiert ist.

Gayan Weerakutti
quelle
7

Stellen Sie sicher, dass noch genügend Platz vorhanden ist /var. Wenn der MySQL-Dämon keine zusätzlichen Informationen auf das Laufwerk schreiben kann, wird der MySQL-Server nicht gestartet und führt zu dem FehlerCan't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

Erwägen Sie die Verwendung

expire_logs_days = 10
max_binlog_size = 100M

Auf diese Weise können Sie die Festplattennutzung niedrig halten.

Karthik
quelle
Vielen Dank, ich führe MySQL auf Oracle Virtualbox aus. Als ich einen Dump von meinem BD erstellt habe, ist mir der Speicherplatz ausgegangen und ich konnte den MySQL-Server nicht starten. Als ich die Dump-Datei löschte, konnte ich den MySQL-Server neu starten.
JayCee
1
Das hat es für mich gelöst. Ich hatte innodb_buffer_pool_size auf einen sehr hohen Wert für Produktionsumgebungen eingestellt und MySQL stürzte auf meiner virtuellen Maschine ab.
Benjamin Brizzi
1
Ich hatte dieses Problem bei der Verwendung von Phabricator und die Lösung wurde geändert innodb_buffer_pool_sizein my.cnf. Das Setzen auf einen kleinen Wert wie innodb_buffer_pool_size = 50Mist ein guter Test, um diese Hypothese zu verwerfen;)
Yercalamarino
Das war das verdammte Problem, alles außer Speicherplatz überprüft. Freigegebener Platz von / var, es kam zurück!
Nadjib Mami
5

Folgendes hat bei mir funktioniert:

ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock
service mysqld restart
Benutzer
quelle
4

Bitte überprüfen Sie, ob ein anderer MySQL-Dienst ausgeführt wird.

Kishore Relangi
quelle
4

Stellen Sie sicher, dass Sie den Server gestartet haben:

mysql.server start

Dann verbinden Sie sich mit dem Root-Benutzer:

mysql -uroot
Deniz Ozger
quelle
3

Wenn Ihre MySQL zuvor funktioniert hat und plötzlich gestoppt wurde, starten Sie den Server einfach neu.

War mit diesem Problem auf meinem CentOS VPS konfrontiert .->

Wurde ständig bekommen

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

Versuchte alle Techniken, schließlich ein Neustart des Servers behoben die Probleme ->

shutdown -r now

Hoffe das hilft !!

Shashank Agarwal
quelle
3

Versuchen

echo 0 > /selinux/enforce
dvin
quelle
3

Wenn Sie Dateien in / var / lib / mysql ändern [wie kopieren oder ersetzen], müssen Sie den Eigentümer der Dateien auf mysql setzen. Dies ist so wichtig, wenn der Neustart von mariadb.service fehlerhaft war

chown -R mysql: mysql / var / lib / mysql / *

chmod -R 700 / var / lib / mysql / *

Mohsen Beiranvand
quelle
2

Geben Sie zuerst "service mysqld start" ein und melden Sie sich an

hPrasad
quelle
was willst du sagen? Bitte lesen Sie die FAQ, bevor Sie hier eine Frage stellen
Freak
Diese Frage wurde vor drei Jahren erfolgreich beantwortet. Diese genaue Antwort wurde letztes Jahr vollständiger gegeben.
Cairnarvon
2

Bitte stellen Sie sicher, dass Sie den MySQL-Server korrekt installiert haben. Ich habe diesen Fehler viele Male festgestellt und denke, dass das Debuggen über den Socket kompliziert ist. Ich meine, es ist möglicherweise einfacher, ihn neu zu installieren.

Wenn Sie CentOS 7 verwenden, können Sie es wie folgt installieren:

Fügen Sie zunächst die MySQL-Community-Quelle hinzu
yum install http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm

Dann können Sie es von installieren yum install mysql-community-server

Starten Sie es mit systemctl: systemctl start mysqld

Zernel
quelle
1

Mein Problem war, dass ich MySQL erfolgreich installiert habe und es gut funktioniert hat.

Aber eines Tages trat der gleiche Fehler auf.

Es kann keine Verbindung zum lokalen MySQL-Server über den Socket '/var/lib/mysql/mysql.sock' hergestellt werden (2).

Und es gab keine mysql.sock-Datei.

Diese Lösung löste mein Problem und MySQL war wieder betriebsbereit:

Melden Sie sich als root an:

sudo su -

Lauf:

systemctl stop mysqld.service
systemctl start mysqld.service
systemctl enable mysqld.service

Test als root:

mysql -u root -p

MySQL sollte jetzt betriebsbereit sein.

Ich hoffe, das kann auch jemand anderem helfen.

Bharald
quelle
1

Beachten Sie, dass mysql zwar die Informationen zum Speicherort der Socket-Datei aus der Datei my.cnf liest, das Programm mysql_secure_installation dies jedoch manchmal nicht richtig zu tun scheint.

Wenn Sie also wie ich sind und während der Installation die Dinge durcheinander bringen, können Sie in eine Situation geraten, in der Sie mit MySQL eine Verbindung zur Datenbank herstellen können, aber das Ding kann nicht gesichert werden (ohne dieses Skript).

Um dies zu beheben, funktioniert der Vorschlag von sreddy gut: Erstellen Sie einen Softlink von der Stelle, an der das Skript den Socket erwarten würde, bis zu der Stelle, an der er sich tatsächlich befindet. Beispiel:

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

(Ich verwende / tmp / als Standardspeicherort für Sockets.)

Ellert van Koperen
quelle
1

Es hat bei mir mit den folgenden Änderungen funktioniert

Welcher Pfad für den Socket auch immer in [mysqld] und in [client] in my.cnf angegeben ist, starten Sie mysql neu

[mysqld] socket = / var / lib / mysql / mysql.sock

[client] socket = / var / lib / mysql / mysql.sock

minhas23
quelle
1

Eine Möglichkeit, diesen Fehler zu reproduzieren: Wenn Sie eine Verbindung zu einem fremden Server herstellen möchten, aber stattdessen eine Verbindung zu dem nicht vorhandenen lokalen Server herstellen möchten:

eric@dev ~ $ mysql -u dev -p
Enter password:
ERROR 2002 (HY000): Can't connect to local MySQL server through 
socket '/var/lib/mysql/mysql.sock' (2)
eric@dev ~ $

Sie müssen den Host also wie folgt angeben:

eric@dev ~ $ mysql --host=yourdb.yourserver.com -u dev -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 235
Server version: 5.6.19 MySQL Community Server (GPL)

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+-------------------------+
| Database                |
+-------------------------+
| information_schema      |
| mysql                   |
| performance_schema      |
+-------------------------+
3 rows in set (0.00 sec)

mysql> exit
Bye
eric@dev ~ $
Eric Leschinski
quelle
1

Dies mag ein dummer Vorschlag sein, aber stellen Sie zu 100% sicher, dass Ihre Datenbank weiterhin bei localhost gehostet wird. Wenn beispielsweise ein Netzwerkadministrator Amazon DB-Hosting ausgewählt (oder geändert) hat, benötigen Sie stattdessen diesen Hostnamen!

Der einzige ChemistryBlob
quelle
Ich verwende den Hosting-Anbieter 1 und 1 und habe diesen Fehler erhalten, nachdem ich ihn an den Host gesendet habe. Das Update bestand einfach darin, den Hostnamen "mysql -u dbo70123521 -p --host db70313321.db.1and1.com db703133520" anzugeben
rob
1

In meinem Fall habe ich eine neue Datenbank importiert und konnte danach keine Verbindung mehr herstellen. Schließlich wurde mir klar, dass dies ein Platzproblem war.

So können Sie die letzte Datenbank löschen und Ihre Festplatte erweitern oder was ich getan habe, einen Snapshot meiner virtuellen Maschine wiederherstellen.

Nur für den Fall, dass jemand das für nützlich hält

Evan
quelle
0

Beim Versuch, MySQL im SSH-Client zu verbinden, ist dieses Problem aufgetreten. Das Hinzufügen des Socket-Pfads zum Befehl ist hilfreich, wenn zwischen Sockets gewechselt werden muss.

> mysql -u user -p --socket=/path/to/mysql5143.sock
Jaak Kütt
quelle
0

Dies ist ein Problem, wenn Ihnen der Speicherplatz ausgeht. Die Lösung besteht darin, Speicherplatz von der Festplatte freizugeben.

Bitte lesen Sie mehr, um die Erklärung zu erhalten:

Wenn Sie MySQL unter LINUX ausführen, überprüfen Sie den freien Speicherplatz der Festplatte mit dem Befehl disk free:

 df 

wenn Sie so etwas bekommen:

Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda2              5162828   4902260         0 100% /
udev                    156676        84    156592   1% /dev
/dev/sda3              3107124     70844   2878444   3% /home

Dann ist das das Problem und jetzt haben Sie die Lösung!

Da mysql.sock im mysql-Ordner erstellt werden möchte, der sich fast immer unter dem root-Ordner befindet, konnte dies aufgrund von Platzmangel nicht erreicht werden.

Wenn Sie regelmäßig den Befehl ls im Verzeichnis mysql eingeben (unter openSUSE 11.1 unter / var / lib / mysql), erhalten Sie Folgendes:

hostname:/var/lib/mysql #
.protected  IT     files        ibdata1             mysqld.log  systemtemp
.tmp        NEWS   greekDB      mysql               mysqld.pid  test
ARXEIO      TEMP1  ib_logfile0  mysql.sock          polis
DATING      deisi  ib_logfile1  mysql_upgrade_info  restore

Die Datei mysql.sock wird häufig angezeigt und ausgeblendet (Sie müssen versuchen, mit dem ls zuzuteilen, um eine Instanz mit der Datei mysql.sock im Ordner zu treffen).

Dies wird durch nicht genügend Speicherplatz verursacht.

Ich hoffe, dass ich einigen Menschen helfen werde !!!! Vielen Dank!

c.chasapis
quelle
0

Ich musste explicit_defaults_for_timestampmy.cnf deaktivieren .

powtac
quelle
0

Versuchen Sie zuerst 2, 3 Lösungen. Fehler ist immer noch Popup & Wenn Sie nicht finden können/var/lib/mysql/mysql.sock

find /var/ -name mysql.sock

Überprüfen Sie den verfügbaren Speicherplatz in / var /

df

Wenn das Verzeichnis voll ist, entfernen Sie einige nicht nützliche Dateien / Verzeichnisse

rm /var/cache/*

Wahrscheinlich wird Ihr Problem jetzt sortiert.

Sadee
quelle
0

Wenn Sie sich in der Shell von sf.net befinden , versuchen Sie:

mysql --host=mysql-{LETTER} --user={LETTER}{GROUP ID}admin -p

Ändern Sie {LETTER} und {GROUP ID} wie in Ihrer MySQL-Datenbank des Projektadministratorprofils angegeben.

Chetabahana
quelle