如何检索我的MySQL用户名和密码?

Mar*_*cel 154 mysql

我丢失了我的MySQL用户名和密码.我该如何检索它?

Xen*_*Yan 180

停止MySQL进程.

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

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

列出所有用户;

SELECT * FROM mysql.user;
Run Code Online (Sandbox Code Playgroud)

重设密码;

UPDATE mysql.user SET Password=PASSWORD('[password]') WHERE User='[username]';
Run Code Online (Sandbox Code Playgroud)

不要忘记,以

停止MySQL进程

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

当你完成.否则,您的数据库的安全性可能会受到影响.

  • 在MySQL 5.7.*中,`mysql.user`中没有名为`password`的列,而是使用`authentication_string`. (9认同)
  • 认为您不需要重新启动守护程序来重置普通用户.只是"FLUSH PRIVILEGES;" 更新用户密码后. - 只有root用户密码重置才需要--skip-grant-tables!通常不建议用于标准用户重置. (7认同)
  • 我发现这个+ http://stackoverflow.com/a/35277160/1604601非常有帮助 (3认同)

jak*_*ake 41

不幸的是,您的用户密码无法恢复.如果您不知道这是不可逆转的,那么它已经被单向哈希散列.我建议使用上面的Xenph Yan,然后创建一个新的.

您还可以使用手册中的以下过程重置Windows上任何MySQL 帐户的密码:

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

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

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

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

    UPDATE mysql.user SET Password=PASSWORD('MyNewPass') WHERE User='root';
    FLUSH PRIVILEGES;
    
    Run Code Online (Sandbox Code Playgroud)

    每个UPDATEFLUSH语句必须写在一行上.的UPDATE语句重置所有现有的根帐户的密码,而FLUSH语句告诉服务器重装授权表到内存中.

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

    开始菜单 - >运行 - > cmd

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

    C:\> C:\mysql\bin\mysqld-nt --init-file = C:\mysql-init.txt
    
    Run Code Online (Sandbox Code Playgroud)

    如果将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
    
    Run Code Online (Sandbox Code Playgroud)

    可以使用服务管理器找到相应的--defaults文件设置:

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

    在列表中找到MySQL服务,右键单击它,然后选择"属性"选项."可执行文件的路径"字段包含--defaults-file设置.

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

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

  • +1实际上*回答*问题. (6认同)
  • @Jake - 谢谢你的回答.我想竖起大拇指,但由于某种原因,stackoverflow不允许我这样做,因为声誉点.你的解释"很遗憾,你的用户密码是不可挽回的.如果你不知道这是不可逆转的单向散列,那么我的理解是关键,为什么我在谷歌上看到的其他东西只给了我指示*改变*我的密码.好的解释比单独的说明更有洞察力. (5认同)

Thi*_*key 33

这里最有用的答案的改进:

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

无需重启MySQL服务器.

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

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

--skip-grant-options使任何人都不用密码,并与所有特权连接.因为这是不安全的,你可能想要

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

from:reference:resetting-permissions-generic

  • 很大的改进. (2认同)

sne*_*rch 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;
}
Run Code Online (Sandbox Code Playgroud)

或者您可以查看这个DonationCoder线程,了解快速而简单的实现的源代码+可执行文件.

  • 这很完美.在提到的线程snemarch上有一个带有源代码的exe,用于检索存储在MySQL Workbench库中的用户帐户密码.虽然如果我有权读取或更新用户表,这些其他方法也可能有效. (2认同)

S.M*_*avi 6

无需停机即可完成

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

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

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

UPDATE mysql.user SET authentication_string=PASSWORD('123456') WHERE user='mousavi';  
Run Code Online (Sandbox Code Playgroud)

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

FLUSH PRIVILEGES;
Run Code Online (Sandbox Code Playgroud)

完毕!您没有停止或重新启动 mysql 服务就完成了。


Sye*_*lam 5

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

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

然后运行以下命令:

mysql> SELECT * FROM mysql.user;
Run Code Online (Sandbox Code Playgroud)

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

mysql> UPDATE mysql.user SET Password=PASSWORD('[password]') WHERE User='[username]';
Run Code Online (Sandbox Code Playgroud)

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


Saj*_*raf 5

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

sudo service mysql stop
Run Code Online (Sandbox Code Playgroud)

现在使用这个命令启动mysql

sudo /usr/sbin/mysqld --skip-grant-tables  --skip-networking &
Run Code Online (Sandbox Code Playgroud)

现在您可以使用登录到 mysql

sudo mysql
FLUSH PRIVILEGES;
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('MyNewPass');
Run Code Online (Sandbox Code Playgroud)

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