我刚刚擦了我的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
重置密码?
答案 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 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
(这里也可能有其他设置......)
答案 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:
并执行:
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;