Mysql密码过期。 无法连接
我刚刚擦掉了我的Mac,并重新安装了El Capitan。 我正努力地连接到Mysql。 通过Web服务器安装过程,我创build了一个简单的PHPtesting文件:
<?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.
我从来没有见过这个连接的回应。 如果我无法连接,我该如何解决?
编辑
在terminal我input了命令:
mysql -u root -p
这就要求我input密码(当前的密码)。我现在可以访问mysql命令,但是我尝试的结果是这个错误:
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
如何使用ALTER USER
重置密码?
所以我终于find了自己的解决scheme。
首先,我进入terminal,键入:
mysql -u root -p
这要求我input的当前密码,它使我能够提供更多的mysql命令。 我从这里尝试的任何东西都给出了这个错误:
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
这是令人困惑的,因为我实际上看不到使用ALTER USER
语句重置密码的方法,但是我find了另一个简单的解决scheme:
SET PASSWORD = PASSWORD('xxxxxxxx');
首先,我使用:
mysql -u root -p
给我的当前密码的“根”。 下一个:
mysql> ALTER USER `root`@`localhost` IDENTIFIED BY 'new_password', `root`@`localhost` PASSWORD EXPIRE NEVER;
将'new_password'
更改为用户“root”的新密码。
它解决了我的问题。
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 – 您的密码已过期。要login,您必须使用支持过期密码的客户端进行更改。 第一次在phpMyAdminlogin屏幕。
我最近在mac os x capitan上安装mysql时遇到了同样的问题。 我没有在这里find正确的答案,所以添加这个答案。
当前版本的MySql在安装mysql时会生成一个临时密码。 使用此密码使用下面的mysqladmin实用程序设置一个新密码;
/ usr / local / mysql / bin / mysqladmin -u root -p'<你的临时密码>'密码'<你的新密码>'
希望它可以帮助你和其他人。
MySQL密码到期
重置密码只能暂时解决问题。 从MySQL 5.7.4到5.7.10(为了鼓励更好的安全性 – 请参阅MySQL:密码过期策略 ),默认的default_password_lifetime
variables值是360(1 year-ish)。 对于这些版本,如果您不更改此variables(或个人用户帐户), 所有密码将在360天后过期。
所以从一个脚本中你可能会得到这样的信息:“你的密码已经过期了。要login,你必须使用支持过期密码的客户端来更改它。
要停止自动密码过期,请以root身份login( 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
(这里也可能有其他设置…)
查看configuration文件中的MySQL文档 。
只需下载MySQL工作台即可login。它将提示您立即自动更改密码。
以安全模式启动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服务
我前几天面对这个问题。 为了5.7版本的MySQL的最佳解决scheme; login你的mysql控制台并使用以下命令修改你的密码:
ALTER USER `root`@`localhost` IDENTIFIED BY 'new_password', `root`@`localhost` PASSWORD EXPIRE NEVER;
密码到期是MySQL 5.6或5.7中的一项新function。
答案很清楚:使用一个能够过期更改密码的客户端(我认为Sequel Pro可以做到这一点)。
MySQLi库显然不能改变过期的密码。
如果您对本地主机的访问权限有限,并且您只有一个控制台客户端,则标准的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表(字段password_expired ='N')不要过期密码。
所有这些答案都使用Linux控制台来访问MySQL。
如果您使用的是Windows并且正在使用WAMP,则可以通过打开MySQL控制台( click WAMP icon->MySQL->MySQL console
)来启动。
然后它会要求你input你当前的密码,input它。
然后inputSET PASSWORD = PASSWORD('some_pass');
最简单的解决scheme
[PATH MYSQL]/bin/mysql -u root [Enter password] SET GLOBAL default_password_lifetime = 0;
然后工作正常。
打开MySQL控制台并inputSET PASSWORD ='您的密码'; 然后按ENTER键,它将为root用户设置您定义的密码。
你只能写SET PASSWORD =''; 这将为root用户设置密码为空白。
这对我工作:
ALTER USER'root'@'localhost'IDENTIFIED BY'yourpassword','root'@'localhost'密码永远不会出现;