题
我丢失了 MySQL 用户名和密码。我该如何取回它?
解决方案
停止 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 选项)
当你完成时。否则,您的数据库的安全性可能会受到损害。
其他提示
不幸的是,您的用户密码无法恢复。它已经用单向哈希进行了哈希处理,如果您不知道,则该哈希是不可逆的。我建议使用上面的 Xenph Yan,然后创建一个新的。
您还可以使用以下过程 手册 用于重置任何 MySQL 的密码 根 Windows 上的帐户:
- 以管理员身份登录到您的系统。
- 如果 MySQL 服务器正在运行,请将其停止。对于作为Windows服务运行的服务器,请访问Services Manager:
开始菜单 -> 控制面板 -> 管理工具 -> 服务
然后在列表中找到MySQL服务,并将其停止。如果您的服务器未作为服务运行,则可能需要使用任务管理器来强制停止。
创建一个文本文件并将以下语句放入其中。将密码替换为您要使用的密码。
UPDATE mysql.user SET Password=PASSWORD('MyNewPass') WHERE User='root'; FLUSH PRIVILEGES;
这 更新 和 冲洗 每个语句必须写在一行上。这 更新 语句重置所有现有 root 帐户的密码,并且 冲洗 语句告诉服务器将授权表重新加载到内存中。
- 保存文件。对于本示例,该文件将被命名为 C:\mysql-init.txt。
打开控制台窗口以进入命令提示符:
开始菜单->运行->cmd
使用特殊命令启动 MySQL 服务器 --初始化文件 选项:
C:\> C:\mysql\bin\mysqld-nt --init-file = C:\mysql-init.txt
如果您将 MySQL 安装到了其他位置 C:\mysql, ,相应地调整命令。
服务器执行名为的文件的内容 --初始化文件 启动时的选项,更改每个 根 户口密码。
您还可以添加 - 安慰 如果您希望服务器输出出现在控制台窗口而不是日志文件中,请使用该命令的选项。
如果您使用 MySQL 安装向导安装 MySQL,则可能需要指定 --默认文件 选项:
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 服务,右键单击它,然后选择“属性”选项。可执行文件的路径字段包含 --默认文件 环境。
- 服务器启动成功后,删除 C:\mysql-init.txt.
- 停止 MySQL 服务器,然后再次以正常模式重新启动。如果将服务器作为服务运行,请从 Windows 服务窗口启动它。如果您手动启动服务器,请使用您通常使用的任何命令。
您现在应该能够使用新密码以 root 身份连接到 MySQL。
对这里最有用的答案的改进:
1]无需重启mysql服务器
2] 连接到网络的 MySQL 服务器的安全问题
无需重新启动 MySQL 服务器。
使用 FLUSH PRIVILEGES;
更新 mysql.user 语句后进行密码更改。
FLUSH 语句告诉服务器将授权表重新加载到内存中,以便它注意到密码更改。
这 --skip-grant-options
使任何人都可以无需密码并拥有所有权限进行连接。因为这是不安全的,你可能想要
使用 --跳过授权表 和这个结合 --跳过网络 以防止远程客户端连接。
从:参考: 重置权限通用
虽然您无法在不进行暴力破解的情况下直接恢复 MySQL 密码,但可能还有另一种方法 - 如果您使用 MySQL Workbench 连接到数据库,并将凭据保存到“保管库”,那么您就成功了。
在 Windows 上,凭据存储在 %APPDATA%\MySQL\Workbench\workbench_user_data.dat - 加密为 加密保护数据 (没有任何额外的熵)。解密很容易:
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 服务器
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/
无需停机即可完成
在终端中运行以下命令以连接到 DBMS(您需要 root 访问权限):
sudo mysql -u root -p;
运行更新目标用户的密码(对于我的示例用户名是 mousavi
它的密码必须是 123456
):
UPDATE mysql.user SET authentication_string=PASSWORD('123456') WHERE user='mousavi';
此时您需要进行刷新以应用更改:
FLUSH PRIVILEGES;
完毕!您无需停止或重新启动 mysql 服务即可完成此操作。
使用现有用户从 Windows cmd 登录 MySql:
mysql -u 用户名 -p
输入密码:****
然后运行以下命令:
mysql> SELECT * FROM mysql.user;
之后复制相应用户的加密 md5 密码,并且网络上有几个在线密码解密应用程序。使用此解密密码并在下次登录时使用此密码。或使用以下命令更新用户密码:
mysql> UPDATE mysql.user SET Password=PASSWORD('[password]') WHERE User='[username]';
然后使用新密码和用户登录。
尽管对操作问题的严格的、逻辑的、计算机科学的解释将要求 两个都 “如何检索我的 MySQL 用户名” 和 “密码” - 我认为对某人来说可能有用 或者 解释。换句话说 ...
1) 如何检索我的 MySQL 用户名?
或者
2)密码
后一种情况似乎已经得到充分解决,所以我不会为此烦恼。以下是单独针对“如何检索我的 MySQL 用户名”案例的解决方案。嗨。
要查找您的 mysql 用户名,请从 mysql shell 运行以下命令...
从 mysql.user 中选择用户;
它将打印所有 mysql 用户的表。
如果您碰巧设置了 ODBC,则可以从 ODBC 配置文件中获取密码。对于 Linux,该文件位于 /etc/odbc.ini 中;对于 Windows,该文件位于注册表中的 Software/ODBC 文件夹中(有多个 - 可能需要一些查找)
对于window用户,您可以按照此操作 指导 重置您的密码