我丢失了我的MySQL用户名和密码。 我如何找回它?
Stop the MySQL process.
Start the MySQL process with the --skip-grant-tables option.
Start the MySQL console client with the -u root option.
列出所有用户;
1
| SELECT * FROM mysql.user; |
重设密码;
1
| UPDATE mysql.user SET Password=PASSWORD('[password]') WHERE User='[username]'; |
但不要忘记
Stop the MySQL process
Start the MySQL Process normally (i.e. without the --skip-grant-tables option)
完成后。否则,数据库的安全性可能会受到威胁。
不幸的是,您的用户密码无法检索。它已经用一种单向散列进行了散列,如果您不知道它是不可逆的。我建议与上面的Xenph Yan一起使用,然后创建一个新的。
您还可以使用手册中的以下步骤为Windows上的任何MySQL根帐户重设密码:
以管理员身份登录到系统。
如果MySQL服务器正在运行,请停止它。对于作为Windows服务运行的服务器,请转到
服务经理:
Start Menu -> Control Panel -> Administrative Tools -> Services
然后在列表中找到MySQL服务,并停止它。如果您的服务器是
不能作为服务运行,则可能需要使用任务管理器强制其停止。
创建一个文本文件,并将以下语句放入其中。用您要使用的密码替换密码。
1 2
| UPDATE mysql.user SET Password=PASSWORD('MyNewPass') WHERE User='root';
FLUSH PRIVILEGES; |
UPDATE和FLUSH语句必须分别写在一行上。 UPDATE语句重置所有现有根帐户的密码,而FLUSH语句告诉服务器将授权表重新加载到内存中。
保存文件。对于此示例,文件将命名为C:\ mysql-init.txt。
打开控制台窗口以转到命令提示符:
Start Menu -> Run -> cmd
使用特殊的--init-file选项启动MySQL服务器:
1
| C:\\> C:\\mysql\\bin\\mysqld-nt --init-file = C:\\mysql-init.txt |
如果将MySQL安装到C:\ mysql以外的位置,请相应地调整命令。
服务器在启动时执行由--init-file选项命名的文件的内容,更改每个root帐户密码。
如果希望服务器输出显示在控制台窗口中而不是日志文件中,还可以在命令中添加--console选项。
如果使用MySQL安装向导安装了MySQL,则可能需要指定--defaults-file选项:
1
| 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设置:
Start Menu -> Control Panel -> Administrative Tools -> Services
在列表中找到MySQL服务,右键单击它,然后选择"属性"选项。可执行文件的路径字段包含--defaults-file设置。
服务器成功启动后,删除C:\ mysql-init.txt。
停止MySQL服务器,然后再次以正常模式重新启动它。如果将服务器作为服务运行,请从Windows服务窗口启动它。如果手动启动服务器,请使用通常使用的任何命令。
现在,您应该可以使用新密码以root用户身份连接到MySQL。
对最有用的答案的一种改进:
1] No need to restart the mysql server
2] Security concern for a MySQL server connected to a network
无需重新启动MySQL服务器。
在更新mysql.user语句后使用FLUSH PRIVILEGES;更改密码。
The FLUSH statement tells the server to reload the grant tables into memory so that it notices the password change.
--skip-grant-options使任何人都无需密码就可以使用所有特权进行连接。因为这是不安全的,所以您可能想要
use --skip-grant-tables in conjunction with --skip-networking to prevent remote clients from connecting.
来自:参考:reset-permissions-generic
做到无停机时间
在终端中运行以下命令以连接到DBMS(您需要root访问权限):
运行目标用户的更新密码(例如,我的用户名是mousavi,它的密码必须是123456):
1
| UPDATE mysql.user SET authentication_string=PASSWORD('123456') WHERE user='mousavi'; |
此时,您需要进行刷新以应用更改:
做完了!您做到了,没有任何停止或重启mysql服务。
如果不进行暴力破解就无法直接恢复MySQL密码,则可能有另一种方式-如果您使用MySQL Workbench连接到数据库,并将凭据保存到"保险库",那您就很高兴了。
在Windows上,凭据存储在%APPDATA%\ MySQL \ Workbench \ workbench_user_data.dat中-用CryptProtectData加密(没有任何其他熵)。解密很容易:
1 2 3 4 5 6 7 8 9 10 11 12 13
| 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线程,以获取快捷方式实现的源代码和可执行文件。
如果您对运行mysql的服务器具有root访问权限,则应使用此命令停止mysql服务器
现在使用此命令启动mysql
1
| sudo /usr/sbin/mysqld --skip-grant-tables --skip-networking & |
现在您可以使用登录到mysql
1 2 3
| sudo mysql
FLUSH PRIVILEGES;
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('MyNewPass'); |
完整的说明可以在这里找到http://www.techmatterz.com/recover-mysql-root-password/
使用现有用户从Windows cmd登录MySql:
mysql -u username -p
Enter password:****
blockquote>
然后运行以下命令:
1
| mysql> SELECT * FROM mysql.user; |
之后,复制相应用户的加密的md5密码,然后在Web中提供几个在线密码解密的应用程序。使用此解密密码,并下次使用该密码登录。
或使用以下命令更新用户密码:
1
| mysql> UPDATE mysql.user SET Password=PASSWORD('[password]') WHERE User='[username]'; |
然后使用新密码和用户登录。
保存文件。对于此示例,文件将命名为C:\ mysql-init.txt。
它要求管理权限来保存文件
如果碰巧设置了ODBC,则可以从ODBC配置文件中获取密码。这在Linux的/etc/odbc.ini中和Windows注册表中的Software / ODBC文件夹中(有几个-可能需要一些时间才能找到)
尽管对op问题的严格,逻辑,计算机科学的解释是需要"如何检索我的MySQL用户名"和"密码"两者-我认为对某些人来说,也可以使用OR解释。换一种说法 ...
1)如何获取我的MySQL用户名?
要么
2)密码
后一种情况似乎已经得到了充分解决,因此我不会理会。以下是仅针对"如何获取我的MySQL用户名"案例的解决方案。嗨。
要找到您的mysql用户名,请从mysql shell运行以下命令...
从mysql.user中选择用户;
它将打印所有mysql用户的表。