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.