Fehler: 'Kann'keine Verbindung zum lokalen MySQL-Server über Socket '/var/run/mysqld/mysqld.sock' (2)' -- Fehlt /var/run/mysqld/mysqld.sock

Mein Problem begann damit, dass ich mich nicht mehr als root bei meiner mysql-Installation anmelden konnte. Ich habe versucht, mysql ohne aktivierte Passwörter laufen zu lassen... aber immer wenn ich den Befehl

# mysqld_safe --skip-grant-tables &

bekam ich nie die Eingabeaufforderung zurück. Ich habe versucht, [diese Anweisungen zur Wiederherstellung des Passworts] (http://www.cyberciti.biz/tips/recover-mysql-root-password.html) zu befolgen.

Der Bildschirm sieht einfach so aus:

root@jj-SFF-PC:/usr/bin# mysqld_safe --skip-grant-tables
120816 11:40:53 mysqld_safe Logging to syslog.
120816 11:40:53 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql

und ich bekomme keine Aufforderung, die SQL-Befehle zum Zurücksetzen des Passworts einzugeben.

Wenn ich es durch Drücken von CTRL + C beende, erhalte ich die folgende Meldung:

error: 'Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)'

Check that mysqld is running and that the socket: '/var/run/mysqld/mysqld.sock' exists!

Wenn ich den Befehl erneut ausführe und lange genug stehen lasse, erhalte ich die folgende Reihe von Meldungen:

root@jj-SFF-PC:/run/mysqld# 120816 13:15:02 mysqld_safe Logging to syslog.
120816 13:15:02 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
120816 13:16:42 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended

[1]+  Done                    mysqld_safe --skip-grant-tables
root@jj-SFF-PC:/run/mysqld#

Aber wenn ich dann versuche, mich als root anzumelden, indem ich:

# mysql -u root

erhalte ich die folgende Fehlermeldung:

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

Ich habe geprüft und die Datei /var/run/mysqld/mysqld.sock existiert nicht. Der Ordner schon, aber nicht die Datei.

Ich weiß auch nicht, ob das hilft oder nicht, aber ich habe find / -name mysqld laufen lassen und es kam heraus mit:

/var/run/mysqld - folder
/usr/sbin/mysqld - file
/run/mysqld - folder

Ich bin neu bei Linux und MySQL, also weiß ich nicht, ob das normal ist oder nicht. Aber ich füge diese Informationen nur für den Fall ein, dass sie helfen.

**Ich habe mich schließlich entschlossen, mysql zu deinstallieren und neu zu installieren.

apt-get remove mysql-server
apt-get remove mysql-client
apt-get remove mysql-common
apt-get remove phpmyadmin

Nachdem ich alle Pakete in der gleichen Reihenfolge wie oben neu installiert hatte, erhielt ich während der Installation von phpmyadmin den gleichen Fehler:

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

Also habe ich erneut versucht, zu deinstallieren/neu zu installieren. Dieses Mal habe ich nach der Deinstallation der Pakete auch alle mysql-Dateien und -Verzeichnisse an ihren jeweiligen Speicherorten manuell in mysql.bad umbenannt.

/var/lib/mysql 
/var/lib/mysql/mysql
/var/log/mysql
/usr/lib/perl5/DBD/mysql
/usr/lib/perl5/auto/DBD/mysql
/usr/lib/mysql
/usr/bin/mysql
/usr/share/mysql
/usr/share/dbconfig-common/internal/mysql
/etc/init.d/mysql
/etc/apparmor.d/abstractions/mysql
/etc/mysql

Dann habe ich versucht, mysql-server und mysql-client wieder zu installieren. Aber ich habe bemerkt, dass ich nicht nach einem Passwort gefragt werde. Sollte es nicht nach einem Admin-Passwort fragen?

Lösung

Um alle Socket-Dateien auf Ihrem System zu finden, führen Sie aus:

sudo find / -type s

Auf meinem Mysql-Server-System war der Socket unter /var/lib/mysql/mysql.sock geöffnet

Sobald Sie herausgefunden haben, wo der Socket geöffnet ist, fügen Sie die Zeile mit dem Pfad zur Socket-Datei in Ihre /etc/my.cnf-Datei ein oder bearbeiten Sie sie:

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

Manchmal gibt das Systemstartskript, das die ausführbare Befehlszeile gestartet hat, ein Flag --socket=path an. Dieses Flag könnte den my.cnf-Speicherort überschreiben, und das würde dazu führen, dass ein Socket nicht dort gefunden wird, wo er laut my.cnf-Datei sein sollte. Wenn Sie dann versuchen, den mysql-Befehlszeilen-Client auszuführen, wird er my.cnf lesen, um den Socket zu finden, aber er wird ihn nicht finden, da er von dem Ort abweicht, an dem der Server ihn erstellt hat. Solange Sie sich also nicht darum kümmern, wo der Socket liegt, sollte es ausreichen, die my.cnf so zu ändern, dass sie übereinstimmt.

Beenden Sie dann den mysqld-Prozess. Wie Sie dies tun, ist von System zu System unterschiedlich.

Wenn Sie Superuser im Linux-System sind, versuchen Sie eine der folgenden Methoden, wenn Sie nicht wissen, welche Methode Ihr Mysql-Setup verwendet:

  • service mysqld stop
  • /etc/init.d/mysqld stop
  • mysqladmin -u root -p shutdown
  • Einige Systeme sind nicht so eingerichtet, dass sie einen eleganten Weg haben, mysql zu stoppen (oder aus irgendeinem Grund reagiert mysql nicht), und Sie können mysql mit einer der beiden folgenden Methoden zwangsbeenden:
    • Ein Schritt: pkill -9 mysqld
    • Zwei Schritte (am wenigsten bevorzugt):
      • Finden Sie die Prozess-ID von mysql entweder mit pgrep mysql oder ps aux | grep mysql | grep -v grep.
      • Angenommen, die Prozess-ID ist 4969, beenden Sie den Prozess mit kill -9 4969.

Nachdem Sie dies getan haben, sollten Sie nach einer pid-Datei in /var/run/mysqld/ suchen und diese löschen

Stellen Sie sicher, dass die Berechtigungen auf Ihrem Socket so sind, dass der Benutzer, unter dem mysqld läuft, darauf lesen und schreiben kann. Ein einfacher Test ist es, den Socket auf volle Lese-/Schreibrechte zu öffnen und zu sehen, ob er noch funktioniert:

chmod 777 /var/run/mysqld/mysqld.sock

Wenn das Problem damit behoben ist, können Sie die Berechtigungen und den Besitz des Sockets je nach Bedarf auf der Grundlage Ihrer Sicherheitseinstellungen anpassen.

Außerdem muss das Verzeichnis, in dem sich der Socket befindet, für den Benutzer, der den mysqld-Prozess ausführt, erreichbar sein.

Kommentare (13)

Die Lösung ist viel einfacher.

  1. Zuerst müssen Sie herausfinden (im Terminal mit "sudo find / -type s"), wo sich Ihre mysql.sock Datei befindet. In meinem Fall war sie in /opt/lampp/var/mysql/mysql.sock.
  2. Starten Sie Terminal und geben Sie ein sudo Nautilus
    Dies startet Ihren Dateimanager mit Superuser-Rechten
  3. Navigieren Sie in Nautilus zu dem Ort, an dem sich Ihre Datei mysql.sock befindet
  4. Klicken Sie mit der rechten Maustaste auf die Datei und wählen Sie Make Link.
  5. Benennen Sie die Link-Datei in mysqld.sock um und klicken Sie dann mit der rechten Maustaste auf die Datei und Cut sie
  6. Gehen Sie zu /var/run und erstellen Sie einen Ordner namens mysqld und geben Sie ihn ein
  7. Klicken Sie nun mit der rechten Maustaste auf die Link-Datei und fügen Sie diese ein.
  8. Voila! Sie werden nun eine mysqld.sock Datei unter /var/run/mysqld/mysqld.sock haben :)
Kommentare (7)

Ich konfrontiert gleichen Fehler und fand, dass es aufgrund der Aktualisierung von Paketen war, so dass nach dem Neustart meines Systems ich Fehler behoben.

Ich denke, aufgrund von Sql-Bibliotheken / Pakete aktualisieren, dass der Fehler aufgetreten ist, so versuchen Sie dies, wenn Sie einige Upgrading tun :)

Kommentare (1)