Mật khẩu Mysql đã hết hạn. Không thể kết nối


87

Tôi vừa xóa máy Mac của mình và cài đặt mới El Capitan. Tôi đang đấu tranh để kết nối với Mysql. Sau khi trải qua quá trình thiết lập máy chủ web, tôi đã tạo một tệp thử nghiệm PHP đơn giản:

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

Khi tôi chạy nó, tôi gặp lỗi này:

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.

Tôi chưa bao giờ thấy phản hồi đó từ một kết nối trước đây. Làm cách nào để khắc phục sự cố nếu tôi không thể kết nối?

BIÊN TẬP

Trong terminal, tôi đã nhập lệnh:

mysql -u root -p

Điều này đã yêu cầu tôi nhập mật khẩu (mật khẩu hiện tại) mà tôi đã nhập. Bây giờ tôi có quyền truy cập vào các lệnh mysql nhưng bất kỳ điều gì tôi thử đều dẫn đến lỗi này:

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

Làm cách nào để đặt lại mật khẩu bằng cách sử dụng ALTER USER?


Tôi đang gặp vấn đề tương tự.
Rohan Sanap

điều này thực sự gây phiền nhiễu mà một dịch vụ hoàn toàn có thể tắt máy vì điều này
tofutim

1
Thử chạy/usr/local/mysql/bin/mysqladmin -u root -p password
Connor Leech

1
@ConnorLosystem đã dành hàng giờ để đặt lại mật khẩu gốc MariaDB đã hết hạn của homebrew, nhưng điều này đã khắc phục sự cố cho tôi - cảm ơn!
Alex Holsgrove

Câu trả lời:


179

Vì vậy, cuối cùng tôi đã tìm ra giải pháp cho mình.

Đầu tiên, tôi vào thiết bị đầu cuối và nhập:

mysql -u root -p

Điều này yêu cầu mật khẩu hiện tại của tôi mà tôi đã nhập và nó cho tôi quyền truy cập để cung cấp thêm các lệnh mysql. Mọi thứ tôi đã thử từ đây đều gặp lỗi này:

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

Điều này thật khó hiểu vì tôi thực sự không thể thấy cách đặt lại mật khẩu bằng ALTER USERcâu lệnh, nhưng tôi đã tìm thấy một giải pháp đơn giản khác:

SET PASSWORD = PASSWORD('xxxxxxxx');


Điều này đã hoạt động đúng cách? Nó có gặp lỗi nào sau khi làm theo các bước này trong tương lai không?
Rohan Sanap

Cảm ơn rất nhiều! Điều này cũng làm việc cho tôi. Đã tiết kiệm cho tôi rất nhiều giờ.
TBJ

5
Tôi sử dụng phiên bản 5.7.9 của MySQL và phiên bản này hiện không được dùng nữa vì thông báo lỗi này từ dấu nhắc lệnh MySQL cho chúng tôi biết: Cảnh báo (Mã 1287): 'SET PASSWORD = PASSWORD (' <plaintext_password> ')' không được dùng nữa và sẽ bị xóa trong một bản phát hành trong tương lai. Vui lòng sử dụng SET PASSWORD = '<plaintext_password>' để thay thế
Fabiano

Tôi xin lỗi vì điều này không hiệu quả với tôi nhưng người dùng thay thế được đăng bởi Piotr N. đã hoạt động. Có lẽ hoạt động trên phiên bản MySQL khác nhau.
Nhà phát triển MG

89

Đầu tiên, tôi sử dụng:

 mysql -u root -p

Cung cấp mật khẩu hiện tại của tôi cho 'gốc'. Kế tiếp:

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

Thay đổi 'new_password'mật khẩu mới cho người dùng 'root'.
Nó đã giải quyết vấn đề của tôi.


3
Gặp lỗi: ERROR 1064 (42000): Bạn có lỗi trong cú pháp SQL của mình; kiểm tra hướng dẫn sử dụng tương ứng với phiên bản máy chủ MySQL của bạn để biết cú pháp phù hợp để sử dụng gần 'USER' root '@' localhost 'IDENTIFIED BY' newPassword ',' root '@' localhost 'PASSWORD' tại dòng 1
Ketav Chotaliya

Điều này đã hoạt động tốt. ALTER NGƯỜI DÙNG 'tên người dùng' @ '%' ĐƯỢC XÁC NHẬN BỞI 'your_password', 'user' @ '%' MẬT KHẨU KHÔNG BAO GIỜ;
TheLegendaryCopyCoder

1
Nhận lỗi: 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 passwordđã làm việc cho tôi trên OS X El Capitan và MySQL 5.7.12 Community Server. Thí dụ:

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

Điều này tương tự như câu trả lời của pavan sachi, nhưng với lời nhắc mật khẩu.

Lỗi của tôi là "# 1862 - Mật khẩu của bạn đã hết hạn. Để đăng nhập, bạn phải thay đổi mật khẩu bằng ứng dụng khách hỗ trợ mật khẩu đã hết hạn." tại màn hình đăng nhập phpMyAdmin lần đầu tiên.


Cũng phù hợp với tôi, OS X El Capital và MySQL 5.17.13! Cám ơn vì cái này!
Zeke

5
Đó là giá trị đề cập rằng từ "password" là không phải là một giữ chỗ , trong khi "root" là tên của người dùng mà bạn muốn cập nhật:mysqladmin -u [username] -p password
random_user_name

Đây là thứ duy nhất (dường như) hoạt động với tôi trên Linux (Fedora 25). Cảm ơn.
Avinash Meetoo 20/02/17

Hallelujah !! tốt. chỉ huy. không bao giờ. Tôi đã tìm khắp mọi nơi nhưng đây là cuối cùng những gì đã giải quyết nó. Cảm ơn bạn rất nhiều
Connor Leech

19

Mật khẩu MySQL hết hạn

Đặt lại mật khẩu sẽ chỉ giải quyết vấn đề tạm thời. Từ MySQL 5.7.4 đến 5.7.10 (để khuyến khích bảo mật tốt hơn - xem MySQL: Password Expiration Policy ), default_password_lifetimegiá trị biến mặc định là 360 (1 year-ish). Đối với các phiên bản đó, nếu bạn không thực hiện thay đổi nào đối với biến này (hoặc đối với tài khoản người dùng cá nhân) thì tất cả mật khẩu sẽ hết hạn sau 360 ngày.

Vì vậy, từ một tập lệnh, bạn có thể nhận được thông báo: "Mật khẩu của bạn đã hết hạn. Để đăng nhập, bạn phải thay đổi mật khẩu bằng ứng dụng khách hỗ trợ mật khẩu đã hết hạn."

Để dừng việc hết hạn mật khẩu tự động, hãy đăng nhập bằng root ( mysql -u root -p), sau đó, đối với các ứng dụng khách tự động kết nối với máy chủ (ví dụ: script.), Hãy thay đổi cài đặt hết hạn mật khẩu:

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

HOẶC bạn có thể tắt tự động hết hạn mật khẩu cho tất cả người dùng :

SET GLOBAL default_password_lifetime = 0;

Như đã chỉ ra bởi Mertaydin trong các nhận xét, để thực hiện điều này vĩnh viễn, hãy thêm dòng sau vào my.cnftệp MySQL đọc khi khởi động, trong [mysqld]nhóm cài đặt. Vị trí của my.cnftùy thuộc vào thiết lập của bạn (ví dụ: Windows hoặc Homebrew trên OS X hoặc trình cài đặt) và bạn muốn điều này cho mỗi người dùng trên Unix hay toàn cầu:

[mysqld] default_password_lifetime = 0 (Có thể có các cài đặt khác ở đây ...)

Xem tài liệu MySQL trên các tệp cấu hình .


2
Với mật khẩu đã hết hạn, chỉ có cài đặt chung phù hợp với tôi.
maaartinus

2
Bạn có thể thêm tham số này vào /etc/mysql/my.cnf, trong mysqld; default_password_lifetime = 0 nếu không, sau khi khởi động lại mysql, bạn sẽ gặp lại lỗi tương tự.
mertaydin

2
Cảm ơn bạn @Dave Everitt & @mertaydin!
WebMW

11

Tôi đã gặp vấn đề tương tự gần đây khi cài đặt mysql trên mac os x capitan. Tôi không tìm thấy câu trả lời chính xác ở đây, vì vậy hãy thêm câu trả lời này.

MySql trong các phiên bản hiện tại, tạo mật khẩu tạm thời khi bạn cài đặt mysql. Sử dụng mật khẩu này để đặt mật khẩu mới bằng tiện ích mysqladmin như bên dưới;

/ usr / local / mysql / bin / mysqladmin -u root -p '<mật khẩu tạm thời của bạn>' mật khẩu '<mật khẩu mới của bạn>'

Hy vọng nó sẽ giúp bạn và những người khác.


7

Chỉ cần tải xuống MySQL workbench để đăng nhập, nó sẽ nhắc bạn thay đổi mật khẩu ngay lập tức và tự động.


4

khởi động MYSQL ở chế độ an toàn

mysqld_safe --skip-grant-tables &

Kết nối với máy chủ MYSQL

mysql -u root

chạy các lệnh SQL để đặt lại mật khẩu:

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

Bước cuối cùng, khởi động lại dịch vụ mysql của bạn


4

tôi đã phải đối mặt với vấn đề này vài ngày trước. Để có giải pháp tốt nhất cho phiên bản 5.7 của MySQL; đăng nhập bảng điều khiển mysql của bạn và thay đổi mật khẩu của bạn bằng lệnh sau:

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

4

CẢNH BÁO: điều này sẽ cho phép mọi người dùng đăng nhập

Tôi đã phải thử một cái gì đó khác. Vì mật khẩu gốc của tôi đã hết hạn và việc thay đổi không phải là một tùy chọn vì

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

temporarly thêm skip-grant-tablesdưới [mysqld]trong my.cnfvà khởi động lại mysql đã làm các trick


4

Trên Windows trong phpmyadmin, hãy tìm Variables: default_password_lifetime và chuyển nó thành 0 (thay vì 360), hãy tận hưởng.

Có thể nó sẽ mất 360 ngày so với mySQL, vì vậy hãy thêm my.ini:

[mysqld]
default_password_lifetime=0

Và khởi động lại mysql.


Nó có thể so với default_password_lifetime lấy lại 360 ngày, vì vậy trong add my.ini:
Laurent Zminka

4

Điều này đã làm việc cho tôi:

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

1

khởi động lại máy chủ MySQL với tùy chọn --skip-Grant -boards Và sau đó đặt mật khẩu gốc mới

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

Bây giờ nếu cần, bạn có thể cập nhật bảng mysql.user (trường password_expired = 'N') để không làm hết hạn mật khẩu.


Khi tôi nhập lệnh đầu tiên, mysql -u roottôi gặp lỗi này:ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
CaribouCode

Đối với hồ sơ tôi quản lý để có được trong bằng cách thay đổi lệnh đầu tiên mysql -u root -psau đó nó hỏi tôi cho mật khẩu mà tôi đưa vào lệnh tiếp theo của bạn không làm việc đối với tôi bởi vì nó nói.You must reset your password using ALTER USER statement before executing this statement.
CaribouCode

Bạn có biết cách đặt lại mật khẩu bằng ALTER USER không? Tôi không giỏi với Mysql (Tôi là người của NodeJS / MongoDB hơn).
CaribouCode

1

Tất cả các câu trả lời này đều đang sử dụng bảng điều khiển Linux để truy cập MySQL.

Nếu bạn đang sử dụng Windows và đang sử dụng WAMP, bạn có thể bắt đầu bằng cách mở bảng điều khiển MySQL ( click WAMP icon->MySQL->MySQL console).

Sau đó, nó sẽ yêu cầu bạn nhập mật khẩu hiện tại của bạn, hãy nhập nó.

Và sau đó gõ SET PASSWORD = PASSWORD('some_pass');


1

giải pháp dễ dàng tốt nhất:

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

và sau đó hoạt động tốt.



0

Hết hạn mật khẩu là một tính năng mới trong MySQL 5.6 hoặc 5.7.

Câu trả lời rất rõ ràng: Sử dụng ứng dụng khách có khả năng thay đổi mật khẩu đã hết hạn (tôi nghĩ Sequel Pro có thể làm được).

Thư viện MySQLi rõ ràng là không thể thay đổi mật khẩu đã hết hạn.

Nếu bạn có quyền truy cập hạn chế vào localhost và bạn chỉ có một máy khách bảng điều khiển, máy khách mysql tiêu chuẩn có thể làm điều đó.


2
Cám ơn phản hồi của bạn. Tôi đã tải xuống Sequel Pro và cố gắng kết nối qua ổ cắm với nó. Tôi nhận được lỗi tương tự về mật khẩu phúc hết hạn ...
CaribouCode

0

Mở bảng điều khiển MySQL và gõ SET PASSWORD = 'mật khẩu của bạn'; và sau đó nhấn ENTER Key sẽ đặt mật khẩu đã xác định của bạn cho người dùng root.

Bạn chỉ có thể viết SET PASSWORD = ''; sẽ đặt mật khẩu là trống cho người dùng root.


0

Tôi đã làm một cái gì đó như thế này.

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

Chỉ cần mở MySQL Workbench và chọn [Instance] Startup / Shutdown và nhấp vào start server. Nó đã làm việc cho tôi

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.