Wie finde ich mein Root-MySQL-Passwort heraus?

73

Ich habe gerade MySQL unter Ubuntu installiert und der Root-Benutzer kann sich nicht anmelden :)

Wie kann ich mein Passwort wiederherstellen oder herausfinden? Die Verwendung von blank für Passwort funktioniert nicht.

Genadinik
quelle

Antworten:

140

Sie können das Root-Passwort zurücksetzen, indem Sie den Server mit --skip-grant-tablesausführen und sich ohne Passwort anmelden, indem Sie Folgendes als root (oder mit sudo) ausführen:

# service mysql stop
# mysqld_safe --skip-grant-tables &
$ mysql -u root
mysql> use mysql;
mysql> update user set authentication_string=PASSWORD("YOUR-NEW-ROOT-PASSWORD") where User='root';
mysql> flush privileges;
mysql> quit
# service mysql stop
# service mysql start
$ mysql -u root -p

Jetzt sollten Sie sich mit Ihrem neuen Passwort als root anmelden können.

Es ist auch möglich, die Abfrage zu finden, mit der das Kennwort zurückgesetzt wurde, /home/$USER/.mysql_historyoder /root/.mysql_historyden Benutzer, der das Kennwort zurückgesetzt hat. Die oben genannten Abfragen funktionieren jedoch immer.

Hinweis: Vor MySQL 5.7 wurde die Spalte passwordanstelle von aufgerufen authentication_string. Ersetzen Sie die obige Zeile durch

mysql> update user set password=PASSWORD("YOUR-NEW-ROOT-PASSWORD") where User='root';
Benjamin Manns
quelle
4
@Benjamin Ich habe alle Schritte in Ihrer Antwort ausgeführt, aber ich erhalte immer noch den Zugriff für Benutzer 'root' @ 'localhost' verweigert - irgendwelche Ideen warum?
Genadinik
4
Für MySql 5.7: UPDATE mysql.user SET authentication_string = PASSWORD ('MyNewPass'), password_expired = 'N' WHERE User = 'root' AND Host = 'localhost';
TungstenX
22
Nachdem dpkgich all dies viele Male und den folgenden Ansatz ausprobiert hatte und sehr frustriert war, dass nichts funktionierte (übrigens verwende ich 16.04 mit mysql-sever-5.7), bemerkte ich, dass MySQL meine neuen Anmeldeinformationen akzeptieren würde, wenn ich sudo zum Verbinden verwenden würde. dh sudo mysql -u root -p ohne sudo bekomme ich Access denied for user 'root'@'localhost'. Ich musste Sudo noch nie verwenden, und ich sehe es hier nicht erwähnt, aber nach einer frustrierenden Stunde scheint das die Lösung zu sein.
Matt
1
@ Matt gleich hier. Ich musste noch nie zuvor sudoMySQL verwenden und jetzt muss ich? Ich verstehe nicht, warum ich der Root-Linux-Benutzer sein muss, um auf das Root-Konto in MySQL zuzugreifen. Diese Art von Verhalten erinnert mich ein bisschen mehr an postgresql.
JMac
3
Für alle, die sich nur als Shell-Root anmelden können, besuchen
Sie
20

Mir ist klar, dass dies ein alter Thread ist, aber ich dachte, ich würde ihn mit meinen Ergebnissen aktualisieren.

Alex, es hört sich so an, als hätten Sie den MySQL-Server über das Metapaket 'mysql-server' installiert. Dadurch wird das neueste Paket als Referenz installiert (in meinem Fall mysql-server-5.5). Ich wurde wie Sie beim Einrichten nicht wie erwartet zur Eingabe eines MySQL-Passworts aufgefordert. Ich nehme an, es gibt zwei Antworten:

Lösung 1: Installieren Sie MySQL unter dem vollständigen Namen:

$ sudo apt-get install mysql-server-5.5

Oder

Lösung 2: Konfigurieren Sie das Paket neu ...

$ sudo dpkg-reconfigure mysql-server-5.5

Sie müssen den vollständigen Paketnamen angeben. Die Verwendung des Metapakets 'mysql-server' hatte für mich nicht das gewünschte Ergebnis. Ich hoffe das hilft jemandem :)

Referenz: https://help.ubuntu.com/12.04/serverguide/mysql.html

theinfinitenigma
quelle
Vielen Dank! Ich habe es weiter versucht sudo dpkg-reconfigure mysql-server, aber das hat nicht funktioniert.
Ross Rogers
1
Dies war erfolgreich, aber ich wurde nicht nach einem Root-Passwort für MySQL in Ubuntu 18.04 sudo dpkg-reconfigure mysql-server-5.7
gefragt
yup, läuft auch 5.7 und die Neukonfiguration fragt NICHT nach einem Root-Passwort ...? Was gibt und was ist die Standardeinstellung?
Arne
17
sudo mysql -u root
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'YOUR_PASSWORD_HERE';
FLUSH PRIVILEGES;

mysql -u root -p # and it works
Alex Ivasyuv
quelle
2
Dies ist die einzige Lösung, die für mich auf Ubuntu 16.04 LTS
Rajesh
Vielen Dank. Ihre Lösung hat bei mir funktioniert. Der Autor des Beitrags sollte seine MySQL-Version angegeben haben. Meins ist 5.7.27.
Askar
9

MySQL 5.5 unter Ubuntu 14.04 erforderte etwas andere Befehle, wie hier empfohlen . In einer Nussschale:

sudo /etc/init.d/mysql stop
sudo /usr/sbin/mysqld --skip-grant-tables --skip-networking &
mysql -u root

Und dann von der MySQL-Eingabeaufforderung

FLUSH PRIVILEGES;
SET PASSWORD FOR root@'localhost' = PASSWORD('password');
UPDATE mysql.user SET Password=PASSWORD('newpwd') WHERE User='root';
FLUSH PRIVILEGES;

Und die zitierte Quelle bietet auch eine alternative Methode.

eebbesen
quelle
Können Sie helfen und Details darüber liefern, was genau das Folgende bewirkt? --skip-grant-tables --skip-networking & Es war sehr hilfreich für mich, Kundenanfragen zu beantworten, aber ich möchte mehr darüber erfahren, damit ich das Risiko einschätzen kann. Vielen Dank!
Immer noch Fragen
skip-grant-tablesDies erfordert sicherlich Vorsicht, da jeder, der Zugriff auf den Server hat, auf alle Schemas für die Instanz zugreifen kann. skip-networkingist meiner Meinung nach weniger problematisch, aber Sie sollten es selbst beurteilen. Wenn ich versuche, das Root-Passwort ohne das aktuelle Root-Passwort zurückzusetzen, betrachte ich mich bereits als Sicherheitsgurke :). Ich bin mir nicht sicher, ob es einen "sichereren" Ansatz gibt.
Eebbesen
1
Ich habe diesen FEHLER 2002 (HY000) erhalten: Es kann keine Verbindung zum lokalen MySQL-Server über den Socket '/var/run/mysqld/mysqld.sock' (2) [1] + Exit 1 sudo / usr / sbin / mysqld --skip hergestellt werden -grant-Tabellen - Skip-Networking
Hos Mercury
4

Für RHEL-mysql 5.5:

/etc/init.d/mysql stop

/etc/init.d/mysql start --skip-grant-tables

 mysql> UPDATE mysql.user SET Password=PASSWORD('newpwd') WHERE User='root';
 mysql> FLUSH PRIVILEGES;
 mysql> exit;

mysql -uroot -pnewpwd

mysql>  
Gurumurthy
quelle
2
Sie könnten in der Antwort etwas ausführlicher sein. Bitte erläutern Sie, was die von Ihnen vorgeschlagenen Befehle bewirken.
Pablo Jomer
2

Hmm Mysql 5.7.13, um alles zurückzusetzen, was ich getan habe, war:

$ sudo service mysql stop MySQL zu stoppen

$ mysqld_safe --skip-grant-tables & Starten Sie MySQL

$ mysql -u root

Genau wie die richtige Antwort. Dann habe ich nur noch das getan, was @eebbesen getan hat.

mysql> SET PASSWORD FOR root@'localhost' = PASSWORD('NEW-password-HERE');

Hoffe es hilft jemandem da draußen :)

Joseph Briggs
quelle
2

Hier ist der beste Weg, um Ihr Root-Passwort festzulegen: Source Link Schritt 3 funktioniert perfekt für mich.

Befehle für Sie

  1. sudo mysql
  2. SELECT Benutzer, Authentifizierungszeichenfolge, Plugin, Host FROM mysql.user;
  3. ALTER USER 'root' @ 'localhost' IDENTIFIZIERT MIT mysql_native_password BY 'password';
  4. SPÜLPRIVILEGIEN;
  5. SELECT Benutzer, Authentifizierungszeichenfolge, Plugin, Host FROM mysql.user;
  6. Ausfahrt

Jetzt können Sie das Passwort für den Root-Benutzer verwenden: ' Passwort ':

  1. mysql -u root -p
  2. CREATE USER 'sammy' @ 'localhost' IDENTIFIED BY 'password';
  3. GEWÄHRLEISTEN SIE ALLE PRIVILEGIEN . TO 'sammy' @ 'localhost' MIT GRANT OPTION;
  4. SPÜLPRIVILEGIEN;
  5. Ausfahrt

Testen Sie Ihren MySQL-Dienst und Ihre Version:

systemctl status mysql.service
sudo mysqladmin -p -u root version
Irshad Khan
quelle
1

Wenn Sie unter MYSQL 5.7 MySQL für Entwicklungszwecke verwenden, gehen Sie einfach wie folgt vor:

1.kill mysql:

$ sudo service mysql stop

2.Starten Sie MySQL im Modus --skip-grant-tables:

$ sudo mysqld_safe --skip-grant-tables 

und außerdem könnten Sie versuchen, die Benutzertabelle im Modus "Skip-Grant-Tabelle" zu ändern, aber ich bin gescheitert.

Dies ist also nur eine Problemumgehung.

Siwei Shen 申思维
quelle
1

Es gibt eine einfache Lösung.

MySql 5.7 wird mit einem anonymen Benutzer geliefert, sodass Sie den MySQL-Server neu konfigurieren müssen.

Sie können dies mit diesem Befehl tun

versuchen Sie, einen temporären Pass zu finden:

grep 'temporary password' /var/log/mysqld.log

dann:

sudo mysql_secure_installation

Unter diesem Link finden Sie weitere Informationen zu MySQL 5.7

https://dev.mysql.com/doc/refman/5.7/en/linux-installation-yum-repo.html

Stevan Tosic
quelle
Ich stimme mit Ihnen ein.
Nouatzi
1

Es ist eigentlich sehr einfach. Sie müssen nicht viel durchmachen. Führen Sie einfach den folgenden Befehl im Terminal aus und befolgen Sie die Anweisungen auf dem Bildschirm.

sudo mysql_secure_installation
Santhosh Kalisamy
quelle
Falsche Antwort. Sie beantworten die Frage nicht.
Mentallurg