Mysql密码已过期。无法连接


87

我只是擦了擦Mac,然后重新安装了El Capitan。我正在努力连接到Mysql。经历了Web服务器设置过程之后,我创建了一个简单的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


我有同样的问题。
Rohan Sanap '16

真是令人讨厌的是,由于这个原因,整个服务都可以关闭
tofutim '16

1
尝试跑步/usr/local/mysql/bin/mysqladmin -u root -p password
Connor Leech

1
@ConnorLeech花了数小时试图重置自制软件的MariaDB过期的root密码,但这已为我解决了-谢谢!
Alex Holsgrove

Answers:


179

所以我终于找到了解决方案。

首先,我进入终端并输入:

mysql -u root -p

这要求输入我当前输入的密码,并允许我提供更多的mysql命令。我从这里尝试过的任何操作都会出现此错误:

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

这很令人困惑,因为我实际上看不到使用ALTER USERstatement重置密码的方法,但是我确实找到了另一个简单的解决方案:

SET PASSWORD = PASSWORD('xxxxxxxx');


这个工作正常吗?以后按照这些步骤操作后,是否出现任何错误?
Rohan Sanap '16

非常感谢!这也对我有用。为我节省了很多时间。
TBJ

5
我使用MySQL的5.7.9版本,现在已弃用,因为来自MySQL命令提示符的此错误消息告诉我们:警告(代码1287):'SET PASSWORD = PASSWORD('<plaintext_password>')'已弃用,并将在将来的版本。请改为使用SET PASSWORD ='<plaintext_password>'
Fabiano

抱歉,这不适用于我,但是Piotr N.发布的另一用户有效。也许在不同版本的MySQL上运行。
MG开发人员

89

首先,我使用:

 mysql -u root -p

提供我当前的“ root”密码。下一个:

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'@'localhost'IDENTIFIED BY'newPassword','root'@'localhost'PASSWORD'附近第1行使用的正确语法
Ketav Chotaliya

这很好。ALTER USER'username'@'%'由'your_password','user'@'%'标识密码永远不会过期;
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 password在OS 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也为我工作!谢谢你!
Zeke 2013年

5
值得一提的是,单词“ password”不是占位符,而“ root”是您要更新的用户名:mysqladmin -u [username] -p password
random_user_name

这是(似乎)在Linux(Fedora 25)上为我工作的唯一内容。谢谢。
阿维纳什·梅蒂欧

哈利路亚!最好。命令。曾经。我到处看,但这终于解决了。非常感谢你
康纳水蛭

19

MySQL密码到期

重设密码只能暂时解决问题。从MySQL 5.7.4到5.7.10(为了鼓励更好的安全性,请参阅MySQL:密码过期策略),默认default_password_lifetime变量值为360(1年)。对于那些版本,如果您不对此变量(或单个用户帐户)进行任何更改,则所有密码将在360天后失效。

因此,从脚本中,您可能会收到消息:“您的密码已过期。要登录,必须使用支持过期密码的客户端对其进行更改。”

要停止自动密码过期,请以root(mysql -u root -p)登录,然后,对于自动连接到服务器的客户端(例如脚本),更改密码过期设置:

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

或者,您可以为所有用户禁用自动密码过期功能:

SET GLOBAL default_password_lifetime = 0;

正如Mertaydin在评论中指出的那样,要使其永久生效my.cnf,请在[mysqld]设置组下,将以下行添加到MySQL启动时读取的文件中。的位置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'<您的临时密码>'密码'<您的新密码>'

希望它对您和其他人有帮助。


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

警告:这将允许任何用户登录

我不得不尝试其他的东西。由于我的root密码已过期,并且无法更改,因为

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

即暂时将skip-grant-tables[mysqld]my.cnf并重新启动mysql的的伎俩


4

在Windows上的phpmyadmin中,查看“变量:default_password_lifetime”,并将其切换为0(而不是360)即可。

它可能比mySQL再花费360天,因此添加my.ini:

[mysqld]
default_password_lifetime=0

并重启mysql。


它可能比default_password_lifetime再花费360天,因此在my.ini中添加:
Laurent Zminka,

4

这为我工作:

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

1

使用--skip-grant-tables选项重新启动MySQL服务器,然后设置新的root密码

$ 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 2015年

对于记录,我设法通过将第一个命令更改为来获取,mysql -u root -p然后它询问我输入的密码。您的下一个命令对我不起作用,因为它说You must reset your password using ALTER USER statement before executing this statement.
CaribouCode

您知道如何使用ALTER USER重置密码吗?我对Mysql不好(我更像是NodeJS / MongoDB的人)。
CaribouCode 2015年

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库显然无法更改过期密码。

如果您对本地主机的访问权限有限,并且只有控制台客户端,则标准mysql客户端可以执行此操作。


2
感谢您的答复。我已经下载了Sequel Pro,并尝试通过套接字进行连接。我收到有关密码已过期的相同错误...
CaribouCode

0

打开MySQL控制台并输入SET PASSWORD ='your password'; 然后按Enter键,这将为root用户设置您定义的密码。

您只能写SET PASSWORD =''; 这将为root用户将密码设置为空白。



0

只需打开MySQL Workbench并选择[Instance] Startup / Shutdown,然后单击启动服务器即可。对我有用

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.