Mysql密码已过期。无法连接

时间:2015-10-28 09:56:15

标签: php mysql macos osx-elcapitan

我刚刚擦了我的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重置密码?

20 个答案:

答案 0 :(得分:165)

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

首先我进入终端并打字:

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');

答案 1 :(得分:77)

首先,我使用:

 mysql -u root -p

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

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

'new_password'更改为用户“root”的新密码 它解决了我的问题。

答案 2 :(得分:45)

mysqladmin -u [username] -p password在OS X El Capitan和MySQL 5.7.12社区服务器上为我工作。示例:

$ /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登录屏幕第一次。

答案 3 :(得分:15)

MySQL密码到期

重置密码只能暂时解决问题。从MySQL 5.7.4到5.7.10(为了提高安全性 - 参见MySQL: Password Expiration Policy),默认的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在评论中指出的那样,为了使这个永久性,将以下行添加到MySQL在my.cnf设置组的启动时读取的[mysqld]文件中。 my.cnf的位置取决于您的设置(例如Windows,OS X上的Homebrew或安装程序),以及您是希望在Unix或全球范围内使用此用户:

的[mysqld] default_password_lifetime = 0 (这里也可能有其他设置......)

请参阅MySQL docs on configuration files

答案 4 :(得分:10)

我最近在mac os x capitan上安装mysql时遇到了同样的问题。 我在这里找不到正确的答案,所以加上这个答案。

当前版本的MySql,在安装mysql时生成临时密码。使用此密码使用mysqladmin实用程序设置新密码,如下所示;

  

/ usr / local / mysql / bin / mysqladmin -u root -p'&lt; your temp password&gt;'密码'&lt;您的新密码&gt;'

希望它可以帮助你和其他人。

答案 5 :(得分:7)

只需下载MySQL工作台即可登录。它会提示您立即自动更改密码。

答案 6 :(得分: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服务

答案 7 :(得分:4)

我几天前遇到过这个问题。获得5.7版MySQL的最佳解决方案;使用以下命令登录您的mysql控制台并更改您的密码:

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

答案 8 :(得分:3)

在Windows中,使用phpmyadmin查看变量:default_password_lifetime,然后将其切换为0(而不是360)即可。

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

[mysqld]
default_password_lifetime=0

然后重新启动mysql。

答案 9 :(得分:3)

这对我有用:

ALTER USER&#39; root&#39; @&#39; localhost&#39;通过&#39; yourpassword&#39;,&#39; root&#39; @&#39; localhost&#39;密码永远不会出现;

答案 10 :(得分:3)

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

我不得不尝试别的东西。由于我的root密码已过期而且更改不是一个选项,因为

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

skip-grant-tables [mysqld]下临时添加my.cnf并重启mysql就可以了?

答案 11 :(得分:1)

所有这些答案都使用Linux控制台来访问MySQL。

如果您使用的是Windows并且正在使用WAMP,则可以先打开MySQL控制台(click WAMP icon->MySQL->MySQL console)。

然后它会要求您输入当前密码,输入密码。

然后输入SET PASSWORD = PASSWORD('some_pass');

答案 12 :(得分:1)

最简单的解决方案:

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

然后工作正常。

答案 13 :(得分:0)

我做了这样的事情。

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

答案 14 :(得分:0)

在 DBeaver 上,编辑连接 -> 驱动程序属性 -> 禁用 disconnectOnExpiredPasswords: enter image description here

重新连接并: enter image description here

并执行:

SET PASSWORD FOR 'user-name'@'localhost' = PASSWORD('NEW_USER_PASSWORD');
FLUSH PRIVILEGES;

答案 15 :(得分:0)

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

答案 16 :(得分:0)

密码过期是MySQL 5.6或5.7中的新功能。

答案很明确:使用能够过期密码更改的客户端(我认为Sequel Pro可以做到这一点)。

MySQLi库显然无法更改过期的密码。

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

答案 17 :(得分:0)

打开MySQL控制台并输入SET PASSWORD =&#39;您的密码&#39 ;; 然后按ENTER键,它将为用户root设置您定义的密码。

你只能写SET PASSWORD =&#39;&#39 ;; 这将为root用户将密码设置为空白。

答案 18 :(得分:0)

使用--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'),不要使密码失效。

答案 19 :(得分:-1)

为我工作:

来源:https://www.diariodeunprogramador.net/fallo-al-conectar-mysql-your-password-expired/

以root用户身份登录:

mysql -u root -p

,然后停用所有用户的密码自动过期:

SET GLOBAL default_password_lifetime = 0;