我丢失了我的MySQL用户名和密码。我该如何检索它?
答案 0 :(得分:174)
停止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选项)
当你完成。否则,您的数据库的安全性可能会受到影响。
答案 1 :(得分:38)
不幸的是,您的用户密码无法恢复。如果您不知道这是不可逆转的,那么它已经被单向哈希散列。我建议使用上面的Xenph Yan,然后创建一个新的。
您还可以使用the manual中的以下步骤重置Windows上任何MySQL root 帐户的密码:
开始菜单 - >控制面板 - >管理工具 - >服务
然后在列表中找到MySQL服务,并将其停止。如果您的服务器是 不作为服务运行,您可能需要使用任务管理器强制它停止。
创建一个文本文件并在其中放置以下语句。将密码替换为您要使用的密码。
UPDATE mysql.user SET Password=PASSWORD('MyNewPass') WHERE User='root';
FLUSH PRIVILEGES;
UPDATE 和 FLUSH 语句必须写在一行上。 UPDATE 语句重置所有现有root帐户的密码, FLUSH 语句告诉服务器将授权表重新加载到内存中。
打开控制台窗口以进入命令提示符:
开始菜单 - >运行 - > CMD
使用特殊的 - 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
可以使用服务管理器找到相应的 - 默认文件设置:
开始菜单 - >控制面板 - >管理工具 - >服务
在列表中找到MySQL服务,右键单击它,然后选择“属性”选项。可执行文件的路径字段包含 - defaults-file 设置。
您现在应该能够使用新密码以root身份连接到MySQL。
答案 2 :(得分:33)
这里最有用的答案的改进:
1]无需重启mysql服务器
2]连接到网络的MySQL服务器的安全问题
无需重启MySQL服务器。
在更新mysql.user语句之后使用FLUSH PRIVILEGES;
进行密码更改。
FLUSH语句告诉服务器将授权表重新加载到内存中,以便它注意到密码更改。
--skip-grant-options
使任何人都可以在没有密码和所有权限的情况下进行连接。因为这是不安全的,你可能想要
将 - skip-grant-tables 与 - skip-networking 结合使用,以防止远程客户端连接。
来自:reference:resetting-permissions-generic
答案 3 :(得分: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以获取快速实施的源代码+可执行文件。
答案 4 :(得分:4)
如果您具有运行mysql的服务器的root访问权限,则应使用此命令停止mysql服务器
sudo service mysql stop
现在使用此命令启动mysql
sudo /usr/sbin/mysqld --skip-grant-tables --skip-networking &
现在您可以使用
登录mysqlsudo mysql
FLUSH PRIVILEGES;
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('MyNewPass');
可在此处找到完整说明http://www.techmatterz.com/recover-mysql-root-password/
答案 5 :(得分:3)
在终端中运行以下命令以连接到DBMS(您需要root访问权限):
sudo mysql -u root -p;
运行目标用户的更新密码(我的示例用户名为mousavi
,密码必须为123456
):
UPDATE mysql.user SET authentication_string=PASSWORD('123456') WHERE user='mousavi';
此时您需要执行刷新以应用更改:
FLUSH PRIVILEGES;
完成!你没有任何停止或重启mysql服务就做到了。
答案 6 :(得分:2)
使用现有用户从Windows cmd登录MySql:
mysql -u username -p
输入密码:****
然后运行以下命令:
mysql> SELECT * FROM mysql.user;
之后,为相应的用户复制加密的md5密码,并且网上有几个在线密码解密的应用程序。使用此解密密码并在下次使用此密码登录。 或使用流动命令更新用户密码:
mysql> UPDATE mysql.user SET Password=PASSWORD('[password]') WHERE User='[username]';
然后使用新密码和用户登录。
答案 7 :(得分:0)
虽然严格的,合乎逻辑的,计算机科学对op的问题的解释是要求两者“如何检索我的MySQL用户名”和“密码” - 我认为有人也可以解决 OR 解释。换句话说......
1)如何检索我的MySQL用户名?
或强>
2)密码
后一种情况似乎已经得到了充分的解决,所以我不会理会它。以下是单独使用“如何检索我的MySQL用户名”的解决方案。 HIH。
要查找您的mysql用户名,请从mysql shell运行以下命令...
SELECT User FROM mysql.user;
它将打印所有mysql用户的表。
答案 8 :(得分:0)
如果您碰巧设置了ODBC,则可以从ODBC配置文件中获取密码。这是在Linux的/etc/odbc.ini和Windows中的注册表中的Software / ODBC文件夹中(有几个 - 可能需要一些搜索)
答案 9 :(得分:0)
对于窗口用户,您可以按照此guide重设密码
答案 10 :(得分:0)
保存文件。对于此示例,文件将命名为C:\ mysql-init.txt。 它要求管理权限来保存文件