Was ist das Standard-Root-Passwort für MySQL 5.7?

78

Nach der Neuinstallation mit Root-ID und leerem / keinem Kennwort kann ich mich nicht wie bei anderen älteren MySQL-Versionen bei der MySQL-Datenbank anmelden

Ryan
quelle
6
root hat keine mehr, weil es keine verwendet. Standardmäßig ist die Auth-Methode Auth Socket. Verwenden Sie sudo, um mit Root-Zugriff zuzugreifen, ändern Sie die Auth-Methode in Kennwort und legen Sie ein Kennwort fest, wenn Sie ein Root-lmysql-Oogin ohne Root-Systemzugriff benötigen.
G. Martin
3
@ G.Martin Würde es Ihnen etwas ausmachen, diesen Kommentar zu einer Antwort mit detaillierteren Schritten zu erweitern? Ich denke, dies ist die Lösung, die ich verwenden möchte, aber ich weiß nicht, wie ich die Auth-Methode ändern soll. ( sudo mysql -u rootfunktioniert für mich - ich möchte es ändern, damit ich einfach mysql -u rootohne Passwort
Max Williams
Entschuldigung, Sie haben das wahrscheinlich schon herausgefunden, aber ich habe herausgefunden, dass mein Beitrag nur für Debian-Distributionen gilt. Wenn es immer noch ein Problem ist (bezweifle es), kann ich mehr Details liefern.
G. Martin

Antworten:

150

Es gibt so viele Antworten, die besagen, dass MySQL neu installiert oder eine Kombination aus verwendet werden soll

mysqld_safe --skip-grant-tables

und / oder

UPDATE mysql.user SET Password=PASSWORD('password')

und / oder etwas anderes ...

... Nichts davon hat bei mir funktioniert


Hier ist, was für mich unter Ubuntu 18.04 von oben funktioniert hat

Mit besonderer Anerkennung für diese Antwort, dass sie mich aus der Frustration herausgeholt hat ...

$ sudo apt install mysql-server
$ sudo cat /etc/mysql/debian.cnf

Beachten Sie die Zeilen, die lauten:

user     = debian-sys-maint
password = blahblahblah

Dann:

$ mysql -u debian-sys-maint -p
Enter password: // type 'blahblahblah', ie. password from debian.cnf

mysql> USE mysql
mysql> SELECT User, Host, plugin FROM mysql.user;
+------------------+-----------+-----------------------+
| User             | Host      | plugin                |
+------------------+-----------+-----------------------+
| root             | localhost | auth_socket           |
| mysql.session    | localhost | mysql_native_password |
| mysql.sys        | localhost | mysql_native_password |
| debian-sys-maint | localhost | mysql_native_password |
+------------------+-----------+-----------------------+
4 rows in set (0.00 sec)

mysql> UPDATE user SET plugin='mysql_native_password' WHERE User='root';
mysql> COMMIT;  // When you don't have auto-commit switched on

Entweder:

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';

Oder:

// For MySQL 5.7+
UPDATE mysql.user SET authentication_string=PASSWORD('new_password') where user='root';

Dann:

mysql> FLUSH PRIVILEGES;
mysql> COMMIT;  // When you don't have auto-commit switched on
mysql> EXIT

$ sudo service mysql restart
$ mysql -u root -p
Enter password: // Yay! 'new_password' now works!
Stewart
quelle
3
Ich habe diese Schritte befolgt und es funktioniert bei mir nicht. Alles sieht gut aus, aber sobald ich MySQL neu starte, wird der Plugin-Wert auf zurückgesetzt auth_socket. Irgendeine Idee, was fehlt?
Matt Raible
4
Hat anfangs bei mir nicht funktioniert. Dann habe ich versucht, vor EXIT ein COMMIT auszugeben, und es hat funktioniert!
LeandroG
2
Arbeitete für mich, aber anstatt: mysql -u debian-sys-wart -p zu verwenden, musste ich verwenden: sudo mysql -u root. Als ich den ersten verwendete, wurden die Änderungen selbst mit COMMIT
Peter
2
Müssen commit;vorher machen FLUSH PRIVILEGES;.
Eric Wang
3
Habe das getestet. MySQL 5.7+, das standardmäßig mit 18.04 LTS installiert ist, ändert das Passwort mit, UPDATE mysql.user SET authentication_string=PASSWORD('new_password') where user='root';so dass Sie das anstelle vonALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';
Nachricht
109

Nachdem Sie MySQL-community-server 5.7 unter Linux installiert haben, müssen Sie das temporäre Kennwort aus /var/log/mysqld.log suchen, um sich als root anzumelden.

  1. grep 'temporary password' /var/log/mysqld.log
  2. Ausführen mysql_secure_installation, um ein neues Passwort zu ändern

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

Ryan
quelle
7
Vielen Dank! Etwas verrückt, diese Informationen hier anstelle des MySQL 5.7-Dokuments von Oracle zu finden.
maddin2code
7
Das rettet mein Leben ... habe überall nach Lösungen gesucht und das löst mein ganzes Problem. Sogar das Dokument von der MySQL-Website erwähnte dies nicht. Das ist ein verrückter Mann. Vielen Dank!
Nodeffect
1
Wo würden Sie auf einem Windows-Computer suchen?
Rotaercz
21
/var/log/mysqld.log existiert nicht für mich (Mariadb auf Minze)
Donquixote
9
Für diejenigen, die das nicht finden können /var/log/mysqld.log, laufen Sie einfach sudo mysql_secure_installation. Denken Sie daran, diesen Befehl mit auszuführen, sudooder Sie erhalten den Fehler "Zugriff verweigert".
SarahCoding
31

MySQL 5.7 hat das sichere Modell geändert: Jetzt erfordert die MySQL-Root-Anmeldung ein Sudo

Die einfachste (und sicherste) Lösung besteht darin, einen neuen Benutzer zu erstellen und die erforderlichen Berechtigungen zu erteilen.

1. Stellen Sie eine Verbindung zu MySQL her

sudo mysql --user=root mysql

2. Erstellen Sie einen Benutzer für phpMyAdmin

CREATE USER 'phpmyadmin'@'localhost' IDENTIFIED BY 'some_pass';
GRANT ALL PRIVILEGES ON *.* TO 'phpmyadmin'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;

Referenz - /ubuntu/763336/cannot-enter-phpmyadmin-as-root-mysql-5-7

Sachin Vairagi
quelle
5
Um ehrlich zu sein, habe ich diese Antwort zunächst als ziemlich dumm verworfen und unzählige andere Dinge ausprobiert, einschließlich der Suche nach zufällig generierten Passwörtern in Dateien, die auf meinem lokalen Ubuntu-Computer nicht vorhanden waren. Ein einfaches SUDO und ein leeres Passwort haben es jedoch gerade getan. Habe eine positive Bewertung!
MrTony
14

MySQL Server 5.7 wurde bereits standardmäßig auf meinem neuen Linux Mint 19 installiert.

Aber wie lautet das MySQL- rootPasswort? Es stellt sich heraus, dass:

Die Standardinstallation verwendet die auth_socketAuthentifizierung anstelle von Passwörtern!

Es ermöglicht eine kennwortfreie Anmeldung, sofern eine mit demselben Benutzernamen am Linux-System angemeldet ist. Um sich als MySQL-Root useranzumelden, kann man sudo verwenden:

sudo mysql --user=root

Aber wie kann man dann das Root-Passwort ändern? Um zu veranschaulichen, was los ist, habe ich einen neuen Benutzer "ich" mit vollen Berechtigungen erstellt, mit:

mysql> CREATE USER 'me'@'localhost' IDENTIFIED BY 'my_new_password';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'me'@'localhost' WITH GRANT OPTION;
mysql> FLUSH PRIVILEGES;

"Ich" mit "Wurzel" vergleichen:

mysql> SELECT user, plugin, HEX(authentication_string)  FROM mysql.user WHERE user = 'me' or user = 'root';
+------+-----------------------+----------------------------------------------------------------------------+
| user | plugin                | HEX(authentication_string)                                                 |
+------+-----------------------+----------------------------------------------------------------------------+
| root | auth_socket           |                                                                            |
| me   | mysql_native_password | 2A393846353030304545453239394634323734333139354241344642413245373537313... |
+------+-----------------------+----------------------------------------------------------------------------+

Da auth_socket verwendet wird, kann das Root-Passwort nicht geändert werden: Der SET PASSWORDBefehl schlägt fehl und mysql_secure_installationes wird nichts erreicht ...

==> So zappen Sie diesen alternativen Authentifizierungsmodus und bringen den MySQL- rootBenutzer wieder zur Verwendung von Kennwörtern:

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

Eine gute Erklärung.

Weitere Details finden Sie im MySQL-Handbuch .

Julian - BrainAnnex.org
quelle
7

Wenn Sie MySQL oder Percona unbeaufsichtigt installieren möchten (wie in meinem Fall ansible), können Sie das folgende Skript verwenden:

# first part opens mysql log
# second part greps lines with temporary password
# third part picks last line (most recent one)
# last part removes all the line except the password
# the result goes into password variable

password=$(cat /var/log/mysqld.log | grep "A temporary password is generated for" | tail -1 | sed -n 's/.*root@localhost: //p')

# setting new password, you can use $1 and run this script as a file and pass the argument through the script

newPassword="wh@teverYouLikE"

# resetting temporary password

mysql -uroot -p$password -Bse "ALTER USER 'root'@'localhost' IDENTIFIED BY '$newPassword';"
hpaknia
quelle
cat: /var/log/mysqld.log: No such file or directoryIch benutze Ubuntu 18.04 und habe es über tasksel installiert. Hast du einen vorschlag
AboElnouR
Ich würde danach suchen:find / -name mysqld 2>/dev/null
hpaknia
5

MySQL 5.7 oder neuer generiert nach der Neuinstallation ein temporäres Standardkennwort.

Um MySQL zuerst verwenden zu können, müssen Sie das Kennwort aus der Protokolldatei abrufen, die auf der Website vorhanden ist /var/log/mysqld.log. Befolgen Sie also den folgenden Prozess:

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

  2. mysql_secure_installation

Der zweite Befehl ist erforderlich, um das Kennwort für MySQL zu ändern und bestimmte andere Änderungen vorzunehmen, z. B. temporäre Datenbanken entfernen, Remotezugriff für Root-Benutzer zulassen oder nicht zulassen, anonyme Benutzer löschen usw.

Vipul Sharma
quelle
4

Nach vielen Versuchen konnte ich das Standardkennwort mit den folgenden Befehlen (Ubuntu und Derivate) zurücksetzen:

sudo -i
mkdir -p /var/run/mysqld
chown mysql:mysql /var/run/mysqld
/etc/init.d/mysql stop
mysqld_safe --skip-grant-tables &
mysql -uroot
use mysql;
update user set authentication_string=password('YOURPASSWORD') where user='root';
update user set plugin="mysql_native_password" where User='root';  
flush privileges;
quit;
sudo /etc/init.d/mysql stop
sudo /etc/init.d/mysql start

Manchmal sogar nach dem Eingeben im Terminal

mkdir -p /var/run/mysqld
chown mysql:mysql /var/run/mysqld
/etc/init.d/mysql stop
mysqld_safe --skip-grant-tables &

Ich habe den Fehler erhalten, dass mysqld nicht existiert. Beenden Sie also und geben Sie dieselben Befehle erneut ein.

Und der letzte Befehl

sudo /etc/init.d/mysql start

Funktioniert manchmal nicht. Erst nach dem Neustart des Computers.

Leonardo
quelle
1
Arbeitete an Ubuntu Bionic 18.04 Mysql 5.7.29. Ich dachte nur, ich würde die Versionen hinzufügen. Vielen Dank.
Gavin Simpson
3

Keine dieser Antworten funktionierte für mich unter Ubuntu Server 18.04.1 und MySQL 5.7.23. Ich habe einige Zeit damit verbracht, das Passwort und das Authentifizierungs-Plugin manuell festzulegen, das Passwort in Protokollen zu finden (es ist nicht vorhanden) usw.

Die Lösung ist eigentlich super einfach:

sudo mysql_secure_installation

Es ist wirklich wichtig, dies zu tun sudo. Wenn Sie es ohne Erhöhung versuchen, werden Sie nach dem Root-Passwort gefragt, das Sie offensichtlich nicht haben.

Bendodge
quelle
Danke Kumpel, du hast meinen Tag gerettet!
Avtomaton
3

Es scheint, dass die Dinge so konzipiert wurden, dass Entwickler den Root-Benutzer nicht sehen können. Eine bessere Lösung wäre:

sudo mysql -u root

Erstellen Sie dann einen normalen Benutzer, legen Sie ein Kennwort fest und verwenden Sie diesen Benutzer zum Arbeiten.

create user 'user'@'localhost' identified by 'user1234';
grant all on your_database.* to 'user'@'localhost';
select host, user from mysql.user;

Versuchen Sie dann, auf Folgendes zuzugreifen:

mysql -u user -p

Boom!

Pablo Pazos
quelle
Nee. Es wurde entwickelt, um ein Kennwort für root anstelle eines leeren Kennworts festzulegen.
Ryan
1
Standardmäßig ist die Verbindung nur über einen lokalen Socket mit root möglich. In beiden Fällen ist es eine schlechte Praxis, root zu verwenden, um eine Verbindung zu MySQL herzustellen, selbst für Entwickler. In meiner Antwort wird beschrieben, wie eine gute Praxis zum Erstellen eines Nicht-Root-Benutzers verwendet wird, der tatsächlich funktioniert.
Pablo Pazos
1

Ich habe gerade Linux Mint 19 (basierend auf Ubuntu 18.04) auf meinem Computer installiert. Ich habe MySQL 5.7 vom Repo installiert ( sudo apt install mysql-server ) und überraschenderweise hat das Setup während der Installation nicht zur Eingabe des Root- Passworts aufgefordert . Infolgedessen konnte ich mich nicht bei MySQL anmelden. Ich habe hier und da gegoogelt und verschiedene Antworten ausprobiert, die ich im Internet gefunden habe, einschließlich der oben akzeptierten Antwort. Ich habe deinstalliert (alle dpkgs mit mysql im Namen löschen ) und erneut von den Standard-Linux Mint-Repositorys installiert. KEIN funktioniert.

Nach stundenlangen unproduktiven Arbeiten habe ich beschlossen, MySQL von der offiziellen Seite neu zu installieren. Ich habe die MySQL-Download-Seite ( https://dev.mysql.com/downloads/repo/apt ) für apt repo geöffnet und auf Download geklickt unten rechts auf die Schaltfläche .

Führen Sie es als Nächstes mit dpkg aus:

sudo dpkg -i mysql-apt-config_0.8.10-1_all.deb

Wählen Sie beim Installationssetup die MySQL-Version aus, die Sie installieren möchten. Die Standardoption ist 8.0, aber ich habe sie in 5.7 geändert. Klicken Sie zum Beenden auf OK. Danach haben Sie ein neues MySQL-Repo in Ihren Softwarequellen.

Aktualisieren Sie Ihr Repo:

sudo apt update

Installieren Sie abschließend MySQL:

sudo apt install mysql-server

Und jetzt wurde ich aufgefordert, das Root- Passwort anzugeben! Hoffe, es hilft für andere mit der gleichen Erfahrung.

Firdaus Adiputra
quelle
Ich habe Tage damit verbracht, es während der Installation mysql-servervon Ubuntu Repo zu lösen, aber am Ende funktioniert offiziell das, was MySQL bietet.
Inam Ul Huq
0

In meinem Fall wurde das Datenverzeichnis automatisch mit der --initialize-insecureOption initialisiert . Enthält /var/log/mysql/error.logalso kein temporäres Passwort aber:

[Warnung] root @ localhost wird mit einem leeren Passwort erstellt! Bitte deaktivieren Sie die Option --initialize-unsicher.

Was funktionierte war:

shell> mysql -u root --skip-password
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';

Details: MySQL 5.7 Referenzhandbuch> 2.10.4 Sichern des anfänglichen MySQL-Kontos

Ra.
quelle
0

Ich hatte das gleiche Problem und das einzige, was ich tun konnte, um es zum Laufen zu bringen, war diesen Weg zu gehen:

drop user admin@localhost;
flush privileges;
create user admin@localhost identified by 'admins_password'

Dadurch konnte ich meinen Benutzernamen neu erstellen und ein Passwort für den Benutzernamen eingeben .

Donald L Wilson
quelle
0

Ab Ubuntu 20.04 mit MySql 8.0 : Sie können das Passwort folgendermaßen festlegen:

  1. Melden Sie sich bei MySQL mit an sudo mysql -u root

  2. Änder das Passwort:

USE mysql;
UPDATE user set authentication_string=NULL where User='root';
FLUSH privileges;
ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'My-N7w_And.5ecure-P@s5w0rd';
FLUSH privileges;
QUIT

Jetzt sollten Sie in der Lage sein, sich mit mysql -u root -p(oder mit dem Benutzernamen root bei phpMyAdmin) und Ihrem gewählten Passwort anzumelden.

P, S:

Sie können sich auch mit dem Benutzer anmelden debian-sys-maint, das Passwort wird in die Datei geschrieben/etc/mysql/debian.cnf

Ohad Cohen
quelle