2013-06-03 07:32:18 +0000 2013-06-03 07:32:18 +0000
130
130

mysql how to fix Access denied for user 'root'@'localhost'

Bevor ich etwas vermassle, wenn ich mich mit $ mysql -u root -p einlogge und Datenbanken zeige:

+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| game_data |
| test |
+--------------------+

Dann versuchte ich, einen neuen Benutzer anzulegen und bemerkte, dass mit den PRIVILEGES etwas nicht stimmt.

Also löschte ich die neuen Benutzer, und ich schätze, ich habe versehentlich die ‘root’ und ‘Admin’ entfernt.

Dann versuche ich erneut, ‘root’ anzulegen, erhalte aber den Fehler Zugriff verweigert, wenn ich alle Privilegien erteile.

mysql> CREATE USER 'root'@'localhost' IDENTIFIED BY 'password';
mysql> grant all privileges on *.* to 'root'@'localhost' identified by 'password' with grant option;
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

Wenn ich mich wieder mit $ mysql -u root -p bei MySQL einlogge und Datenbanken zeige,

Alle anderen Datenbanken sind weg.

Wie behebe ich MySQL jetzt?

Ich kann die Datenbank ‘mysql’ nicht finden, kann keine Datenbank erstellen, keinen Benutzer anlegen, alles, was ich versuche zu tun, wird eine Fehlermeldung ausgeben.

FEHLER 1045 (28000): Zugriff verweigert für Benutzer ‘root’@‘localhost’ (mit Passwort: JA)

Sollte ich MySQL mit MacPorts neu installieren? Wenn ich neu installiere, verliere ich die Datenbank game_data, richtig?

Antworten (6)

138
138
138
2013-06-03 07:35:27 +0000

Befolgen Sie die folgenden Schritte:

  1. Starten Sie die MySQL-Serverinstanz oder den Dämon mit der Option --skip-grant-tables (Sicherheitseinstellung).

  2. Führen Sie diese Anweisungen aus.

Wenn Sie auf das unbekannte Feld treffen, verwenden Sie den obigen Passwortfehler:

update user set authentication_string=password('my_password') where user='root';
  1. Starten Sie schließlich die Instanz/Dämon ohne die Option --skip-grant-tables neu.

Sie sollten nun in der Lage sein, sich mit Ihrem neuen Passwort zu verbinden.

$ mysql -u root -p

Passwort eingeben: my_password

Fix für MySQL-Fehler “Unable to lock ibdata1”

sudo mv /usr/local/mysql/data/ibdata1 /usr/local/mysql/data/ibdata1.bak
sudo mv /usr/local/mysql/data/ib_logfile0 /usr/local/mysql/data/ib_logfile0.bak
sudo mv /usr/local/mysql/data/ib_logfile1 /usr/local/mysql/data/ib_logfile1.bak
sudo cp -a /usr/local/mysql/data/ibdata1.bak /usr/local/mysql/data/ibdata1
sudo cp -a /usr/local/mysql/data/ib_logfile0.bak /usr/local/mysql/data/ib_logfile0
sudo cp -a /usr/local/mysql/data/ib_logfile1.bak /usr/local/mysql/data/ib_logfile1
sudo /etc/init.d/mysql restart
74
74
74
2016-09-28 15:01:12 +0000

Keiner der oben genannten Punkte war für mich hilfreich. Ich fand, dass ich die Plugin-Methode löschen musste. In 5.6 konnte ich tun:

sudo mysql -u root
use mysql;
[mysql] update user set plugin='' where User='root';
[mysql] flush privileges;

In 5.7 fand ich, dass ich tun musste:

sudo mysql -u root
use mysql;
[mysql] update user set plugin='mysql_native_password' where User='root';
[mysql] flush privileges;

Laut den Dokumenten hätte das Plugin, wenn es auf eine leere Zeichenkette gesetzt war, effektiv auf mysql_native_password zurückgesetzt werden müssen, aber es könnte durch einen leeren Passwort-Hash verwirrt werden. Für weitere Nuancen können Sie die Dokumentation hier lesen: https://dev.mysql.com/doc/refman/5.7/en/native-authentication-plugin.html

8
8
8
2016-04-28 21:27:58 +0000

Stellen Sie auch sicher, dass der benötigte Datensatz in Tabelle user ein leeres plugin-Feld hat (es kann z.B. "unix_socket" sein).

Seit Version 5.5.7 unterstützt mysql verschiedene Auth-Plugins https://dev.mysql.com/doc/refman/5.6/en/authentication-plugins.html

Wenn Sie also ein nicht leeres plugin-Feld haben, dann wird das Passwort ignoriert und es gibt eine Warnung im mysql-Fehlerprotokoll (bei mir ist es /var/log/mysql/error.log):

[Warning] 'user' entry 'root@localhost' has both a password and an authentication plugin specified. The password will be ignored.

8
8
8
2016-01-22 23:08:02 +0000
grep 'temporary password' /var/log/mysqld.log
Sort date (newest date)

Vielleicht sehen Sie so etwas;

[root@SERVER ~]# grep 'temporary password' /var/log/mysqld.log
2016-01-16T18:07:29.688164Z 1 [Note] A temporary password is generated for root@localhost: O,k5.marHfFu
2016-01-22T13:14:17.974391Z 1 [Note] A temporary password is generated for root@localhost: b5nvIu!jh6ql
2016-01-22T15:35:48.496812Z 1 [Note] A temporary password is generated for root@localhost: (B*=T!uWJ7ws
2016-01-22T15:52:21.088610Z 1 [Note] A temporary password is generated for root@localhost: %tJXK7sytMJV
2016-01-22T16:24:41.384205Z 1 [Note] A temporary password is generated for root@localhost: lslQDvgwr3/S
2016-01-22T22:11:24.772275Z 1 [Note] A temporary password is generated for root@localhost: S4u+J,Rce_0t
[root@SERVER ~]# mysql_secure_installation

Sichern der MySQL-Server-Bereitstellung.

Wenn Sie sehen, dass da steht

Schauen Sie sich die letzten 10 Minuten von dieses Video an, es zeigt Ihnen, wie Sie es machen.

3
3
3
2017-11-10 20:13:46 +0000

In meinem Fall hatte ich eine Datenbankbeschädigung, nach dem Neustart von mysql auf Debian war der Root-Login ohne Passwort. Die Lösung war folgende :

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'test';

Einige andere Antworten haben auch das native_password-Plugin erwähnt, aber so kann man es ohne kompliziertes Herumgefummel machen. So soll es geändert werden.

3
3
3
2014-02-21 17:05:47 +0000

Versuchen Sie es:

mysql --no-defaults --force --user=root --host=localhost --database=mysql 
UPDATE user SET Password=PASSWORD('NEWPASSWORD') where USER='root';
FLUSH PRIVILEGES;