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
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+;
中弃用了
我刚刚擦除 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
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+;