Änderung des MySQL-Root-Passworts

94

Ich habe versucht, mein MySQL-Root-Passwort zurückzusetzen. Ich habe die Tabellen mysqld_safe --skip-grant-tables ausgeführt, das Root-Passwort aktualisiert und die Benutzertabelle überprüft, um sicherzustellen, dass sie vorhanden ist. Nach dem Neustart des MySQL-Daemons habe ich versucht, mich mit dem neuen Root-Passwort anzumelden, das ich gerade festgelegt habe, und trotzdem wird der Zugriff für Benutzer-Root-Fehler verweigert. Ich habe auch versucht, MySQL vollständig zu entfernen und neu zu installieren (einschließlich des Entfernens der Datei my.cnf) und immer noch kein Glück. Hat jemand Vorschläge, was ich als nächstes tun kann?

Danke im Voraus

Nick
quelle
2
Bitte posten Sie Ihren tatsächlichen Fehler
Vishwanath Dalvi
16
Wenn Sie nicht ausgesperrt sind, SET PASSWORD FOR 'root'@'localhost' = PASSWORD('somepassword'); ist dies am sichersten.
Sabgenton
Ich habe die Schritte im Video befolgt, um das Passwort auf einem meiner Server zu ändern. Youtu.be/gFo5DV_pSg8
Prem
Serverversion: 8.0.20-0ubuntu0.20.04.1 (Ubuntu) FEHLER 1064 (42000): In Ihrer SQL-Syntax ist ein Fehler aufgetreten. Überprüfen Sie das Handbuch, das Ihrer MySQL-Serverversion entspricht, auf die richtige Syntax für die Verwendung in der Nähe von 'PASSWORD ("1")' in Zeile 1 SET PASSWORD FOR 'root' @ 'localhost' = PASSWORD ("somepassword");
Disziplin

Antworten:

120

SET PASSWORD FOR 'root'@'localhost' = PASSWORD('mypass');

kta
quelle
7
Dies funktioniert für mich in 5.7, während die akzeptierte Antwort nicht lautet.
Stoopkid
2
Dies ist die richtige Lösung, wenn Ihr MySQL-Root-Passwort leer ist.
Fschuindt
3
> UPDATE mysql.user SET authentication_string = PASSWORD ('MyNewPass') WHERE user = 'root'; > SPÜLPRIVILEGIEN; In MySQL Version 5.7.x gibt es kein Kennwortfeld mehr in der MySQL-Tabelle. Es wurde durch authentication_string ersetzt.
Robert Anthony S. Tribiana
2
Dies gibt mir ein OK, aber mache eigentlich nichts
Freedo
1
Es ist ein zusätzlicher Befehl erforderlich FLUSH PRIVILEGES, um die Änderung wirksam zu machen, ohne den Datenbankserver neu zu starten.
NetVicious
59

Schauen Sie sich dies aus dem MySQL-Referenzhandbuch an:

Erster Login MySQL:

# mysql -u root -p

Dann an der MySQL-Eingabeaufforderung ausführen:

UPDATE mysql.user SET Password=PASSWORD('MyNewPass') WHERE User='root';

Dann

FLUSH PRIVILEGES;

Weitere Informationen finden Sie auf dieser Seite: Zurücksetzen des Root-Passworts: Unix Systems

VSB
quelle
Beim Aktualisieren des Kennworts des Benutzers wurde die Fehlermeldung "Sie verwenden den sicheren Aktualisierungsmodus und haben versucht, eine Tabelle ohne ein WHERE zu aktualisieren, das eine KEY-Spalte verwendet ..." angezeigt. Informationen zur Umgehung dieses Fehlers finden Sie unter stackoverflow.com/questions/11448068/… .
Joe Borysko
FEHLER 1064 (42000): In Ihrer SQL-Syntax ist ein Fehler aufgetreten. Überprüfen Sie das Handbuch, das Ihrer MySQL-Serverversion entspricht, auf die richtige Syntax für die Verwendung in der Nähe von '(' MyNewPass ') WHERE User =' root '' in Zeile 1
Disziplin
27
ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';

Das Zurücksetzen des Root-Passworts finden Sie in der MySQL-Dokumentation.

iamfaith
quelle
Diese Abfrage funktioniert für mich, aber das neue Passwort funktioniert nicht (Zugriff verweigert). Es funktioniert erst, nachdem ich den Root-Benutzer askubuntu.com/a/784347/160368 neu erstellt habe .
hlcs
1
funktioniert für mich unter MySQL 8.0.20 und nach dem Initialisieren des Datenordners mit diesem Befehlmysqld --initialize --console
A. Henteti
Dieser arbeitete für mich amMariaDB 10.5.4
Mo Beigi
26

Dies ist die aktualisierte Antwort für WAMP v3.0.6 und höher

> UPDATE mysql.user 
> SET authentication_string=PASSWORD('MyNewPass') 
> WHERE user='root';

> FLUSH PRIVILEGES;

In MySQL Version 5.7.x gibt es kein Kennwortfeld mehr in der MySQL-Tabelle. Es wurde durch authentication_string ersetzt. (Dies ist für das Terminal / die CLI)

UPDATE mysql.user SET authentication_string=PASSWORD('MyNewPass') WHERE user='root';

FLUSH PRIVILEGES;

(Dies gilt für PHPMyAdmin oder eine beliebige MySQL-Benutzeroberfläche)

Robert Anthony S. Tribiana
quelle
Diese Antwort ist eine der wenigen, die sagt, dass die mysql.userTabelle aktualisiert werden sollte. Beachten Sie, dass bei Verwendung einer anderen Datenbank (festgelegt durch den useBefehl) die Fehlermeldung angezeigt wird, dass die Tabelle usernicht vorhanden ist. Danke mein Herr!
Aleksandar
1
funktioniert bei mir . Ich benutze 5.7.x, es gibt keine mysql.userTabelle. andere Antworten sind veraltet
Siwei Shen 申思维
Freue mich zu helfen!!
Robert Anthony S. Tribiana
Ich rolle es zurück, weil ich beabsichtige,> wegen des Semikolons pro Zeile zu verwenden, das für das Terminal vorgesehen ist
Robert Anthony S. Tribiana
0 Zeilen betroffen, Zeilen übereinstimmen: 3 geändert: 0 ...?
Trainoasis
22

Fand es! Ich habe vergessen, das Passwort zu hashen, als ich es geändert habe. Ich habe diese Abfrage verwendet, um mein Problem zu lösen:

update user set password=PASSWORD('NEW PASSWORD') where user='root';

Ich habe das vergessen PASSWORD('NEW PASSWORD')und einfach das neue Passwort im Klartext eingegeben

Nick
quelle
Stellen
1
dev.mysql.com/doc/refman/5.0/en/resetting-permissions.html zeigt, wie Sie dies tun können, --init-file=wenn Sie aufpassen .
Sabgenton
3
Irgendeine Idee, warum, wenn ich denselben Befehl verwende, der folgende Fehler zurückgegeben wird? Fehler 1054 (42S22): Unbekannte Spalte 'Passwort' in 'Feldliste'
Adrian M.
Sie haben einen Fehler in Ihrer SQL-Syntax. Überprüfen Sie das Handbuch, das Ihrer MySQL-Serverversion entspricht, auf die richtige Syntax für die Verwendung in der Nähe von '(' NEUES PASSWORT '), wobei user =' root '' in Zeile 1
Disziplin
20

Bitte befolgen Sie die folgenden Schritte.

Schritt 1. hör auf mysql

Schritt 2. sudo mysqld_safe --skip-grant-tables

Schritt 3.mysql -u root

Schritt 4.use mysql;

Schritt 5.show tables;

Schritt 6.describe user;

Schritt 7.update user set authentication_string=password('1111') where user='root';

Login mit Passwort 1111

Lokesh G.
quelle
3
flush privilegesist als letzter Schritt wichtig.
Khom Nazid
Es ist wirklich mit dem Arsch gemacht. Ich habe alle Tutorials gemacht, um das Passwort zurückzusetzen. Alles funktioniert, außer wenn ich mich mit dem neuen Passwort anmelde, funktioniert es nicht.
Shidomaru NeveRage
Wenn mysqld nicht startet und eine Meldung wie diese mysqld-Daemon mit Datenbanken aus / var / lib / mysql mysqld_safe mysqld aus der PID-Datei /var/run/mysqld/mysqld.pid beendet wird, gehen Sie wie folgt vor: mkdir / var / run / mysqld chomod 777 / var / run / mysqld und beginne alles mit dem Betteln
jokermt235
18

Ich habe mich auch umgesehen und wahrscheinlich passen einige Antworten für bestimmte Situationen.

Meine Situation ist MySQL 5.7 auf einem Ubuntu 18.04.2 LTS-System:

(Holen Sie sich Root-Rechte)

$ sudo bash

(Passwort für Root-DB-Benutzer einrichten + Sicherheit in Schritten implementieren)

# mysql_secure_installation

(Geben Sie dem Root-Benutzer anstelle des Sockets Zugriff über das Kennwort.)

(+ edit: anscheinend musst du das passwort nochmal setzen?)

(Setzen Sie es nicht auf 'mySecretPassword' !!!)

# mysql -u root

mysql> USE mysql;
mysql> UPDATE user SET plugin='mysql_native_password' WHERE User='root';
mysql> set password for 'root'@'localhost' = PASSWORD('mySecretPassword'); 
mysql> FLUSH PRIVILEGES;
mysql> exit;

# service mysql restart

Vielen Dank an zetacu (und erich ) für diese hervorragende Antwort (nach ein paar Stunden Suche ...)

Viel Spaß :-D

S.

Bambus
quelle
Dies ist die bisher beste Antwort, zumindest für MySQL Server 5.7.
Zoltán Hajdú
Die beste Antwort. Danke dir.
Luciano Fantuzzi
10

Unter MySQL 8.0.4+

So aktualisieren Sie den aktuellen Root-Benutzer:

select current_user();
set password = 'new_password';

So aktualisieren Sie andere Benutzer:

set password for 'otherUser'@'localhost' = 'new_password';

So legen Sie die Kennwortrichtlinie fest, bevor Sie das Kennwort aktualisieren:

set global validate_password.policy = 0;
set password = 'new_password';
set password for 'otherUser'@'localhost' = 'new_password';

Andere / bessere Möglichkeit, das Root-Passwort zu aktualisieren:

mysql_secure_installation

Möchten Sie bei der 5.x-Authentifizierung bleiben, damit Sie weiterhin ältere Apps verwenden können?

Auf my.cnf

default_authentication_plugin = mysql_native_password

So aktualisieren Sie root:

set global validate_password.policy = 0;
alter user 'root'@'localhost' identified with mysql_native_password by 'new_password';
Carlito
quelle
7

Das hat bei mir funktioniert -

ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';

https://dev.mysql.com/doc/mysql-windows-excerpt/5.7/de/resetting-permissions-windows.html

LV98
quelle
FEHLER 1064 (42000): In Ihrer SQL-Syntax ist ein Fehler aufgetreten. Überprüfen Sie das Handbuch, das Ihrer MySQL-Serverversion entspricht, auf die richtige Syntax für die Verwendung in der Nähe von 'IDENTIFIED BY' MyNewPass 'in Zeile 1
trainoasis
Kopieren Sie einfach das genaue Over in SQL über CLI: o
trainoasis
Natürlich sshed zu meinem Server + mysql -u root -p, um zum mysql cli
trainoasis
6

Sie müssen das Passwort zurücksetzen! Schritte für Mac OSX (getestet und funktioniert) und Ubuntu

Stoppen Sie MySQL

$ sudo /usr/local/mysql/support-files/mysql.server stop

Starten Sie es im abgesicherten Modus:

$ sudo mysqld_safe --skip-grant-tables

(über der Zeile steht der gesamte Befehl)

Dies ist ein fortlaufender Befehl, bis der Vorgang abgeschlossen ist. Öffnen Sie daher ein anderes Shell- / Terminalfenster und melden Sie sich ohne Kennwort an:

$ mysql -u root

mysql> UPDATE mysql.user SET Password=PASSWORD('password') WHERE User='root';

Starten Sie MySQL

sudo /usr/local/mysql/support-files/mysql.server start

Ihr neues Passwort ist 'Passwort'.

tk_
quelle
Ich habe eine Nachricht: keine Datenbank ausgewählt
Mimouni
@ Mimouni versuchen Sie dies: stackoverflow.com/questions/21944936/…
tk_
5

Für MySQL 5.7.6 und höher:

ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';

Für MySQL 5.7.5 und früher:

SET PASSWORD FOR 'root'@'localhost' = PASSWORD('MyNewPass');
Eagle_Eye
quelle
3

Für die aktuellste MySQL-Version (8.0.16) hat keine dieser Antworten bei mir funktioniert.

Nachdem ich mir verschiedene Antworten angesehen und sie miteinander kombiniert hatte, habe ich Folgendes verwendet:

update user set authentication_string='test' where user='root';

Hoffe das hilft.

Suhas
quelle
2

Ein häufiger Fehler, auf den ich von Zeit zu Zeit stoße, ist, dass ich die -pOption vergesse. Sind Sie also sicher, dass Sie Folgendes verwendet haben:

mysql -u root -p
Marian Theisen
quelle
2

In MySQL 5.7 wird das Kennwort durch 'authentication_string' ersetzt.

verwenden

update user set authentication_string=password('myfavpassword') where user='root';
Kamal Reddy
quelle
2

Verwenden des Befehlszeilenprogramms mysqladmin zum Ändern des MySQL-Kennworts:

mysqladmin --user=root --password=oldpassword password "newpassword"

Quelle

Darush
quelle
1

Versuchte die Antwort von @kta, funktionierte aber nicht für mich.

Ich benutze MySQL 8.0

Das hat bei mir funktioniert:

mysql> SET PASSWORD FOR 'root'@'localhost' = 'yourpassword'

Kettentreppe
quelle
1
Bitte fügen Sie Ihrem Code eine Erklärung hinzu - wie genau löst dies eine sieben Jahre alte Frage?
Nico Haase
Es sieht so aus, als ob die Syntax in den letzten sieben Jahren geändert wurde. Es wird kein Passwort mit PASSWORD () dev.mysql.com/doc/refman/8.0/en/set-password.html
kangkyu
Passwort-Hash sollte eine 41-stellige Hexadezimalzahl sein
Mimouni
1

So viele Kommentare, aber mir wurde diese Methode geholfen:

sudo mysqladmin -u root password 'my password'

In meinem Fall hatte ich nach der Installation einen MySQL-Dienst ohne Passwort für den Root-Benutzer erhalten, und ich musste das Passwort für meine Sicherheit festlegen.

Konstantin Romanovsky
quelle
Es kann verwendet werden, um das MySQL-Root-Benutzerpasswort zurückzusetzen, ohne das alte zu kennen. Aug 07 16:21:55 ubuntupc sudo[93250]: user : TTY=pts/0 ; PWD=/home/user ; USER=root ; COMMAND=/usr/bin/mysqladmin -u root password 'my password'
Stellen Sie jedoch
0

Stoppen Sie alle Wamp-Dienste und verlassen Sie Wamp.

Öffnen Sie den Editor und geben Sie> SET PASSWORD FOR 'root' @ 'localhost' = PASSWORD ('') ein.

Speichern Sie es dann auf c: Laufwerk mit einem beliebigen Namen. wie folgt "c: /example.txt"

Jetzt gehe zu deinem "wamp" falder wamp> bin> mysql> mysql (deine Version)> bin in meinem Fallpfad ist "C: \ wamp \ bin \ mysql \ mysql5.6.17 \ bin".

Kopieren Sie nun Ihren Pfad und führen Sie cmd mit (Strg + r) aus. Geben Sie dann "cmd" ein (Eingabe).

Geben Sie cd ein, klicken Sie mit der rechten Maustaste auf cmd und fügen Sie den Pfad ein (geben Sie ein). Geben Sie nun (mysqld --init-file = C: \ example.txt) ohne geschweifte Klammern ein (geben Sie ein).

Starten Sie dann den PC neu oder öffnen Sie taskmgr und beenden Sie mysqld.exe

Starten Sie Wamp und Ihr Passwort wird entfernt ...

MohitGhodasara
quelle
0

Wenn Sie für MacOS-Benutzer Ihr Root-Passwort vergessen haben, ist die Antwort von @ thusharaK ( https://stackoverflow.com/a/28601069/5628856 ) gut, aber es gibt noch ein paar weitere Tricks:

Wenn Sie die Systemeinstellungen verwenden, um MySQL-Server zu starten, einfach

sudo mysqld_safe --skip-grant-tables

funktioniert möglicherweise nicht für Sie.

Sie müssen sicherstellen, dass die Befehlszeilenargumente mit der Systemstartkonfiguration identisch sind.

Der folgende Befehl funktioniert bei mir:

/usr/local/mysql/bin/mysqld --user=_mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --log-error=/usr/local/mysql/data/mysqld.local.err --pid-file=/usr/local/mysql/data/mysqld.local.pid --keyring-file-data=/usr/local/mysql/keyring/keyring --early-plugin-load=keyring_file=keyring_file.so --skip-grant-tables

Sie können verwenden

ps aux | grep mysql

um deine eigenen zu überprüfen.

Shaofei Cheng
quelle
-1

Unter Ubuntu

sudo dpkg-reconfigure mysql-server-5.5 

Ersetzen Sie 5.5durch Ihre aktuelle Version und Sie werden nach dem neuen Root-Passwort gefragt.

Mouneer
quelle
In welchem ​​Betriebssystem? Das macht keinen Sinn.
Khom Nazid