MySQL schlägt fehl: mysql "FEHLER 1524 (HY000): Plugin 'auth_socket' ist nicht geladen"

126

Meine lokale Umgebung ist:

  • frisches Ubuntu 16.04
  • mit PHP 7
  • mit installiertem MySQL 5.7

    sudo apt-get install mysql-common mysql-server

Als ich versuchte, mich bei MySQL anzumelden (über CLI):

mysql -u root -p

Ich bin auf ein zyklisches Problem mit 3 Schritten gestoßen.

1) Zuerst gab es ein Socket-Problem

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

Lösung: PC neu starten.

Was zu einem weiteren Fehler führte:

2) Mit Zugriff verweigert

ERROR 1698 (28000): Access denied for user 'root'@'localhost'.

Mögliches Problem? Falsches Passwort für "root" Benutzer!

Lösung: Setzen Sie das Root-Passwort mit diesem Tutorial zurück .

Bei korrektem Passwort und funktionierendem Socket tritt der letzte Fehler auf.

3) Falsches Auth-Plugin

mysql "ERROR 1524 (HY000): Plugin 'unix_socket' is not loaded"

Hier habe ich angehalten oder bin irgendwie wieder zu 1) gekommen.

Tomáš Votruba
quelle
1
Ich bin froh, dass es gut für dich funktioniert :) Danke, dass du dich gemeldet hast!
Tomáš Votruba

Antworten:

371

Ich habe eine Lösung!

Ändern Sie beim Zurücksetzen des Root-Passworts in Schritt 2) auch das Auth-Plugin in mysql_native_password:

use mysql;
update user set authentication_string=PASSWORD("") where User='root';
update user set plugin="mysql_native_password" where User='root';  # THIS LINE

flush privileges;
quit;

Dadurch konnte ich mich erfolgreich anmelden!


Vollständige Codelösung

1. Führen Sie Bash-Befehle aus

1. Führen Sie zuerst diese Bash-Befehle aus

sudo /etc/init.d/mysql stop # stop mysql service
sudo mysqld_safe --skip-grant-tables & # start mysql without password
# enter -> go
mysql -uroot # connect to mysql

2. Führen Sie dann die MySQL-Befehle aus => Kopieren und fügen Sie diese manuell in CLI ein

use mysql; # use mysql table
update user set authentication_string=PASSWORD("") where User='root'; # update password to nothing
update user set plugin="mysql_native_password" where User='root'; # set password resolving to default mechanism for root user

flush privileges;
quit;

3. Führen Sie weitere Bash-Befehle aus

sudo /etc/init.d/mysql stop 
sudo /etc/init.d/mysql start # reset mysql
# try login to database, just press enter at password prompt because your password is now blank
mysql -u root -p 

4. Socket-Problem (aus Ihren Kommentaren)

Wenn Sie einen Socket- Fehler sehen, hat eine Community zwei mögliche Lösungen gefunden:

sudo mkdir -p /var/run/mysqld; sudo chown mysql /var/run/mysqld
sudo mysqld_safe --skip-grant-tables &

(danke an @Cerin)

Oder

mkdir -p /var/run/mysqld && chown mysql:mysql /var/run/mysqld  

(danke an @Peter Dvukhrechensky)


Blinde Pfade und mögliche Kantenfehler

Verwenden Sie 127.0.0.1 anstelle von localhost

mysql -uroot # "-hlocalhost" is default

Kann zu "fehlender Datei" oder SLT-Fehler führen.

mysql -uroot -h127.0.0.1

Funktioniert besser.

Überspringen Sie das Socket-Problem

Ich habe viele Möglichkeiten gefunden, mysqld.sockDateien zu erstellen , Zugriffsrechte zu ändern oder sie zu verknüpfen. Es war schließlich nicht das Problem.

Überspringen Sie die my.cnfDatei

Das Problem war auch nicht da. Wenn Sie sich nicht sicher sind, kann dies hilfreich sein .

Tomáš Votruba
quelle
3
Danke dafür. Dies ist auch eine hervorragende Antwort darauf, wie Sie den MySQL-Root-Pass zurücksetzen können. Sie können den Titel daher leicht bearbeiten, damit er angezeigt wird, bevor wir bereits auf das Socket-Problem stoßen.
Wtower
1
Ich bin froh, dass es geholfen hat. Wie würden Sie den Titel bearbeiten, um die Ursprungsnachricht beizubehalten? Ich verstehe, dass die Lösung das Zurücksetzen des Passworts erfordert, aber das Problem im Titel wird dadurch nicht gelöst. Dies ist ein komplexeres Versagen von mehr Punkten. Zum Zurücksetzen des Root-Passworts würde ich hier gehen: stackoverflow.com/a/6401963/1348344
Tomáš Votruba
1
@matanster Nicht wirklich, dies ist eine reine Schritt-für-Schritt-Testversion. Welches Betriebssystem verwenden Sie?
Tomáš Votruba
8
Ihr mysqld_safe-Aufruf ist falsch. Sie müssen stattdessen ausführen:sudo mkdir -p /var/run/mysqld; sudo chown mysql /var/run/mysqld; sudo mysqld_safe --skip-grant-tables &
Cerin
3
Bitte fügen Sie der Antwort eine mögliche Lösung des Socket-Problems hinzu. Wie dieses mkdir -p /var/run/mysqld && chown mysql:mysql /var/run/mysqldEs kann jemandem Zeit sparen
Peter Dvukhrechensky
41

Sie können wie folgt versuchen, es funktioniert für mich.

Server starten:

sudo service mysql start

Gehen Sie nun zum Sockenordner:

cd /var/run

Sichern Sie die Socke:

sudo cp -rp ./mysqld ./mysqld.bak

Server stoppen:

sudo service mysql stop

Stellen Sie die Socke wieder her:

sudo mv ./mysqld.bak ./mysqld

Starten Sie mysqld_safe:

 sudo mysqld_safe --skip-grant-tables --skip-networking &

Init MySQL-Shell:

 mysql -u root

Ändere das Passwort:

Wählen Sie daher zuerst die Datenbank aus

mysql> use mysql;

Geben Sie nun unten zwei Abfragen ein:

mysql> update user set authentication_string=password('123456') where user='root';
mysql> update user set plugin="mysql_native_password" where User='root'; 

Jetzt wird alles in Ordnung sein.

mysql> flush privileges;
mysql> quit;

Zur Überprüfung:

mysql -u root -p

getan!

N.B, After login please change the password again from phpmyadmin

Jetzt prüfen hostname/phpmyadmin

Username: root

Password: 123456

Weitere Informationen finden Sie unter Zurücksetzen des vergessenen Passworts phpmyadmin in Ubuntu

Bablu Ahmed
quelle
2
nur das funktioniert bei mir! Backup und Restore Socket ist ziemlich klug
touhid udoy
1
FEHLER 1045 (28000): Zugriff für Benutzer 'root' @ 'localhost' (mit Passwort: YES) vor dem "erledigt!" Geben
Sie
Ich habe die beschriebenen Schritte in phpmyadmin gelöst (dh Passwort ändern, Plugin ändern). Aus irgendeinem Grund hat 'set authentication_string = password (...)' dazu geführt, dass es nicht mehr funktioniert (Fehler 1045 (28000): Zugriff verweigert ...).
Fil
12

Der mysqlBefehl verwendet standardmäßig UNIX-Sockets, um eine Verbindung zu MySQL herzustellen.

Wenn Sie MariaDB verwenden, müssen Sie das Unix Socket Authentication Plugin auf der Serverseite laden .

Sie können dies tun, indem Sie die [mysqld]Konfiguration wie folgt bearbeiten :

[mysqld]
plugin-load-add = auth_socket.so

Je nach Verteilung befindet sich die Konfigurationsdatei normalerweise unter /etc/mysql/oder/usr/local/etc/mysql/

Rustyx
quelle
1
Dieses. In allen anderen Antworten wird erläutert, wie Sie den Fehler umgehen können. Dieser erklärt, wie man es löst.
Envite
Wenn Sie mit MariaDB 10.4.3 und höher arbeiten, sollte das Authentifizierungs-Plugin unix_socket standardmäßig installiert sein. Wenn Sie es jedoch beim Aktualisieren Ihres "Benutzers" fälschlicherweise als plugin = "auth_socket" anstelle von plugin = "unix_socket" referenzieren, werden Sie wird diese etwas irreführende Nachricht erhalten. In meiner Antwort geht es darum, wie ich das durcheinander gebracht habe.
Rohn Adams
9

Sie können diese folgenden Schritte ausprobieren:

Beenden Sie den MySQL-Dienst 1 .. sudo /etc/init.d/mysql stop

Melden Sie sich als root ohne Passwort an sudo mysqld_safe --skip-grant-tables &

Nach dem Login-MySQL-Terminal sollten Sie weitere Ausführungsbefehle benötigen:

use mysql;

UPDATE mysql.user SET authentication_string=PASSWORD('solutionclub3@*^G'), plugin='mysql_native_password' WHERE User='root';

flush privileges;

sudo mysqladmin -u root -p -S /var/run/mysqld/mysqld.sock shutdown

Nach dem Neustart Ihres MySQL- Servers Wenn immer noch ein Fehler auftritt, müssen Sie Folgendes besuchen: Zurücksetzen des MySQL 5.7-Root-Passworts Ubuntu 16.04

Inderpal Singh
quelle
8

Für Ubuntu 18.04 und MySQL 5.7

  • Schritt 1: sudo mkdir /var/run/mysqld;

    Schritt 2: sudo chown mysql /var/run/mysqld

    Schritt 3: sudo mysqld_safe --skip-grant-tables& beenden (verwenden Sie beenden, wenn es stecken bleibt)

Melden Sie sich ohne Passwort bei MySQL an

  • Schritt 4: sudo mysql --user=root mysql

    Schritt 5: SELECT user,authentication_string,plugin,host FROM mysql.user;

    Schritt 6: ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root'

Jetzt anmelden mit

  • mysql -u root -p <root>
Arunava Maiti
quelle
1
aber in welchem ​​Schritt darf ich den Pass für root setzen? weil ich es versucht habe $ mysql -u root -paber der Zugang noch verweigert. Access denied for user 'root'@'localhost' (using password: YES)Ich habe versucht, 'JA' Passwort
einzugeben
4

Probieren Sie es aus: sudo mysql_secure_installation

Arbeit ist in Ubuntu 18.04

Gorcer
quelle
1

Falls jemand hier landet, nachdem er denselben Fehler gemacht hat, den ich gemacht habe:

  1. Auf plugin="mysql_native_password"vorübergehend umgestellt . Hat meine Aufgaben ausgeführt.
  2. Versuchte zum „auth_socket“ Plugin zurück zu wechseln, aber es falsch verwiesen als plugin="auth_socket"die in Folgemysql "ERROR 1524 (HY000): Plugin 'auth_socket' is not loaded"
  3. Da ich mich nicht anmelden konnte, um diesen Fehler zu beheben, musste ich MySQL stoppen und die mysql_safeAuthentifizierung umgehen, um zum entsprechenden Plugin zu wechselnplugin="unix_socket"

Hoffentlich spart dies jemandem etwas Zeit, wenn er die Fehlermeldung des Originalplakats erhält, aber die wahre Ursache war das Flubben des Plugin-Namens, ohne dass das Plugin "auth_socket" selbst vorhanden war, was laut MariaDB-Dokumentation :

In MariaDB 10.4.3 und höher ist das Authentifizierungs-Plugin unix_socket standardmäßig installiert und wird standardmäßig vom Benutzerkonto 'root' @ 'localhost' verwendet.

Rohn Adams
quelle
-7

Sie können es mit den folgenden Befehlen versuchen:

hduser@master:~$ sudo /etc/init.d/mysql stop
[ ok ] Stopping mysql (via systemctl): mysql.service.
hduser@master:~$ sudo /etc/init.d/mysql start
[ ok ] Starting mysql (via systemctl): mysql.service.
Genghenggao
quelle
Können Sie das weiter erklären? Wie löst ein Neustart des Servers die angegebene Fehlermeldung?
Nico Haase