176

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

4

10 回答 10

196

停止 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 选项)

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

于 2008-08-07T04:02:17.090 回答
46

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

您还可以使用手册中的以下过程来重置 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 服务,右键单击它,然后选择 Properties 选项。Path to executable 字段包含--defaults-file设置。

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

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

于 2008-08-07T04:54:27.937 回答
35

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

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

无需重新启动 MySQL 服务器。

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

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

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

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

来自:参考:resetting-permissions-generic

于 2011-11-10T10:47:23.700 回答
8

无需停机即可完成

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

sudo mysql -u root -p;

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

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

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

FLUSH PRIVILEGES;

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

于 2018-03-10T10:00:15.990 回答
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 线程以获取快速而肮脏的实现的源代码 + 可执行文件。

于 2015-11-03T18:47:10.167 回答
5

如果您对运行 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/

于 2016-01-22T11:36:35.247 回答
4

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

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

然后运行以下命令:

mysql> SELECT * FROM mysql.user;

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

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

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

于 2014-12-02T08:25:57.393 回答
0

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

于 2017-10-30T15:04:51.237 回答
0

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

于 2019-10-23T05:19:31.553 回答
-1

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

1) 如何检索我的 MySQL 用户名?

或者

2) 密码

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

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

从 mysql.user 中选择用户;

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

于 2015-06-04T22:49:04.340 回答