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?
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
pkill -9 mysqld
pgrep mysql
oder ps aux | grep mysql | grep -v grep
.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.
Die Lösung ist viel einfacher.
mysql.sock
Datei befindet. In meinem Fall war sie in /opt/lampp/var/mysql/mysql.sock
.sudo Nautilus
mysql.sock
befindetmysqld.sock
um und klicken Sie dann mit der rechten Maustaste auf die Datei und Cut sie/var/run
und erstellen Sie einen Ordner namens mysqld
und geben Sie ihn einmysqld.sock
Datei unter /var/run/mysqld/mysqld.sock
haben :)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 :)