【问题标题】:How do I retrieve my MySQL username and password?如何找回我的 MySQL 用户名和密码?
【发布时间】:2010-09-05 11:38:20
【问题描述】:

我丢失了 MySQL 用户名和密码。如何找回?

【问题讨论】:

    标签: mysql


    【解决方案1】:

    停止 MySQL 进程。

    使用 --skip-grant-tables 选项启动 MySQL 进程。

    使用 -u root 选项启动 MySQL 控制台客户端。

    列出所有用户;

    SELECT * FROM mysql.user;
    

    重置密码;

    UPDATE mysql.user SET Password=PASSWORD('[password]') WHERE User='[username]';
    

    但是不要忘记

    停止 MySQL 进程

    正常启动 MySQL 进程(即没有 --skip-grant-tables 选项)

    当你完成时。否则,您的数据库的安全性可能会受到威胁。

    【讨论】:

    • 认为您不需要重新启动守护程序来重置普通用户。只是“刷新特权;”更新用户密码后。 --skip-grant-tables 仅用于 root 用户密码重置!通常不建议将这用于标准用户重置。
    • 使用dpkg-reconfigure mysql-server-5.5命令重置root MySQL密码有什么意义?
    • 在 MySQL 5.7.* 中,mysql.user 中没有名为password 的列,请改用authentication_string
    • 我发现这个 + stackoverflow.com/a/35277160/1604601 很有帮助
    • PASSWORD() 函数在 5.7.5 版本之后被弃用。另见stackoverflow.com/questions/52320576
    【解决方案2】:

    很遗憾,您的用户密码无法找回。它已使用单向哈希进行哈希处理,如果您不知道该哈希是不可逆的。我建议使用上面的 Xenph Yan,然后创建一个新的。

    您还可以使用the manual 中的以下过程来重置 Windows 上任何 MySQL root 帐户的密码:

    1. 以管理员身份登录您的系统。
    2. 如果 MySQL 服务器正在运行,请停止它。对于作为 Windows 服务运行的服务器,请转到 服务经理:

    开始菜单 -> 控制面板 -> 管理工具 -> 服务

    然后在列表中找到 MySQL 服务,并停止它。如果你的服务器是 未作为服务运行,您可能需要使用任务管理器强制其停止。

    1. 创建一个文本文件并将以下语句放入其中。将密码替换为您要使用的密码。

      UPDATE mysql.user SET Password=PASSWORD('MyNewPass') WHERE User='root';
      FLUSH PRIVILEGES;
      

      UPDATEFLUSH 语句都必须写在一行上。 UPDATE 语句重置所有现有 root 帐户的密码,FLUSH 语句告诉服务器将授权表重新加载到内存中。

    2. 保存文件。对于此示例,文件将命名为 C:\mysql-init.txt。
    3. 打开控制台窗口以进入命令提示符:

      开始菜单 -> 运行 -> cmd

    4. 使用特殊的 --init-file 选项启动 MySQL 服务器:

      C:\> C:\mysql\bin\mysqld-nt --init-file = C:\mysql-init.txt
      

      如果您将 MySQL 安装到 C:\mysql 以外的位置,请相应地调整命令。

      服务器在启动时执行由--init-file 选项命名的文件的内容,更改每个root 帐户密码。

      如果您希望服务器输出显示在控制台窗口而不是日志文件中,您还可以在命令中添加 --console 选项。

      如果您使用 MySQL 安装向导安装 MySQL,您可能需要指定 --defaults-file 选项:

      C:\> "C:\Program Files\MySQL\MySQL Server 5.0\bin\mysqld-nt.exe" --defaults-file="C:\Program Files\MySQL\MySQL Server 5.0\my.ini" --init-file=C:\mysql-init.txt
      

      可以使用服务管理器找到适当的 --defaults-file 设置:

      开始菜单 -> 控制面板 -> 管理工具 -> 服务

      在列表中找到 MySQL 服务,右键单击它,然后选择“属性”选项。 Path to executable 字段包含 --defaults-file 设置。

    5. 服务器启动成功后,删除C:\mysql-init.txt
    6. 停止 MySQL 服务器,然后再次以正常模式重新启动它。如果您将服务器作为服务运行,请从 Windows 服务窗口启动它。如果您手动启动服务器,请使用您通常使用的任何命令。

    您现在应该能够使用新密码以 root 身份连接到 MySQL。

    【讨论】:

    • @Jake - 感谢您的回答。我想竖起大拇指,但由于某些原因,stackoverflow 不允许我这样做,因为声誉点。您的解释“不幸的是,您的用户密码是无法恢复的。它已经用单向哈希进行了哈希处理,如果您不知道这是不可逆转的”,这是我理解为什么我在谷歌上阅读的其他所有内容只给我指示 更改我的密码。好的解释比单独的说明更有洞察力。
    • @jake 我在服务列表中找不到 mysql 请告诉我该怎么办?
    • 为什么是你的mysqld-nt 而不是mysqld
    • 顺便说一句,--init-file 有非文件选项吗? (类似于 mysql.exe 的 --execute 命令。)
    【解决方案3】:

    此处对最有用的答案进行了改进:

    1]无需重启mysql服务器
    2] 连接到网络的 MySQL 服务器的安全问题

    无需重启 MySQL 服务器。

    在更新mysql.user语句后使用FLUSH PRIVILEGES;修改密码。

    FLUSH 语句告诉服务器将授权表重新加载到内存中,以便它注意到密码更改。

    --skip-grant-options 使任何人都可以在没有密码和所有权限的情况下进行连接。因为这是不安全的,你可能想要

    使用 --skip-grant-tables--skip-networking 来防止远程客户端连接。

    来自:参考:resetting-permissions-generic

    【讨论】:

    • @ThinkingMonkey,这不是假设当前登录的用户有权限修改mysql.user吗?但通常情况并非如此。
    【解决方案4】:

    使用现有用户从 windows cmd 登录 MySql:

    mysql -u 用户名 -p
    输入密码:****

    然后运行以下命令:

    mysql> SELECT * FROM mysql.user;
    

    之后为相应用户复制加密的 md5 密码,并且在网络上有几个在线密码解密应用程序可用。使用此解密密码并在下次登录时使用此密码。 或使用流动命令更新用户密码:

    mysql> UPDATE mysql.user SET Password=PASSWORD('[password]') WHERE User='[username]';
    

    然后使用新密码和用户登录。

    【讨论】:

      【解决方案5】:

      虽然对操作问题的严格、合乎逻辑、计算机科学的解释是要求 both“我如何检索我的 MySQL 用户名”“密码” - 我认为解决OR解释可能对某人有用。换句话说……

      1) 如何找回我的 MySQL 用户名?

      2) 密码

      后一种情况似乎已经得到充分解决,所以我不会打扰它。以下是单独解决“我如何检索我的 MySQL 用户名”的情况。喂。

      要查找您的 mysql 用户名,请从 mysql shell 运行以下命令...

      从 mysql.user 中选择用户;

      它将打印一个所有mysql用户的表。

      【讨论】:

      • 这是一个迟到的答案,只有当您的解决方案与已经发布或接受的解决方案明显不同时,您才应该发布这些内容。在这种情况下并非如此,尤其是您的答案与已接受的答案重复。
      【解决方案6】:

      虽然您无法在不使用暴力破解的情况下直接恢复 MySQL 密码,但可能还有另一种方法 - 如果您使用 MySQL Workbench 连接到数据库,并且已将凭据保存到“保险库”,那么您就是黄金.

      在 Windows 上,凭据存储在 %APPDATA%\MySQL\Workbench\workbench_user_data.dat - 使用 CryptProtectData 加密(没有任何额外的熵)。解密很简单:

      std::vector<unsigned char> decrypt(BYTE *input, size_t length) {
          DATA_BLOB inblob { length, input };
          DATA_BLOB outblob;
      
          if (!CryptUnprotectData(&inblob, NULL, NULL, NULL, NULL, CRYPTPROTECT_UI_FORBIDDEN, &outblob)) {
                  throw std::runtime_error("Couldn't decrypt");
          }
      
          std::vector<unsigned char> output(length);
          memcpy(&output[0], outblob.pbData, outblob.cbData);
      
          return output;
      }
      

      或者您可以查看此DonationCoder thread 以获取快速而简单的实现的源代码 + 可执行文件。

      【讨论】:

      • 这太完美了。在提到的线程 snemarch 上有一个带有源代码的 exe,用于检索存储在我的 MySQL Workbench 保险库中的我的用户帐户密码。虽然如果我有权读取或更新用户表,这些其他方法可能也可以工作。
      • 但是相对而言,使用Workbench的人很少。
      • 这是另一个实现,可以在使用 Visual Studio 构建后运行以恢复 Workbench 存储的用户名和密码信息:github.com/wclear/MySQLWorkbenchPasswordViewer
      【解决方案7】:

      如果您对运行 mysql 的服务器具有 root 访问权限,则应使用此命令停止 mysql 服务器

      sudo service mysql stop
      

      现在用这个命令启动mysql

      sudo /usr/sbin/mysqld --skip-grant-tables  --skip-networking &
      

      现在您可以使用

      登录到 mysql
      sudo mysql
      FLUSH PRIVILEGES;
      SET PASSWORD FOR 'root'@'localhost' = PASSWORD('MyNewPass');
      

      完整的说明可以在这里找到http://www.techmatterz.com/recover-mysql-root-password/

      【讨论】:

        【解决方案8】:

        如果您碰巧设置了 ODBC,则可以从 ODBC 配置文件中获取密码。这在 Linux 的 /etc/odbc.ini 和 Windows 注册表中的 Software/ODBC 文件夹中(有几个 - 可能需要一些搜索)

        【讨论】:

          【解决方案9】:

          做到这一点没有停机时间

          在终端中运行以下命令以连接到 DBMS(您需要 root 访问权限):

          sudo mysql -u root -p;
          

          运行更新目标用户的密码(我的示例用户名是mousavi,它的密码必须是123456):

          UPDATE mysql.user SET authentication_string=PASSWORD('123456') WHERE user='mousavi';  
          

          此时您需要执行刷新以应用更改:

          FLUSH PRIVILEGES;
          

          完成!您在没有任何停止或重新启动 mysql 服务的情况下完成了它。

          【讨论】:

            【解决方案10】:

            保存文件。对于此示例,该文件将命名为 C:\mysql-init.txt。 它要求保存文件的管理权限

            【讨论】:

              猜你喜欢
              • 2016-05-13
              • 2011-02-11
              • 2018-07-27
              • 1970-01-01
              • 2016-10-09
              • 1970-01-01
              • 2017-11-16
              • 1970-01-01
              相关资源
              最近更新 更多