Hasło MySQL wygasło. Nie można się połączyć

87

Właśnie wyczyściłem komputer Mac i wykonałem nową instalację El Capitan. Próbuję teraz połączyć się z MySQL. Po przejściu przez proces konfiguracji serwera WWW stworzyłem prosty plik testowy PHP:

<?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();
?>

Kiedy go uruchamiam, pojawia się ten błąd:

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.

Nigdy wcześniej nie widziałem takiej odpowiedzi z połączenia. Jak to naprawić, jeśli nie mogę się połączyć?

EDYTOWAĆ

W terminalu wpisałem polecenie:

mysql -u root -p

To poprosiło mnie o moje hasło (aktualne), które wprowadziłem. Mam teraz dostęp do poleceń mysql, ale wszystko, czego próbuję, powoduje ten błąd:

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

Jak zresetować hasło za pomocą ALTER USER?

CaribouCode
źródło
Mam ten sam problem.
Rohan Sanap
to naprawdę denerwujące, że cała usługa może zostać z tego powodu zamknięta
tofutim
1
Spróbuj pobiec/usr/local/mysql/bin/mysqladmin -u root -p password
Connor Leech,
1
@ConnorLeech spędził wiele godzin próbując zresetować wygasłe hasło roota homebrew MariaDB, ale to rozwiązało problem - dzięki!
Alex Holsgrove

Odpowiedzi:

179

Więc w końcu sam znalazłem rozwiązanie.

Najpierw wszedłem do terminala i wpisałem:

mysql -u root -p

Poprosiłem o moje aktualne hasło, które wpisałem, i dało mi to dostęp do większej liczby poleceń mysql. Wszystko, co tutaj próbowałem, powodowało ten błąd:

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

Jest to mylące, ponieważ nie widziałem sposobu zresetowania hasła za pomocą ALTER USERinstrukcji, ale znalazłem inne proste rozwiązanie:

SET PASSWORD = PASSWORD('xxxxxxxx');

CaribouCode
źródło
Czy to działało poprawnie? Czy wystąpił jakiś błąd po wykonaniu tych czynności w przyszłości?
Rohan Sanap
Wielkie dzięki! Dla mnie to też zadziałało. Zaoszczędził mi wiele godzin.
TBJ
5
Używam wersji 5.7.9 MySQL i jest to teraz przestarzałe, ponieważ ten komunikat o błędzie z wiersza poleceń MySQL mówi nam: Ostrzeżenie (kod 1287): `` SET PASSWORD = PASSWORD ('<plaintext_password>') 'jest przestarzałe i zostanie usunięte w przyszłe wydanie. Zamiast tego użyj SET PASSWORD = '<plaintext_password>'
Fabiano
Przykro mi, że to nie zadziałało, ale inny użytkownik wysłany przez Piotra N. działał. Być może działa na innej wersji MySQL.
Programista MG
89

Najpierw używam:

 mysql -u root -p

Podaję moje aktualne hasło do „roota”. Kolejny:

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

Zmień 'new_password'na nowe hasło dla użytkownika „root”.
To rozwiązało mój problem.

Piotr N.
źródło
3
Błąd wyświetlania: ERROR 1064 (42000): Wystąpił błąd w składni SQL; sprawdź instrukcję, która odpowiada twojej wersji serwera MySQL, aby znaleźć właściwą składnię, której należy użyć w pobliżu 'USER' root '@' localhost 'IDENTIFIED BY' newPassword ',' root '@' localhost 'PASSWORD' w linii 1
Ketav Chotaliya
To działało dobrze. ALTER USER 'username' @ '%' IDENTIFIED BY 'your_password', 'user' @ '%' PASSWORD EXPIRE NIGDY;
TheLegendaryCopyCoder,
1
ERROR 1805 (HY000): Column count of mysql.user is wrong. Expected 45, found 46. The table is probably corrupted
Pojawia się
52

mysqladmin -u [username] -p passwordpracował dla mnie na OS X El Capitan i MySQL 5.7.12 Community Server. Przykład:

$ /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.

Jest to podobne do odpowiedzi pavan sachi, ale z pytaniami o hasło.

Mój błąd to „# 1862 - Twoje hasło wygasło. Aby się zalogować, musisz je zmienić za pomocą klienta obsługującego wygasłe hasła”. na ekranie logowania phpMyAdmin po raz pierwszy.

Zestaw
źródło
U mnie też działał, OS X El Capital i MySQL 5.17.13! Dzięki za to!
Zeke,
5
Warto wspomnieć, że słowo „hasło” nie jest symbolem zastępczym , natomiast „root” to nazwa użytkownika, którego chcesz zaktualizować:mysqladmin -u [username] -p password
random_user_name
To jedyna rzecz, która (pozornie) działała dla mnie na Linuksie (Fedora 25). Dzięki.
Avinash Meetoo
Alleluja!! Najlepsza. Komenda. zawsze. Szukałem wszędzie, ale w końcu to rozwiązało. Dziękuję bardzo
Connor Leech
19

Wygaśnięcie hasła MySQL

Zresetowanie hasła tylko tymczasowo rozwiąże problem. Od MySQL 5.7.4 do 5.7.10 (aby zwiększyć bezpieczeństwo - zobacz MySQL: Polityka wygaśnięcia hasła ) domyślna default_password_lifetimewartość zmiennej to 360 (1 rok). W przypadku tych wersji, jeśli nie wprowadzisz żadnych zmian w tej zmiennej (lub w poszczególnych kontach użytkowników), wszystkie hasła wygasają po 360 dniach.

Tak więc ze skryptu możesz otrzymać komunikat: „Twoje hasło wygasło. Aby się zalogować, musisz je zmienić za pomocą klienta obsługującego wygasłe hasła”.

Aby zatrzymać automatyczne wygasanie hasła, zaloguj się jako root ( mysql -u root -p), a następnie dla klientów, którzy automatycznie łączą się z serwerem (np. Skrypty), zmień ustawienia wygasania hasła:

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

LUB możesz wyłączyć automatyczne wygasanie hasła dla wszystkich użytkowników :

SET GLOBAL default_password_lifetime = 0;

Jak zauważył Mertaydin w komentarzach, aby to było trwałe, dodaj następującą linię do my.cnfpliku odczytywanego przez MySQL podczas uruchamiania, w [mysqld]grupie ustawień. Lokalizacjamy.cnf zależy od twojej konfiguracji (np. Windows lub Homebrew na OS X lub instalatora) i czy chcesz to na użytkownika w systemie Unix czy globalnym:

[mysqld] default_password_lifetime = 0 (Mogą tu być też inne ustawienia ...)

Zobacz dokumentację MySQL dotyczącą plików konfiguracyjnych .

Dave Everitt
źródło
2
Z hasłem, które już wygasło, działało tylko ustawienie globalne.
maaartinus
2
Możesz dodać ten parametr do /etc/mysql/my.cnf, w mysqld; default_password_lifetime = 0 w przeciwnym razie po ponownym uruchomieniu mysql ponownie pojawi się ten sam błąd.
mertaydin
2
Dziękuję @Dave Everitt i @mertaydin!
WebMW
11

Ostatnio przeszedłem przez ten sam problem podczas instalacji mysql na Mac OS X Capitan. Nie znalazłem tutaj poprawnej odpowiedzi, więc dodaj tę odpowiedź.

MySql w obecnych wersjach generuje tymczasowe hasło podczas instalacji mysql. Użyj tego hasła, aby ustawić nowe hasło za pomocą narzędzia mysqladmin, jak poniżej;

/ usr / local / mysql / bin / mysqladmin -u root -p '<twoje tymczasowe hasło>' hasło '<twoje nowe hasło>'

Mam nadzieję, że to pomoże tobie i innym.

pavan sachi
źródło
7

Wystarczy pobrać Środowisko pracy MySQL, aby się zalogować. Zostanie wyświetlony monit o natychmiastową i automatyczną zmianę hasła.

Grassright
źródło
4

uruchom MYSQL w trybie awaryjnym

mysqld_safe --skip-grant-tables &

Połącz się z serwerem MYSQL

mysql -u root

uruchom polecenia SQL, aby zresetować hasło:

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

Ostatni krok, zrestartuj usługę mysql

Dylan B.
źródło
4

miałem do czynienia z tym problemem kilka dni temu. Najlepsze rozwiązanie dla MySQL w wersji 5.7; zaloguj się do konsoli mysql i zmień hasło za pomocą następującego polecenia:

ALTER USER `root`@`localhost` IDENTIFIED BY 'new_password', `root`@`localhost` PASSWORD EXPIRE NEVER;
Mehmet MERCAN
źródło
4

OSTRZEŻENIE: pozwoli to na zalogowanie się każdemu użytkownikowi

Musiałem spróbować czegoś innego. Ponieważ moje hasło roota wygasło, a zmiana nie była opcją, ponieważ

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

chwilowo dodając skip-grant-tablesUnder [mysqld]w my.cnfi ponownym mysql wystarczyły

Marius C.
źródło
4

W systemie Windows w phpmyadmin spójrz na Variables: default_password_lifetime i przełącz go na 0 (zamiast 360), ciesz się.

Możliwe, że mySQL zajmie ponownie 360 ​​dni, więc dodaj my.ini:

[mysqld]
default_password_lifetime=0

I zrestartuj mysql.

Laurent Zminka
źródło
Jest to możliwe, ponieważ default_password_lifetime zajmie ponownie 360 ​​dni, więc w my.ini dodaj:
Laurent Zminka
4

To zadziałało dla mnie:

ALTER USER 'root'@'localhost' IDENTIFIED BY 'yourpassword','root'@'localhost' PASSWORD EXPIRE NEVER;
Robert Saylor
źródło
1

zrestartuj serwer MySQL z opcją --skip-grant-table A następnie ustaw nowe hasło roota

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

Teraz, jeśli potrzebujesz, możesz zaktualizować tabelę mysql.user (pole password_expired = 'N'), aby nie wygasać hasła.

Adarsh ​​Gangadharan
źródło
Kiedy wprowadzam pierwsze polecenie, mysql -u rootERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
pojawia
Dla przypomnienia, udało mi się dostać, zmieniając pierwsze polecenie na mysql -u root -pwtedy, gdy poprosiło mnie o hasło, które wprowadziłem. Twoje następne polecenie nie zadziałało, ponieważ było napisaneYou must reset your password using ALTER USER statement before executing this statement.
CaribouCode
Czy wiesz, jak zresetować hasło za pomocą polecenia ALTER USER? Nie jestem taki dobry z Mysql (jestem bardziej osobą NodeJS / MongoDB).
CaribouCode
1

Wszystkie te odpowiedzi wykorzystują konsole Linux w celu uzyskania dostępu do MySQL.

Jeśli używasz systemu Windows i używasz WAMP, możesz zacząć od otwarcia konsoli MySQL (click WAMP icon->MySQL->MySQL console ).

Następnie poprosi Cię o podanie aktualnego hasła, wprowadź je.

A potem wpisz SET PASSWORD = PASSWORD('some_pass');

GoalsAndGambles
źródło
1

najlepsze proste rozwiązanie:

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

a potem działa dobrze.

Fastorro
źródło
0

Wygaśnięcie hasła to nowa funkcja w MySQL 5.6 lub 5.7.

Odpowiedź jest jasna: użyj klienta, który jest w stanie zmienić wygasłe hasło (myślę, że Sequel Pro może to zrobić).

Biblioteka MySQLi oczywiście nie jest w stanie zmienić wygasłego hasła.

Jeśli masz ograniczony dostęp do localhost i masz tylko klienta konsoli, może to zrobić standardowy klient mysql.

Daniel W.
źródło
2
Dzięki za twoją odpowiedź. Pobrałem Sequel Pro i próbowałem połączyć się z nim przez gniazdo. Otrzymuję ten sam błąd dotyczący wygaśnięcia hasła ...
CaribouCode
0

Otwórz konsolę MySQL i wpisz SET PASSWORD = 'twoje hasło'; a następnie naciśnij klawisz ENTER, który ustawi zdefiniowane hasło dla użytkownika root.

Możesz tylko napisać SET PASSWORD = ''; co spowoduje ustawienie hasła użytkownika root jako pustego.

Prasant Kumar
źródło
0

Zrobiłem coś takiego.

UPDATE mysql.user SET authentication_string = PASSWORD(''), password_expired = 'N' WHERE User = 'root' AND Host = 'localhost';
Marcel Żebrowski
źródło
1
You must reset your password using ALTER USER statement before executing this statement.
Weijing Jay Lin
0

Po prostu otwórz MySQL Workbench i wybierz [Instancja] Uruchamianie / Wyłączanie i kliknij start serwer. U mnie to zadziałało

Arjun
źródło