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?
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?
Antworten:
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.
/etc/hosts
Datei in meinem Docker-Container zeigte mir den MySQL-Hostnamen mysql
. Die Verwendung des gleichen Hostnamens in meiner Verbindungskonfiguration hat das Problem behoben.
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
service mariadb start
weil mariadb.org/debian-9-released-mariadb-mysql-variant
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
Der MySQL-Server wird nicht ausgeführt oder dies ist nicht der Speicherort seiner Socket-Datei (überprüfen Sie my.cnf).
Höchstwahrscheinlich mysql.sock
existiert 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
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
mariadb-server
und mariadb
auszuführen mysql_secure_installation
, um einige unsichere Standardeinstellungen zu bereinigen.
In meinem Fall habe ich Socket - Datei an einem anderen Ort innerhalb bewegt /etc/my.cnf
von /var/lib/mysql/mysql.sock
zu/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 .
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;
Ü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.cnf
und ä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
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.
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.
innodb_buffer_pool_size
in my.cnf
. Das Setzen auf einen kleinen Wert wie innodb_buffer_pool_size = 50M
ist ein guter Test, um diese Hypothese zu verwerfen;)
Bitte überprüfen Sie, ob ein anderer MySQL-Dienst ausgeführt wird.
Stellen Sie sicher, dass Sie den Server gestartet haben:
mysql.server start
Dann verbinden Sie sich mit dem Root-Benutzer:
mysql -uroot
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 !!
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 / *
Geben Sie zuerst "service mysqld start" ein und melden Sie sich an
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
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.
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.)
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 ~ $
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!
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
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!
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.
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.