MySQL-Passwort abgelaufen. Kann keine Verbindung herstellen

86

Ich habe gerade meinen Mac abgewischt und El Capitan neu installiert. Ich habe jetzt Probleme, mich mit MySQL zu verbinden. Nachdem ich einen Webserver-Setup-Prozess durchlaufen habe, habe ich eine einfache PHP-Testdatei erstellt:

<?php
  $conn = new mysqli("127.0.0.1", "root", "xxxxxxxx");
  if ($conn->connect_error) echo "Connection failed: " . $conn->connect_error; 
  else echo "Connected successfully";
  phpinfo();
?>

Wenn ich es ausführe, erhalte ich folgende Fehlermeldung:

Warning: mysqli::mysqli(): (HY000/1862): Your password has expired. To log in you must change it using a client that supports expired passwords. in /Users/rich/Documents/DESIGN/test/index.php on line 3
Connection failed: Your password has expired. To log in you must change it using a client that supports expired passwords.

Ich habe diese Antwort von einer Verbindung noch nie gesehen. Wie behebe ich das Problem, wenn ich keine Verbindung herstellen kann?

BEARBEITEN

Im Terminal habe ich den Befehl eingegeben:

mysql -u root -p

Dies fragte mich nach meinem Passwort (aktuelles), das ich eingegeben habe. Ich habe jetzt Zugriff auf MySQL-Befehle, aber alles, was ich versuche, führt zu diesem Fehler:

ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.

Wie setze ich das Passwort mit zurück ALTER USER?

CaribouCode
quelle
Ich habe das gleiche Problem.
Rohan Sanap
Das ist wirklich ärgerlich, dass ein ganzer Dienst aus diesem Grund heruntergefahren werden kann
2.
1
Versuchen Sie zu laufen/usr/local/mysql/bin/mysqladmin -u root -p password
Connor Leech
1
@ConnorLeech hat stundenlang versucht, das abgelaufene MariaDB-Root-Passwort von Homebrew zurückzusetzen, aber das hat es für mich behoben - danke!
Alex Holsgrove

Antworten:

178

Also habe ich endlich selbst die Lösung gefunden.

Zuerst ging ich ins Terminal und tippte:

mysql -u root -p

Dies fragte nach meinem aktuellen Passwort, das ich eingegeben hatte, und es gab mir Zugriff, um mehr MySQL-Befehle bereitzustellen. Alles, was ich von hier aus versuchte, gab diesen Fehler:

ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.

Dies ist verwirrend, da ich keine Möglichkeit gefunden habe, das Kennwort mithilfe der ALTER USERAnweisung zurückzusetzen, aber ich habe eine andere einfache Lösung gefunden:

SET PASSWORD = PASSWORD('xxxxxxxx');

CaribouCode
quelle
Hat das richtig funktioniert? Hat es nach dem Befolgen dieser Schritte in Zukunft einen Fehler gegeben?
Rohan Sanap
Vielen Dank! Das hat auch bei mir funktioniert. Hat mir viele Stunden gespart.
TBJ
5
Ich verwende Version 5.7.9 von MySQL und dies ist jetzt veraltet, da diese Fehlermeldung an der MySQL-Eingabeaufforderung uns mitteilt: Warnung (Code 1287): 'SET PASSWORD = PASSWORD (' <Einfachtextkennwort> ')' ist veraltet und wird in entfernt eine zukünftige Version. Bitte verwenden Sie stattdessen SET PASSWORD = '<plaintext_password>'
Fabiano
Es tut mir leid, dass dies bei mir nicht funktioniert hat, aber der von Piotr N. gepostete Alter User hat funktioniert. Möglicherweise mit einer anderen Version von MySQL arbeiten.
MG Developer
89

Zuerst benutze ich:

 mysql -u root -p

Geben Sie mein aktuelles Passwort für das 'root' an. Nächster:

mysql> ALTER USER `root`@`localhost` IDENTIFIED BY 'new_password',
       `root`@`localhost` PASSWORD EXPIRE NEVER;

Ändern Sie 'new_password'ein neues Passwort für den Benutzer 'root'.
Es hat mein Problem gelöst.

Piotr N.
quelle
3
Fehler erhalten: FEHLER 1064 (42000): 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 'USER' root '@' localhost 'IDENTIFIED BY' newPassword ',' root '@' localhost 'PASSWORD' in Zeile 1
Ketav Chotaliya
Das hat gut funktioniert. ALTER USER 'Benutzername' @ '%' IDENTIFIZIERT DURCH 'your_password', 'user' @ '%' PASSWORD EXPIRE NIEMALS;
TheLegendaryCopyCoder
1
ERROR 1805 (HY000): Column count of mysql.user is wrong. Expected 45, found 46. The table is probably corrupted
Immer
52

mysqladmin -u [username] -p passwordarbeitete für mich unter OS X El Capitan und MySQL 5.7.12 Community Server. Beispiel:

$ /usr/local/mysql/bin/mysqladmin -u root -p password
Enter password:
New password:
Confirm new password:
Warning: Since password will be sent to server in plain text, use ssl connection to ensure password safety.

Dies ähnelt der Antwort von pavan sachi, jedoch mit Passwortabfragen.

Mein Fehler war "# 1862 - Ihr Passwort ist abgelaufen. Um sich anzumelden, müssen Sie es mit einem Client ändern, der abgelaufene Passwörter unterstützt." beim ersten Mal auf dem Anmeldebildschirm von phpMyAdmin.

Kit
quelle
Hat auch für mich funktioniert, OS X El Capital und MySQL 5.17.13! Danke dafür!
Zeke
5
Es ist erwähnenswert, dass das Wort "Passwort" kein Platzhalter ist , während "root" der Name des Benutzers ist, den Sie aktualisieren mysqladmin -u [username] -p password
möchten
Dies ist das einzige, was (anscheinend) unter Linux (Fedora 25) für mich funktioniert hat. Vielen Dank.
Avinash Meetoo
Halleluja!! Beste. Befehl. je. Ich habe überall gesucht, aber das hat es endlich gelöst. Vielen Dank
Connor Leech
18

Ablauf des MySQL-Passworts

Durch das Zurücksetzen des Passworts wird das Problem nur vorübergehend behoben. Von MySQL 5.7.4 bis 5.7.10 (um eine bessere Sicherheit zu gewährleisten - siehe MySQL: Kennwortablaufrichtlinie ) default_password_lifetimebeträgt der Standardvariablenwert 360 (1 Jahr). Wenn Sie in diesen Versionen keine Änderungen an dieser Variablen (oder an einzelnen Benutzerkonten) vornehmen, verfallen alle Kennwörter nach 360 Tagen.

In einem Skript wird möglicherweise die Meldung angezeigt: "Ihr Kennwort ist abgelaufen. Um sich anzumelden, müssen Sie es mit einem Client ändern, der abgelaufene Kennwörter unterstützt."

Um den automatischen Ablauf des Kennworts zu stoppen, melden Sie sich als root ( mysql -u root -p) an . Ändern Sie dann für Clients, die automatisch eine Verbindung zum Server herstellen (z. B. Skripte), die Einstellungen für den Ablauf des Kennworts:

ALTER USER 'script'@'localhost' PASSWORD EXPIRE NEVER;

ODER Sie können den automatischen Kennwortablauf für alle Benutzer deaktivieren :

SET GLOBAL default_password_lifetime = 0;

Wie von Mertaydin in den Kommentaren hervorgehoben, fügen Sie die folgende Zeile zu einer my.cnfDatei hinzu, die MySQL beim Start unter der [mysqld]Gruppe von Einstellungen liest , um diese dauerhaft zu machen . Der Speicherort von my.cnfhängt von Ihrem Setup ab (z. B. Windows oder Homebrew unter OS X oder einem Installationsprogramm) und davon, ob Sie diesen Benutzer unter Unix oder global verwenden möchten:

[mysqld] default_password_lifetime = 0 (Möglicherweise gibt es auch hier andere Einstellungen ...)

Weitere Informationen finden Sie in den MySQL-Dokumenten zu Konfigurationsdateien .

Dave Everitt
quelle
2
Mit einem bereits abgelaufenen Passwort funktionierte nur die globale Einstellung für mich.
Maaartinus
2
Sie können diesen Parameter unter mysqld zu /etc/mysql/my.cnf hinzufügen. default_password_lifetime = 0 andernfalls wird nach dem Neustart von mysql erneut der gleiche Fehler angezeigt.
Mertaydin
2
Vielen Dank an Dave Everitt & @mertaydin!
WebMW
11

Ich habe kürzlich das gleiche Problem bei der Installation von MySQL auf Mac OS X Capitan durchlaufen. Ich habe hier nicht die richtige Antwort gefunden und diese Antwort hinzugefügt.

MySQL generiert in aktuellen Versionen ein temporäres Kennwort, wenn Sie MySQL installieren. Verwenden Sie dieses Kennwort, um ein neues Kennwort mit dem Dienstprogramm mysqladmin wie folgt festzulegen.

/ usr / local / mysql / bin / mysqladmin -u root -p '<Ihr temporäres Passwort>' Passwort '<Ihr neues Passwort>'

Hoffe es hilft dir und anderen.

Pavan Sachi
quelle
7

Laden Sie einfach die MySQL Workbench herunter, um sich anzumelden. Sie werden aufgefordert, das Kennwort sofort und automatisch zu ändern.

Grassright
quelle
4

Starten Sie MYSQL im abgesicherten Modus

mysqld_safe --skip-grant-tables &

Stellen Sie eine Verbindung zum MYSQL-Server her

mysql -u root

Führen Sie SQL-Befehle aus, um das Kennwort zurückzusetzen:

use mysql;
SET GLOBAL default_password_lifetime = 0;
SET PASSWORD = PASSWORD('new_password');

Letzter Schritt: Starten Sie Ihren MySQL-Dienst neu

Dylan B.
quelle
4

Ich habe dieses Problem vor ein paar Tagen konfrontiert. Für die beste Lösung für die 5.7-Version von MySQL; Melden Sie sich bei Ihrer MySQL-Konsole an und ändern Sie Ihr Passwort mit dem folgenden Befehl:

ALTER USER `root`@`localhost` IDENTIFIED BY 'new_password', `root`@`localhost` PASSWORD EXPIRE NEVER;
Mehmet MERCAN
quelle
4

WARNUNG: Dadurch kann sich jeder Benutzer anmelden

Ich musste etwas anderes ausprobieren. Da mein Root-Passwort abgelaufen ist und das Ändern keine Option war, weil

Column count of mysql.user is wrong. Expected 45, found 46. The table is probably corrupted

Das vorübergehende Hinzufügen von skip-grant-tablesunder [mysqld]in my.cnfund das Neustarten von mysql haben den Trick getan

Marius.C
quelle
4

Unter Windows in phpmyadmin suchen Sie unter Variablen: default_password_lifetime und schalten Sie es auf 0 (anstelle von 360).

Es ist möglich, dass mySQL wieder 360 Tage dauert. Fügen Sie also my.ini hinzu:

[mysqld]
default_password_lifetime=0

Und starten Sie MySQL neu.

Laurent Zminka
quelle
Es ist möglich, dass die default_password_lifetime wieder 360 Tage dauert, also füge in my.ini hinzu:
Laurent Zminka
4

Das hat bei mir funktioniert:

ALTER USER 'root'@'localhost' IDENTIFIED BY 'yourpassword','root'@'localhost' PASSWORD EXPIRE NEVER;
Robert Saylor
quelle
1

Starten Sie den MySQL-Server mit der Option --skip-grant-tables neu und legen Sie dann ein neues Root-Passwort fest

$ mysql -u root
mysql> USE mysql;
mysql> UPDATE user SET password=PASSWORD("NEWPASSWORD") WHERE User='root';
mysql> FLUSH PRIVILEGES;
mysql> quit

Bei Bedarf können Sie jetzt die Tabelle mysql.user (Feld password_expired = 'N') aktualisieren, damit das Kennwort nicht abläuft.

Adarsh ​​Gangadharan
quelle
Wenn ich den ersten Befehl mysql -u rootERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
eingebe, erhalte
Für den Datensatz, den ich bekommen habe, indem mysql -u root -pich den ersten Befehl You must reset your password using ALTER USER statement before executing this statement.
geändert
Wissen Sie, wie Sie das Passwort mit ALTER USER zurücksetzen können? Ich bin nicht so gut mit MySQL (ich bin eher eine NodeJS / MongoDB-Person).
CaribouCode
1

Alle diese Antworten verwenden Linux-Konsolen, um auf MySQL zuzugreifen.

Wenn Sie unter Windows arbeiten und WAMP verwenden, können Sie zunächst die MySQL-Konsole ( click WAMP icon->MySQL->MySQL console) öffnen .

Anschließend werden Sie aufgefordert, Ihr aktuelles Passwort einzugeben.

Und dann tippen SET PASSWORD = PASSWORD('some_pass');

Rost
quelle
1

beste einfache Lösung:

[PATH MYSQL]/bin/mysql -u root
[Enter password]
SET GLOBAL default_password_lifetime = 0;

und funktioniert dann gut.

Fastorro
quelle
0

Der Kennwortablauf ist eine neue Funktion in MySQL 5.6 oder 5.7.

Die Antwort ist klar: Verwenden Sie einen Client, dessen Kennwort abgelaufen ist (ich denke, Sequel Pro kann das).

Die MySQLi-Bibliothek kann das abgelaufene Passwort offensichtlich nicht ändern.

Wenn Sie nur eingeschränkten Zugriff auf localhost haben und nur einen Konsolenclient haben, kann dies der Standard-MySQL-Client tun.

Daniel W.
quelle
2
Vielen Dank für Ihre Antwort. Ich habe Sequel Pro heruntergeladen und versucht, eine Verbindung über eine Buchse herzustellen. Ich erhalte den gleichen Fehler über das abgelaufene Passwort ...
CaribouCode
0

Öffnen Sie die MySQL-Konsole und geben Sie SET PASSWORD = 'Ihr Passwort' ein. Drücken Sie anschließend die EINGABETASTE, um Ihr definiertes Kennwort für den Benutzer root festzulegen.

Sie können nur SET PASSWORD = '' schreiben; Dadurch wird das Kennwort für den Root-Benutzer als leer festgelegt.

Prasant Kumar
quelle
0

Ich habe so etwas gemacht.

UPDATE mysql.user SET authentication_string = PASSWORD(''), password_expired = 'N' WHERE User = 'root' AND Host = 'localhost';
Marcel Zebrowski
quelle
1
You must reset your password using ALTER USER statement before executing this statement.
Weijing Jay Lin