Mysql密码已过期.无法连接

Coo*_*oop 82 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();
?>
Run Code Online (Sandbox Code Playgroud)

当我运行它时,我收到此错误:

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.
Run Code Online (Sandbox Code Playgroud)

我以前从未见过连接的响应.如果我无法连接,如何解决?

编辑

在终端我输入命令:

mysql -u root -p

这问我输入的密码(当前的密码).我现在可以访问mysql命令,但我尝试的任何内容都会导致此错误:

ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
Run Code Online (Sandbox Code Playgroud)

如何使用重置密码ALTER USER

Coo*_*oop 172

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

首先我进入终端并打字:

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

  • 我使用MySQL的5.7.9版本,现在不推荐使用,因为来自MySQL命令提示符的此错误消息告诉我们:警告(代码1287):'SET PASSWORD = PASSWORD('<plaintext_password>')'已弃用,将在以下位置删除未来的版本.请改用SET PASSWORD ='<plaintext_password>' (5认同)

小智 84

首先,我使用:

 mysql -u root -p
Run Code Online (Sandbox Code Playgroud)

给我当前的'root'密码.下一个:

mysql> ALTER USER `root`@`localhost` IDENTIFIED BY 'new_password',
       `root`@`localhost` PASSWORD EXPIRE NEVER;
Run Code Online (Sandbox Code Playgroud)

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

  • 获取错误:错误1064(42000):您的SQL语法有错误; 检查与您的MySQL服务器版本相对应的手册,以便在'USER'root'@'localhost'附近使用正确的语法'IDENTIFIED BY'newPassword','root'@'localhost'PASSWORD'在第1行 (2认同)

Kit*_*Kit 49

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.
Run Code Online (Sandbox Code Playgroud)

这类似于pavan sachi的答案,但有密码提示.

我的错误是"#1862 - 您的密码已过期.要登录,您必须使用支持过期密码的客户端进行更改." 在phpMyAdmin登录屏幕第一次.

  • 值得一提的是,"password"这个词不是占位符*,而"root"是你想要更新的用户的名字:`mysqladmin -u [username] -p password` (4认同)

Dav*_*itt 17

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.cnfMySQL在启动时读取的文件集中[mysqld].位置my.cnf取决于您的设置(例如Windows,OS X上的Homebrew或安装程序),以及您是希望Unix或全局上的每个用户:

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

请参阅有关配置文件MySQL文档.

  • 使用已经过期的密码,只有全局设置对我有用。 (2认同)
  • 您可以将此参数添加到mysqld下的/etc/mysql/my.cnf; default_password_lifetime = 0否则,在mysql重启后你会再次遇到同样的错误. (2认同)
  • 谢谢@Dave Everitt和@mertaydin! (2认同)

小智 11

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

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

/ usr/local/mysql/bin/mysqladmin -u root -p'<您的临时密码>'密码'<您的新密码>'

希望它能帮助你和其他人.


小智 7

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


Rob*_*lor 6

这对我有用:

ALTER USER 'root'@'localhost' IDENTIFIED BY 'yourpassword','root'@'localhost' PASSWORD EXPIRE NEVER;
Run Code Online (Sandbox Code Playgroud)


Lau*_*nka 5

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

它可能比 mySQL 再次需要 360 天,所以在 my.ini 中添加:

[mysqld]
default_password_lifetime=0
Run Code Online (Sandbox Code Playgroud)

并重新启动mysql。