MySQL 비밀번호가 만료되었습니다. 연결할 수 없습니다


87

방금 Mac을 닦고 El Capitan을 새로 설치했습니다. 지금 Mysql에 연결하는 데 어려움을 겪고 있습니다. 웹 서버 설정 과정을 거쳐 간단한 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();
?>

실행할 때 다음 오류가 발생합니다.

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.

나는 전에 연결에서 그 응답을 본 적이 없습니다. 연결할 수없는 경우 어떻게 수정합니까?

편집하다

터미널에서 명령을 입력했습니다.

mysql -u root -p

이것은 내가 입력 한 내 암호 (현재 암호)를 요청했습니다. 이제 mysql 명령에 액세스 할 수 있지만 시도하면이 오류가 발생합니다.

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

를 사용하여 비밀번호를 ALTER USER어떻게 재설정 합니까?


나는 같은 문제가 있습니다.
로한 Sanap

이것은 전체 서비스가 이것 때문에 종료 될 수 있음을 정말 짜증나
tofutim

1
실행 해보십시오/usr/local/mysql/bin/mysqladmin -u root -p password
코너 거머리에게

1
@ConnorLeech는 homebrew의 MariaDB 만료 된 루트 암호를 재설정하는 데 몇 시간을 보냈지 만이 문제가 해결되었습니다. 감사합니다!
Alex Holsgrove는

답변:


179

그래서 마침내 해결책을 찾았습니다.

먼저 터미널에 들어가 다음을 입력했습니다.

mysql -u root -p

이것은 내가 입력 한 현재 암호를 요청했으며 더 많은 mysql 명령을 제공하기 위해 액세스 권한을 부여했습니다. 여기에서 시도한 모든 것이이 오류를 발생 시켰습니다.

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

ALTER USER문을 사용하여 암호를 재설정하는 방법을 실제로 볼 수 없기 때문에 혼란 스럽지만 다른 간단한 해결책을 찾았습니다.

SET PASSWORD = PASSWORD('xxxxxxxx');


제대로 작동 했나요? 향후 이러한 단계를 수행 한 후 오류가 발생 했습니까?
Rohan Sanap

감사합니다! 이것은 나에게도 효과적이었습니다. 많은 시간을 절약했습니다.
TBJ

5
MySQL 5.7.9 버전을 사용하고 있으며 MySQL 명령 프롬프트의이 오류 메시지가 다음과 같이 알려 주므로 이제 더 이상 사용되지 않습니다. Warning (Code 1287) : 'SET PASSWORD = PASSWORD ('<plaintext_password> ')'is deprecated and will be removed in 향후 릴리스. 대신 SET PASSWORD = '<plaintext_password>'를 사용하십시오
Fabiano

이것이 저에게 효과가 없었지만 Piotr N.이 게시 한 alter user가 작동했습니다. 아마도 다른 버전의 MySQL에서 작동하고있을 것입니다.
MG 개발자

89

먼저 다음을 사용합니다.

 mysql -u root -p

'루트'의 현재 비밀번호를 제공합니다. 다음:

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

'new_password'사용자 'root'의 새 비밀번호로 변경하십시오 .
그것은 내 문제를 해결했습니다.


3
오류 발생 : ERROR 1064 (42000) : SQL 구문에 오류가 있습니다. MySQL 서버 버전에 해당하는 설명서에서 '
USER'root

이것은 잘 작동했습니다. ALTER USER 'username'@ '%'IDENTIFIED by 'your_password', 'user'@ '%'PASSWORD EXPIRE NEVER;
TheLegendaryCopyCoder

1
오류 발생 : ERROR 1805 (HY000): Column count of mysql.user is wrong. Expected 45, found 46. The table is probably corrupted
Pulkit Pahwa

52

mysqladmin -u [username] -p passwordOS X El Capitan 및 MySQL 5.7.12 Community Server에서 저를 위해 일했습니다. 예:

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

이것은 pavan sachi의 대답과 비슷하지만 암호 프롬프트가 있습니다.

내 오류는 "# 1862-비밀번호가 만료되었습니다. 로그인하려면 만료 된 비밀번호를 지원하는 클라이언트를 사용하여 비밀번호를 변경해야합니다." phpMyAdmin 로그인 화면에서 처음으로.


저도 위해 일했습니다, OS X El Capital 및 MySQL 5.17.13! 감사합니다!
지크

5
그것은 단어 "암호"라고 언급 할만큼 가치입니다 자리 표시가없는 다음 업데이트하려는 사용자의 이름 "루트"반면한다mysqladmin -u [username] -p password
random_user_name가

이것은 (겉보기에) Linux (Fedora 25)에서 저에게 효과가 있었던 유일한 것입니다. 감사.
Avinash Meetoo

할렐루야!! 베스트. 명령. 이제까지. 나는 모든 곳을 보았지만 이것이 마침내 해결되었습니다. 대단히 감사합니다
코너 거머리에게

19

MySQL 비밀번호 만료

비밀번호를 재설정하면 일시적으로 문제가 해결됩니다. MySQL 5.7.4에서 5.7.10까지 (보안 강화를 위해-MySQL : 암호 만료 정책 참조 ) 기본 default_password_lifetime변수 값은 360 (1 년)입니다. 이러한 버전의 경우이 변수 (또는 개별 사용자 계정)를 변경하지 않으면 모든 암호가 360 일 후에 만료됩니다.

따라서 스크립트에서 "암호가 만료되었습니다. 로그인하려면 만료 된 암호를 지원하는 클라이언트를 사용하여 변경해야합니다."라는 메시지가 표시 될 수 있습니다.

자동 암호 만료를 중지하려면 루트 ( mysql -u root -p) 로 로그인 한 다음 서버에 자동으로 연결하는 클라이언트 (예 : 스크립트)의 경우 암호 만료 설정을 변경합니다.

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

또는 모든 사용자에 대해 자동 비밀번호 만료를 비활성화 할 수 있습니다 .

SET GLOBAL default_password_lifetime = 0;

주석에서 Mertaydin이 지적했듯이 이것을 영구적으로 만들려면 my.cnfMySQL이 시작시 읽는 파일에 다음 줄을 [mysqld]설정 그룹 아래에 추가하십시오 . 의 위치는 my.cnf설정 (예 : Windows, OS X의 Homebrew 또는 설치 프로그램)과 Unix에서 사용자 별 또는 전역에서이 사용자 별을 원하는지 여부 에 따라 다릅니다.

[mysqld] default_password_lifetime = 0 (여기에도 다른 설정이있을 수 있습니다 ...)

구성 파일에 대한 MySQL 문서를 참조하십시오 .


2
이미 만료 된 암호를 사용하면 전역 설정 만 저에게 효과적이었습니다.
maaartinus

2
이 매개 변수를 mysqld 아래의 /etc/mysql/my.cnf에 추가 할 수 있습니다. default_password_lifetime = 0 그렇지 않으면 mysql을 다시 시작한 후 동일한 오류가 다시 발생합니다.
mertaydin

2
@Dave Everitt & @mertaydin 감사합니다!
WebMW

11

최근에 mac os x capitan에 mysql을 설치하는 동안 동일한 문제가 발생했습니다. 여기서 정답을 찾지 못 했으므로이 답변을 추가하십시오.

현재 버전의 MySql은 mysql을 설치할 때 임시 비밀번호를 생성합니다. 이 암호를 사용하여 아래와 같이 mysqladmin 유틸리티를 사용하여 새 암호를 설정하십시오.

/ usr / local / mysql / bin / mysqladmin -u root -p '<your temp password>'password '<your new password>'

그것이 당신과 다른 사람들에게 도움이되기를 바랍니다.


7

로그인하려면 MySQL 워크 벤치를 다운로드하기 만하면됩니다. 비밀번호를 즉시 자동으로 변경하라는 메시지가 표시됩니다.


4

안전 모드에서 MYSQL 시작

mysqld_safe --skip-grant-tables &

MYSQL 서버에 연결

mysql -u root

SQL 명령을 실행하여 비밀번호를 재설정하십시오.

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

마지막 단계, mysql 서비스를 다시 시작하십시오.


4

나는 며칠 전에이 문제에 직면했습니다. MySQL 5.7 버전에 대한 최상의 솔루션 mysql 콘솔에 로그인하고 다음 명령으로 비밀번호를 변경하십시오.

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

4

경고 : 모든 사용자가 로그인 할 수 있습니다.

나는 다른 것을 시도해야했다. 내 루트 비밀번호가 만료되고 변경이 옵션이 아니기 때문에

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

temporarly 추가 skip-grant-tables아래를 [mysqld]my.cnf와 다시 시작 MySQL은 속임수를 썼는지


4

Windows에서 phpmyadmin의 Variables : default_password_lifetime을보고 360 대신 0으로 전환하고 즐기십시오.

mySQL이 다시 360 일이 걸리는 것보다 가능하므로 my.ini를 추가하십시오.

[mysqld]
default_password_lifetime=0

그리고 mysql을 다시 시작하십시오.


그것의 가능한 default_password_lifetime보다 지금의 my.ini 추가에, 3백60일 다시 걸릴 :
로랑 Zminka

4

이것은 나를 위해 일했습니다.

ALTER USER 'root'@'localhost' IDENTIFIED BY 'yourpassword','root'@'localhost' PASSWORD EXPIRE NEVER;

1

--skip-grant-tables 옵션으로 MySQL 서버를 다시 시작한 다음 새 루트 비밀번호를 설정하십시오.

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

이제 필요한 경우 mysql.user 테이블 (필드 password_expired = 'N')을 업데이트하여 암호가 만료되지 않도록 할 수 있습니다.


첫 번째 명령을 입력하면 mysql -u root이 오류가 발생합니다.ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
CaribouCode

기록을 위해 난에 첫 번째 명령을 변경하여 얻을 관리 mysql -u root -p는 내가 넣어 암호를달라고 한 후이 말했기 때문에 당신의 다음 명령은 나를 위해 일을하지 않았다.You must reset your password using ALTER USER statement before executing this statement.
CaribouCode

ALTER USER를 사용하여 비밀번호를 재설정하는 방법을 알고 있습니까? 나는 Mysql을 잘하지 못합니다 (저는 NodeJS / MongoDB 사람에 가깝습니다).
CaribouCode

1

이 모든 답변은 Linux 콘솔을 사용하여 MySQL에 액세스합니다.

Windows에서 WAMP를 사용하는 경우 MySQL 콘솔 ( click WAMP icon->MySQL->MySQL console) 을 열어 시작할 수 있습니다 .

그런 다음 현재 비밀번호를 입력하도록 요청하고 입력합니다.

그런 다음 입력 SET PASSWORD = PASSWORD('some_pass');


1

가장 쉬운 솔루션 :

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

그런 다음 잘 작동합니다.



0

비밀번호 만료는 MySQL 5.6 또는 5.7의 새로운 기능입니다.

대답은 분명합니다. 만료 된 암호를 변경할 수있는 클라이언트를 사용하십시오 (Sequel Pro가 할 수 있다고 생각합니다).

MySQLi 라이브러리는 분명히 만료 된 암호를 변경할 수 없습니다.

localhost에 대한 액세스가 제한되고 콘솔 클라이언트 만있는 경우 표준 mysql 클라이언트가이를 수행 할 수 있습니다.


2
응답 해 주셔서 감사합니다. Sequel Pro를 다운로드하고 소켓을 통해 연결을 시도했습니다. 암호 만료에 대해 동일한 오류가 발생합니다 ...
CaribouCode

0

MySQL 콘솔을 열고 SET PASSWORD = 'your password'를 입력합니다. 그런 다음 사용자 root에 대해 정의 된 암호를 설정하는 ENTER 키를 누릅니다.

SET PASSWORD = ''만 쓸 수 있습니다. 루트 사용자의 경우 암호를 공백으로 설정합니다.


0

이런 짓을했습니다.

UPDATE mysql.user SET authentication_string = PASSWORD(''), password_expired = 'N' WHERE User = 'root' AND Host = 'localhost';

1
You must reset your password using ALTER USER statement before executing this statement.
Weijing Jay Lin

0

MySQL Workbench를 열고 [인스턴스] 시작 / 종료를 선택하고 서버 시작을 클릭하면됩니다. 그것은 나를 위해 일했습니다

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.