侧边栏壁纸
博主头像
孔子说JAVA博主等级

成功只是一只沦落在鸡窝里的鹰,成功永远属于自信且有毅力的人!

  • 累计撰写 352 篇文章
  • 累计创建 135 个标签
  • 累计收到 10 条评论

目 录CONTENT

文章目录

MySQL忘记root密码解决方案

孔子说JAVA
2022-09-27 / 0 评论 / 0 点赞 / 69 阅读 / 5,260 字 / 正在检测是否收录...
广告 广告

在登录数据库过程中,输入密码错误时会提示:ERROR 1045 (28000): Access denied for user ‘root’@‘localhost’ (using password: YES)。如果我们确实是忘记 MySQL 密码的情况下,可以通过 --skip-grant-tables 关闭服务器的认证,然后重置 root 的密码。也可以通过修改my.conf配置文件,在[mysqld] 节点下加入 skip-grant-tables 来跳过服务器的认证。

1、MySQL5.7忘记root密码

1.1 Windows服务器

1.1.1 方式一:使用skip-grant-tables命令

1)关闭mysql服务

通过windows服务管理界面关闭MySQL服务。

  • 也可以使用管理员权限打开命令提示符窗口,在命令行中输入: net stop mysql,也可以关闭MySQL服务。

image-1664184456460

2)关闭服务器的认证

待mysql服务停止后,在命令行中如下命令:

mysqld --shared-memory --skip-grant-tables

--skip-grant-tables 会让 MySQL 服务器跳过验证步骤(即启动MySQL服务的时候跳过权限表认证),允许所有用户以匿名的方式,无需做密码验证就可以直接登录 MySQL 服务器,并且拥有所有的操作权限。

image-1664184676803

此时命令提示符窗口处于锁定状态。

3)无密码登录MySQL

在上一步中的命令提示符窗口处于锁定状态,所以我们需要重新以管理员权限打开新的命令提示符窗口。在新的命令提示符窗口输入如下命令后回车:

mysql -uroot -p

这时候命令行窗口会提示输入密码,我们不要输入任何字符,直接按回车进入,可以看到我们在没有输入密码的情况下进入了mysql的命令行。

image-1664185184889

如果没有配置环境变量,请在 MySQL 的 bin 目录下登录操作。

4)修改MySQL密码

按以下步骤修改mysql密码:

  1. 选择mysql数据库
use mysql; 
  1. 修改root密码
update user set authentication_string=password('111111') where user='root';

注意:mysql5.7的user表中的password字段已经改成了authentication_string 字段了。

在mysql5.7之前可以用以下语句修改:

update user set password=password('111111') where user='root';
  1. 刷新权限
flush privileges;

image-1664185796644

5)使用新密码登录MySQL

在命令行中输入 exit; 命令退出mysql,然后使用新的密码登录。命令如下:

mysql -uroot -p111111

image-1664186003528

可以看到已经可以使用新的密码登录MySQL了。

6)重启MySQL服务

关闭打开的2个dos窗口,重启mysql服务,通过windows服务管理界面开启MySQL服务,以后我们就可以使用新的密码来登录MySQL了。

  • 也可以使用管理员权限打开命令提示符窗口,在命令行中输入: net start mysql,也可以启动MySQL服务。

1.1.2 方式二:修改配置文件

也可以通过修改MySQL配置文件 my.ini 来跳过权限认证,基本步骤同上。

1)关闭服务器的认证

修改参数文件跳过密码验证。打开mysql的配置文件my.ini,在 [mysqld] 配置段加上一行代码用于跳过权限限制,保存并关闭my.ini。代码如下:

skip-grant-tables

image-1664186635300

2)重启MySQL服务

通过windows服务管理界面重启MySQL服务。也可以通过如下命令重启:

service mysqld restart

3)无密码登录MySQL

以管理员权限打开命令提示符窗口。在命令提示符窗口输入如下命令后回车:

mysql -uroot -p

这时候命令行窗口会提示输入密码,我们不要输入任何字符,直接按回车进入,可以看到我们在没有输入密码的情况下进入了mysql的命令行。

4)修改MySQL密码

按以下步骤修改mysql密码:

  1. 选择mysql数据库
use mysql; 
  1. 修改root密码
update user set authentication_string=password('111111') where user='root';

在mysql5.7之前可以用以下语句修改:

update user set password=password('111111') where user='root';
  1. 刷新权限
flush privileges;

5)开启服务器的认证

修改参数文件开启密码验证。打开mysql的配置文件my.ini,将刚才在 [mysqld] 配置段中加入的 skip-grant-tables 注释或去掉,保存并关闭my.ini。

6)重启MySQL服务

重启mysql服务,通过windows服务管理界面开启MySQL服务,以后我们就可以使用新的密码来登录MySQL了。

  • 也可以使用管理员权限打开命令提示符窗口,在命令行中输入: net restart mysql,也可以启动MySQL服务。

1.2 Linux服务器

1)关闭服务器的认证

打开mysql5.7的配置文件my.cnf,并在里面增加一行:skip-grant-tables,保存并退出(:wq)

image-1664187338409

2)重启MySQL服务

service mysqld restart

3)无密码登录MySQL

mysql -uroot -p

这时候命令行窗口会提示输入密码,我们不要输入任何字符,直接按回车进入,可以看到我们在没有输入密码的情况下进入了mysql的命令行。

4)修改MySQL密码

按以下步骤修改mysql密码:

  1. 选择mysql数据库
use mysql; 
  1. 修改root密码
update user set authentication_string=password('111111') where user='root';

注意:mysql5.7的user表中的password字段已经改成了authentication_string 字段了。

在mysql5.7之前可以用以下语句修改:

update user set password=password('111111') where user='root';
  1. 刷新权限
flush privileges;

5)开启服务器的认证

打开mysql5.7的配置文件my.cnf,把刚增加的这行:skip-grant-tables 删除掉,保存并退出(:wq)。

6)重启MySQL服务

重新启动mysql服务,即可用修改好的密码登录了。

service mysqld restart

2、MySQL8.0忘记root密码

2.1 Windows服务器

1)关闭mysql服务

通过windows服务管理界面关闭MySQL服务。

  • 也可以使用管理员权限打开命令提示符窗口,在命令行中输入: net stop mysql,也可以关闭MySQL服务。

2)关闭服务器的认证

跳过授权表,可以进行免密登录。待mysql服务停止后,在命令行中如下命令:

mysqld --console --skip-grant-tables --shared-memory

--skip-grant-tables 会让 MySQL 服务器跳过验证步骤(即启动MySQL服务的时候跳过权限表认证),允许所有用户以匿名的方式,无需做密码验证就可以直接登录 MySQL 服务器,并且拥有所有的操作权限。

image-1664188276041

注:也可以在配置文件my.ini中加入skip-grant-tables跳过验证,具体操作见上面5.7版本。

3)无密码登录MySQL

在上一步中的命令提示符窗口处于锁定状态,所以我们需要重新以管理员权限打开新的命令提示符窗口。在新的命令提示符窗口输入如下命令后回车:

mysql -uroot -p

这时候命令行窗口会提示输入密码,我们不要输入任何字符,直接按回车进入,可以看到我们在没有输入密码的情况下进入了mysql的命令行。

4)修改MySQL密码

按以下步骤修改mysql密码:

  1. 选择mysql数据库
use mysql; 
  1. 修改root密码

因为8.0版本不允许在跳过策略 skip-grant-tables 时修改密码,所以需要先修改root的密码为空(即清除密码)。特别注意: authentication_string='' 的等号后面是一对单引号。修改命令为:

UPDATE user SET authentication_string='' WHERE user='root';

注意:mysql5.7之后(包括mysql8)的user表中的password字段已经改成了authentication_string 字段了。

修改之后使用如下命令可以查询到root用户的密码已经为空:

select host,user,authentication_string from mysql.user;

5)开启服务器的认证

关闭打开的2个dos窗口,重启mysql服务,通过windows服务管理界面开启MySQL服务或net命令 net start mysql 启动服务。接下来我们就可以使用空密码登录了。

注:如果第2步是在配置文件my.ini中加入skip-grant-tables跳过验证的方式,则将之前加入的 skip-grant-tables 注释或去掉,保存并关闭my.ini。

6)修改MySQL密码

我们首先使用空密码登录MySQL。

mysql -uroot -p

这时候命令行窗口会提示输入密码,我们不要输入任何字符,直接按回车进入,可以看到我们在没有输入密码的情况下进入了mysql的命令行。使用如下命令修改mysql的密码,其中 111111 为新设置的密码:

ALTER user 'root' IDENTIFIED BY '111111';

以后我们就可以使用新的密码登录了。

命令参考:

ALTER USER 'root'@'localhost' IDENTIFIED BY 'abcd1234!';
ALTER USER 'root'@'%' IDENTIFIED BY 'abcd1234!';

2.2 Linux服务器

1)关闭mysql服务

关闭MySQL服务命令如下:

service mysqld stop

2)关闭服务器的认证

跳过授权表,可以进行免密登录。找到mysql配置文件my.cnf,一般在/etc/my.cnf,有些版本在/etc/mysql/my.cnf

vi /etc/my.cnf

在【mysqld】模块添加:skip-grant-tables 保存退出;

image-1664189598849

3)重启mysql服务

service mysqld start

4)无密码登录MySQL

mysql -uroot

5)修改MySQL密码

按以下步骤修改mysql密码:

  1. 选择mysql数据库
use mysql; 
  1. 修改root密码

因为8.0版本不允许在跳过策略 skip-grant-tables 时修改密码,所以需要先修改root的密码为空(即清除密码)。特别注意: authentication_string='' 的等号后面是一对单引号。修改命令为:

UPDATE user SET authentication_string='' WHERE user='root';

注意:mysql5.7之后(包括mysql8)的user表中的password字段已经改成了authentication_string 字段了。

修改之后使用如下命令可以查询到root用户的密码已经为空:

select host,user,authentication_string from mysql.user;

6)开启服务器的认证

删掉步骤2在my.cnf中加入的语句 skip-grant-tables,重启服务。

service mysqld restart

7)修改MySQL密码

我们首先使用空密码登录MySQL。

mysql -uroot -p

这时候命令行窗口会提示输入密码,我们不要输入任何字符,直接按回车进入,可以看到我们在没有输入密码的情况下进入了mysql的命令行。使用如下命令修改mysql的密码,其中 111111 为新设置的密码:

ALTER user 'root' IDENTIFIED BY '111111';

以后我们就可以使用新的密码登录了。

命令参考:

ALTER USER 'root'@'localhost' IDENTIFIED BY 'abcd1234!';
ALTER USER 'root'@'%' IDENTIFIED BY 'abcd1234!';
0

评论区