Mysql 8.0.39 忘记 Root 密码

Mysql 8.0.39 忘记 Root 密码

zhenxi
2024-04-18 / 0 评论 / 1 阅读 / 正在检测是否收录...

如果您在 Linux 上忘记了 MySQL 8.0+ 的 root 用户密码,可以通过以下步骤来重置密码:

1. 停止 MySQL 服务

首先,需要停止 MySQL 服务。可以使用以下命令:

sudo systemctl stop mysql

2. 启动 MySQL 服务并跳过权限表

接下来,您需要以无权限表模式(即跳过授权)启动 MySQL,这样可以让您登录到 MySQL 服务器而不需要密码:

sudo mysqld_safe --skip-grant-tables &

此步出现问题:缺少相应文件

image-20240918232128481

解决办法:

cd /var/run
sudo mkdir mysqld
sudo chown mysql:mysql /var/run/mysqld

这里,mkdir 命令会创建所需的目录结构,即使其中一些目录已经存在也不会报错。chown mysql:mysql 命令将该目录的所有权更改为 MySQL 用户和组,这是运行 MySQL 服务的用户。

重新使用以下命令:

sudo mysqld_safe --skip-grant-tables &

未报错情况:

image-20240918232506320

3. 登录到 MySQL

在跳过权限表的模式下,您可以不用密码直接以 root 用户登录 MySQL:

mysql -u root

4. 选择 MySQL 数据库

进入 MySQL 之后,选择 mysql 数据库:

USE mysql;

5. 更新 root 密码

网上解决办法:错误,请看下面

对于 MySQL 8.0+,密码加密机制更新为了使用 caching_sha2_passwordmysql_native_password。您可以使用以下 SQL 命令更新密码:

ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'new_password';

或者,如果您的系统更适合使用 mysql_native_password

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new_password';

'new_password' 替换为您想设定的新密码。

此处再次出现问题:

image-20240918232554470

在 MySQL 8.0+ 中,当服务器以 --skip-grant-tables 模式运行时,有些 SQL 语句,包括 ALTER USER,不能被执行。这是为了安全考虑,以防在这种模式下执行可能会改变权限设置的命令。

为了绕过这个问题并重置 root 密码,您需要使用一个不同的方法来修改密码,这涉及到直接修改 user 表。请按照以下步骤操作:

由于直接使用 ALTER USER 命令不可行,我们需要通过修改 user 表来更新密码。对于 MySQL 8.0+,您可以尝试以下命令:

UPDATE user SET authentication_string = SHA2('new_password', 256) WHERE user = 'root';

这里,SHA2('new_password', 256) 会使用 SHA-256 算法加密您的新密码。确保将 'new_password' 替换为您希望设定的新密码。

6. 刷新权限并退出

更新密码后,您需要刷新权限表并退出 MySQL:

FLUSH PRIVILEGES;
EXIT;

7. 停止并重新启动 MySQL 服务

现在,您可以停止无权限表模式的 MySQL 服务,并以正常模式重新启动它:

sudo systemctl stop mysql
sudo systemctl start mysql

8. 使用新密码登录

现在,您应该能够使用新设置的密码登录到 MySQL 服务器:

mysql -u root -p

输入您在步骤 5 中设置的新密码。

通过这些步骤,您应该能够成功重置并使用新的 root 密码登录 MySQL。如果在过程中遇到任何问题,请检查您的命令是否正确,或查看相关的系统和 MySQL 日志获取更多信息。

0

评论

博主关闭了所有页面的评论