Root-Passwort von MySQL kann nicht zurückgesetzt werden

28

Ich muss das root-Passwort meiner lokalen MySQL-Installation zurücksetzen, aber es lässt mich nicht. Ich habe es versucht:

$ sudo /etc/init.d/mysql stop
 * Stopping MySQL database server mysqld                                                                                                              [ OK ] 
[1]-  Exit 1                  sudo /usr/sbin/mysqld --skip-grant-tables --skip-networking
[2]+  Exit 1                  sudo /usr/sbin/mysqld --skip-grant-tables --skip-networking
reg@regDesktopHome:~$ sudo mysqld --skip-grant-tables &
[1] 13651
reg@regDesktopHome:~$ 140627 19:02:02 [Warning] Using unique option prefix key_buffer instead of key_buffer_size is deprecated and will be removed in a future release. Please use the full name instead.

reg@regDesktopHome:~$ mysql -u root mysql
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
reg@regDesktopHome:~$ sudo mysql -u root mysql
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
[1]+  Exit 1                  sudo mysqld --skip-grant-tables

Wie kann ich das Passwort zurücksetzen lassen? edit 1 Ich habe folgendes bekommen:

$ ps ax| grep mysql
16515 ?        Ssl    0:00 /usr/sbin/mysqld
16551 pts/23   S+     0:00 grep --color=auto mysql
reg@regDesktopHome:~/semios/v3upgrade$ sudo kill -9 16515
reg@regDesktopHome:~/semios/v3upgrade$ ps ax| grep mysql
16678 ?        Ssl    0:00 /usr/sbin/mysqld
16715 pts/23   S+     0:00 grep --color=auto mysql
reg@regDesktopHome:~/semios/v3upgrade$ mysql -u root
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

Es sieht so aus, als würde ein Prozess automatisch mysql neu starten, sobald ich es beendet habe ...

stdcerr
quelle

Antworten:

43

Bitte versuchen Sie es zuerst mit

mysql -u root -p

und geben Sie Ihr Passwort ein (falls Sie sich erinnern), wenn Sie aufgefordert werden, sich als SQL-Root-Benutzer anzumelden (beachten Sie, dass der Schalter -pfür das Passwort ist).

Wenn Sie Ihr root-Passwort für mysql wirklich zurücksetzen müssen, gehen Sie wie folgt vor: Konfigurieren Sie das Paket mit neu dpkg-reconfigure.

Einfache Schritte zum Zurücksetzen des mySQL-Root-Passworts:

  1. Überprüfen Sie die Version Ihres mysql-server;

    apt-cache policy mysql-server
    

    und sehen Sie für die Zeile, die die installierte Version neben anderen Informationen zeigt. zB für meine Installation ist es:

    Installed: 5.5.37-0ubuntu0.12.04.1
    

    (Daraus weiß ich, dass ich mysql-server-5.5in meinem System installiert habe.)

  2. Starten Sie die Neukonfiguration mit:

    sudo dpkg-reconfigure mysql-server-*.*
    

    Wo mysql-server-*.*sollte durch die Version ersetzt werden, die Sie haben. (für mich wäre es mysql-server-5.5). Dadurch wird der Datenbankdämon gestoppt. Daraufhin wird eine Eingabeaufforderung angezeigt, in der Sie Ihr neues Passwort eingeben und die Neukonfiguration bestätigen müssen.

    snap1

    Der Daemon wird nach Abschluss der Neukonfiguration automatisch gestartet.

  3. Sie können sich dann einloggen mit:

    mysql -u root -p
    

    und starten Sie Ihre Datenbankadministrationsaufgaben.

Verweise:

  1. https://help.ubuntu.com/community/MysqlPasswordReset [Wird bald wie auf der Seite angegeben bereinigt.]

  2. Ubuntu Server Guide für Ihre spezifische Version.

präzise
quelle
2
Kann bestätigen, dass dies dpkg-reconfigure mariadb-server-10.1für MariaDB funktioniert hat, obwohl dies für alle anderen Lösungen nicht der Fall war. Danke dafür.
Liviucmg
19
dpkg-reconfigureIch habe kein Passwort abgefragt. Gibt es eine Möglichkeit, es zu erzwingen?
Unruhe
15
Hat bei mir nicht funktioniert. Ich habe den Befehl wie oben beschrieben verwendet und "Überprüfen, ob ein Update erforderlich ist. Diese Installation von MySQL ist bereits auf 5.7.13 aktualisiert. Verwenden Sie --force, wenn Sie mysql_upgrade noch ausführen müssen". Die Verwendung von --force ergab die gleiche Antwort.
Anthony Scaife
5
Anscheinend funktioniert das nicht mehr.
dpi
1
@Paulo Henrique Nein. Angesichts der Situation haben wir entschieden, dass die beste Nutzung unserer Zeit eine vollständige Neuinstallation des Servers ist.
Anthony Scaife
21

Referenz aus diesem Blog entnommen:

Schritt 1: Beenden Sie den MySQL-Dienst.

sudo service mysql stop

Schritt 2: Beenden Sie alle laufenden mysqld.

sudo killall -9 mysqld

Schritt 3: Starten von mysqld im abgesicherten Modus.

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

Schritt 4: Starten Sie den MySQL-Client

mysql -u root

Schritt 5: Führen Sie nach erfolgreicher Anmeldung diesen Befehl aus, um ein Kennwort zu ändern.

FLUSH PRIVILEGES;

Schritt 6: Sie können das mysql-root-Passwort aktualisieren.

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

für mysql> 5.7 benutze dies anstelle von oben:

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

Schritt 7: Bitte führen Sie diesen Befehl aus.

FLUSH PRIVILEGES;

Schritt 8: Beenden Sie die MySQL-Konsole

exit

Schritt 9: Töte mysqld_safe und starte mysql

sudo killall mysqld_safe && sudo service mysql start
Anvesh
quelle
1
sollte sein sudo service mysql stop, nichtsudo stop mysql
knocte
1
außerdem fehlen am ende die sudo killall mysqld_safe && sudo service mysql start
schritte
3
Für MYSQL 5.7 wurde die Syntax zum Ändern des Kennworts aufALTER USER root IDENTIFIED BY 'NEW_PASSWORD_HERE'
Tarek Fadel
7
HINWEIS ! In MySQL 5.7 gibt es ein neues Biest namens auth_socket. Wenn Sie mysql ohne root-Passwort installieren, greift das Biest Sie an und Sie verlieren 50 Trefferpunkte. In Schritt 6 oben müssen Sie ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'NEWPASS';. Sie können darüber lesen Sie hier . Theoretisch (ich habe es nicht versucht) sollten Sie in der Lage sein, sich ohne Passwort bei mysql anzumelden, wenn Sie "sudo su -", um root zu werden.
Olafure
3
Und falls ALTER USER ...es nicht UPDATE mysql.user SET authentication_string = PASSWORD('NEWPASS'), plugin = 'mysql_native_password' WHERE User = 'root' AND Host = 'localhost';
klappt
9

Unter Ubuntu 16.04 und mysql-server-5.7ist die korrekte Antwort der letzte Kommentar von olafure, der dpkg-reconfigure mysql-server-5.7nicht mehr funktioniert.

sudo service mysql stop
sudo killall mysqld
sudo mysqld_safe --skip-grant-tables --skip-networking &
mysql -u root

Jetzt in der MySQL-Konsole >mysql

USE mysql;
UPDATE user SET authentication_string=PASSWORD('newpass') WHERE user='root';
FLUSH PRIVILEGES;
\q

Starten Sie den guten mysql Prozess neu

sudo killall mysqld
sudo service mysql start

Überprüfen Sie Ihr neues Passwort

mysql -u root -p
Enter password: newpass
mysql>
Pierre-Damien
quelle
5
Bei der mysqld_safeAusführung, erhalte ich die Fehlermeldung: Directory '/var/run/mysqld' for UNIX socket file don't exists.. Also bin ich gelaufen sudo mkdir /var/run/mysqld; sudo chown mysql /var/run/mysqldund der Rest der obigen Antwort funktioniert. Ist das ein Bug auf Ubuntu 16? Ich habe noch nie zuvor all diese Probleme beim Aktualisieren von Passwörtern erlebt.
Chester
@ Chester vielen Dank !! Dies war der einzige Weg, der nun endlich funktionierte, da alle anderen Lösungen einen Fehler auslösten. (Ubuntu-Server 16.04 hier) Dies sollte der Antwort hinzugefügt werden
derHugo
3

Beginnend mit MySQL 5.7 basiert die Authentifizierung für diesen Benutzer bei der Erstinstallation auf dem auth_socketPlugin , wenn Sie das Kennwort leer lassen .

Die richtige Art, das Passwort zu ändern, ist:

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

https://www.percona.com/blog/2016/03/16/change-user-password-in-mysql-5-7-with-plugin-auth_socket/

Barun
quelle
Dies war genau mein Fall (leeres Passwort während der Installation in MySQL 5.7) und dies war die einzige Lösung für meinen Fall.
Cherouvim
Ich erhalte die Nachricht:ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement
user2513149
@ user2513149 Bitte starten Sie Ihren MySQL-Server ohne --skip-grant-tablesOption neu und sehen Sie, dass diese Lösung funktioniert.
Barun
@Barun, nein, ohne --skip-grant-tablesOption kann ich mich nicht einmal als root bei MySQL anmelden. Es heißtERROR 1698 (28000): Access denied for user 'root'@'localhost'
user2513149
Gelöst! Ich musste mich bei der regulären MySQL-Konsole (nicht mysqld_safe) als root ohne Passwort anmelden . Ich habe Ubuntu 18.04 und MySQL-Server-5.7. Diese Antwort hat mir geholfen, askubuntu.com/a/767252/585252 (siehe unterer Teil)
user2513149
1

Nichts aus den restlichen Antworten schien für mich zu funktionieren. Das ist meine Lösung:

sudo service mysql stop
sudo mysqld_safe &
sudo mysql -u root

Da drin:

ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';
FLUSH PRIVILEGES;
QUIT;

Dann:

sudo killall mysqld
sudo service mysql start
sudo mysql -u root -p
Wtower
quelle
1
Der Rest funktioniert bei mir weder ... noch deine Lösung leider: Immer noch dieser Fehler 2017-05-30T06:33:22.291126Z mysqld_safe Logging to syslog. 2017-05-30T06:33:22.294375Z mysqld_safe Logging to '/var/log/mysql/error.log'. 2017-05-30T06:33:22.296874Z mysqld_safe Directory '/var/run/mysqld' for UNIX socket file don't exists.
derHugo
1
Dies ist der einzige Rat, der für mich von den sechs Vorschlägen, die ich ausprobiert habe, funktioniert, aber ich habe @Chesters Bit oben hinzugefügt, um den Fehler "UNIX-Socket-Datei existiert nicht" zu vermeiden: sudo mkdir /var/run/mysqld; sudo chown mysql /var/run/mysqldDies ist auf MySQL 5.7 und Ubuntu 18.04 .
Zweirad
0

Erstellen Sie eine Datei mit diesem:

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

Stoppen Sie den MySQL-Server und führen Sie Folgendes aus:

mysqld_safe --init-file=/home/me/mysql-init &

Weitere Informationen finden Sie hier: http://dev.mysql.com/doc/refman/5.0/de/resetting-permissions.html

Elier
quelle