Mysql 密码已过期。无法连接

Mysql password expired. Can't connect

我刚刚擦除 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 重设密码?

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

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

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

如果您对 localhost 的访问权限有限并且只有控制台客户端,标准 mysql 客户端可以做到。

使用--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 table(field password_expired='N') 不使密码过期。

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

首先我进入终端并输入:

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

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

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

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

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

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 登录屏幕上。

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

首先,我使用:

 mysql -u root -p

提供 'root' 的当前密码。 下一篇:

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

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

MySQL 密码过期

重置密码只能暂时解决问题。从 MySQL 5.7.4 到 5.7.10(为了鼓励更好的安全性 - 请参阅 MySQL: Password Expiration Policy)默认的 default_password_lifetime 变量值为 360(1 年左右)。对于这些版本,如果您不更改此变量(或单个用户帐户)所有 密码将在 360 天后过期。

因此您可能会从脚本中得到消息:"Your password has expired. To log in you must change it using a client that supports expired passwords."

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

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

您可以为所有用户禁用自动密码过期:

SET GLOBAL default_password_lifetime = 0;

正如 Mertaydin 在评论中指出的那样,要使此永久化,请将以下行添加到 my.cnf 文件 MySQL 启动时读取,在 [mysqld] 设置组下。 my.cnf 的位置取决于您的设置(例如 Windows,或 OS X 上的 Homebrew,或安装程序),以及您是否希望在 Unix 或全局上使用此每个用户:

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

参见MySQL docs on configuration files

在安全模式下启动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 服务

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

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

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

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

最简单的解决方案:

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

然后工作正常。

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

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

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

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

这对我有用:

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

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

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

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

暂时在 my.cnf 中的 [mysqld] 下添加 skip-grant-tables 并重新启动 mysql 成功了

在 phpmyadmin 中的 Windows 中查看变量:default_password_lifetime,并将其切换为 0(而不是 360),享受吧。

它可能比 mySQL 再花 360 天,所以添加 my.ini :

[mysqld]
default_password_lifetime=0

并重新启动 mysql。

这对我有用:

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

以根用户身份登录:

mysql -u root -p

然后您停用所有用户的密码自动过期功能:

SET GLOBAL default_password_lifetime = 0;

我做了这样的事情。

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

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

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

重新连接并:

并执行:

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

对于MySQL8.0+,如果出现这个错误,

    *Your password has expired. To log in you must change it using a client that 
    supports expired passwords.*

您需要使用当前用户,打开mysql终端,然后使用

SET PASSWORD ='123456'; To get a new password 123456 for current user;

不要使用 SET PASSWORD = PASSWORD('123456'); 这个已经在 MySQL 8.0+;

中弃用了