【问题标题】:Mysql password expired. Can't connectmysql密码过期了。无法连接
【发布时间】:2015-10-28 09:56:15
【问题描述】:

我刚刚擦除了我的 Mac 并重新安装了 El Capitan。我现在正在努力连接到 Mysql。完成网络服务器设置过程后,我创建了一个简单的 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重置密码?

【问题讨论】:

  • 这真的很烦人,整个服务可以因此而关闭
  • 尝试运行/usr/local/mysql/bin/mysqladmin -u root -p password
  • @ConnorLeech 花了几个小时试图重置自制软件的 MariaDB 过期的 root 密码,但这为我解决了问题 - 谢谢!

标签: php mysql macos osx-elcapitan


【解决方案1】:

首先,我使用:

 mysql -u root -p

提供我当前的“root”密码。 下一个:

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

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

【讨论】:

  • 出现错误:ERROR 1064 (42000):您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 'USER 'root'@'localhost' IDENTIFIED BY 'newPassword','root'@'localhost' PASSWORD ' 附近使用正确的语法
  • 这很好用。 ALTER USER 'username'@'%' IDENTIFIED BY 'your_password', 'user'@'%' PASSWORD EXPIRE NEVER;
  • 收到错误:ERROR 1805 (HY000): Column count of mysql.user is wrong. Expected 45, found 46. The table is probably corrupted
【解决方案2】:

这对我有用:

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

【讨论】:

    【解决方案3】:

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

    首先我进入终端并输入:

    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('') ' 已弃用,将在未来的版本中删除。请改用 SET PASSWORD = ''
    • 很抱歉这对我不起作用,但 Piotr N. 发布的 alter user 起作用了。也许在不同版本的 MySQL 上运行。
    【解决方案4】:

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

    【讨论】:

    • 也为我工作过,OS X El Capital 和 MySQL 5.17.13!谢谢!
    • 值得一提的是,“密码”一词不是占位符,而“root”是您要更新的用户名:mysqladmin -u [username] -p password
    • 这是(似乎)在 Linux (Fedora 25) 上对我有用的唯一东西。谢谢。
    【解决方案5】:

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

    如果您在 Windows 上并使用 WAMP,则可以从打开 MySQL 控制台 (click WAMP icon-&gt;MySQL-&gt;MySQL console) 开始。

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

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

    【讨论】:

      【解决方案6】:

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

      重新连接并:

      并执行:

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

      【讨论】:

        【解决方案7】:

        MySQL 密码过期

        重置密码只能暂时解决问题。从 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 在 cmets 中指出的那样,为了使这个永久保存,将以下行添加到 MySQL 在启动时读取的 my.cnf 文件中,在 [mysqld] 设置组下。 my.cnf 的位置取决于您的设置(例如 Windows,或 OS X 上的 Homebrew,或安装程序),以及您是否希望在 Unix 上或全局上使用此每个用户:

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

        请参阅MySQL docs on configuration files

        【讨论】:

        • 密码已经过期,只有全局设置对我有用。
        • 可以将此参数添加到/etc/mysql/my.cnf,mysqld下; default_password_lifetime = 0 否则,mysql重启后会再次出现同样的错误。
        【解决方案8】:

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

        可能比 mySQL 还要 360 天,所以添加 my.ini :

        [mysqld]
        default_password_lifetime=0
        

        然后重启mysql。

        【讨论】:

        • 它可能比 default_password_lifetime 再需要 360 天,所以在 my.ini 中添加:
        【解决方案9】:

        使用 --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 我得到这个错误:ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
        • 为了记录,我设法通过将第一个命令更改为mysql -u root -p 进入,然后它要求我输入我输入的密码。你的下一个命令对我不起作用,因为它说@ 987654325@
        • 您知道如何使用 ALTER USER 重置密码吗?我对 Mysql 不是很好(我更喜欢 NodeJS/MongoDB)。
        【解决方案10】:

        这项工作适合我:

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

        以 root 身份登录:

        mysql -u root -p
        

        然后你禁用所有用户的密码自动过期:

        SET GLOBAL default_password_lifetime = 0;
        

        【讨论】:

          【解决方案11】:

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

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

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

          my.cnf 中的[mysqld] 下临时添加skip-grant-tables 并重新启动mysql 就可以了

          【讨论】:

            【解决方案12】:

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

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

            /usr/local/mysql/bin/mysqladmin -u root -p''密码''

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

            【讨论】:

              【解决方案13】:

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

              【讨论】:

                【解决方案14】:

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

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

                【讨论】:

                  【解决方案15】:

                  最简单的解决方案:

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

                  然后工作正常。

                  【讨论】:

                    【解决方案16】:

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

                    【讨论】:

                      【解决方案17】:

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

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

                      MySQLi 库显然无法更改过期密码。

                      如果你对 localhost 的访问受限,并且你只有一个控制台客户端,那么标准的 mysql 客户端可以做到。

                      【讨论】:

                      • 感谢您的回复。我已经下载了 Sequel Pro 并尝试通过套接字连接。我收到关于密码过期的相同错误...
                      【解决方案18】:

                      只需打开 MySQL Workbench 并选择 [Instance] Startup/Shutdown 并单击 start server。 它对我有用

                      【讨论】:

                        【解决方案19】:

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

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

                        【讨论】:

                          【解决方案20】:

                          我做了这样的事情。

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

                          【讨论】:

                          • You must reset your password using ALTER USER statement before executing this statement.
                          【解决方案21】:

                          对于 MySQL 8.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+ 中被弃用了;

                          【讨论】:

                            猜你喜欢
                            • 2013-03-29
                            • 2014-04-07
                            • 1970-01-01
                            • 2021-08-17
                            • 2013-04-23
                            • 2016-04-02
                            • 2021-01-21
                            • 2012-01-27
                            • 2016-07-02
                            相关资源
                            最近更新 更多