我忘记了我的 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的建议,只需创建一个新的密码。
您还可以使用来自手册的以下程序来重置 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
可以在服务管理器中找到适当的 --defaults-file 设置:
开始菜单 -> 控制面板 -> 管理工具 -> 服务
在列表中找到 MySQL 服务,右键单击它,选择“属性”选项。可执行文件路径字段包含 --defaults-file 设置。
现在,您应该能够使用新密码作为 root 连接到 MySQL。
mysqld-nt
而不是mysqld
? - Pacerier对这里最有用的答案进行了改进:
1] 无需重新启动mysql服务器
2] MySQL服务器连接到网络时存在安全问题
无需重新启动MySQL服务器。
更新mysql.user语句以更改密码后,使用FLUSH PRIVILEGES;
。
FLUSH语句告诉服务器将授权表重新加载到内存中,以便它注意到密码更改。
--skip-grant-options
使任何人都可以连接而无需密码且具有所有权限。由于这是不安全的,您可能需要
将--skip-grant-tables与--skip-networking一起使用,以防止远程客户端连接。
mysql.user
的特权?然而,通常情况下并非如此。 - Pacerier在终端中运行以下命令连接到DBMS(需要root访问权限):
sudo mysql -u root -p;
mousavi
,密码必须是 123456
):UPDATE mysql.user SET authentication_string=PASSWORD('123456') WHERE user='mousavi';
在此时,您需要执行刷新操作以应用更改:
FLUSH PRIVILEGES;
完成了!您没有停止或重新启动mysql服务就完成了它。
虽然在没有暴力破解的情况下,无法直接恢复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;
}
从Windows cmd使用现有用户登录MySql:
mysql -u 用户名 -p
输入密码:****
然后运行以下命令:
mysql> SELECT * FROM mysql.user;
接下来,复制相应用户的加密MD5密码,网络上有几个在线密码解密应用程序。使用此解密密码,并在下次登录时使用它进行登录。 或使用以下命令更新用户密码:
mysql> UPDATE mysql.user SET Password=PASSWORD('[password]') WHERE User='[username]';
然后使用新密码和用户名登录。
sudo service mysql stop
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/
如果您需要恢复MySQL根密码,请按照上述说明进行。该指南提供了详细的步骤,并且非常易于遵循。
在MySQL 5.7.6和MariaDB 10.1.20之后(截至2022年),您可以:
更新具有root用户访问权限的mysql用户密码
ALTER USER 'some_user_name'@'localhost' IDENTIFIED BY 'a_super_secure_password';
更新Mysql的root用户
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password by 'mynewpassword';
select user from mysql.user;
保存文件。在本例中,文件将被命名为C:\mysql-init.txt。 保存文件时需要管理员权限。
mysql.user
表中没有名为password
的列,请使用authentication_string
代替。 - Adib Aroui