文章总结: 本文详细讲解MySQL5.7和8.0版本忘记root密码时的重置方法,核心思路是通过修改配置跳过权限验证或使用init-file参数执行SQL命令。关键步骤包括配置skip-grant-tables、重启服务、执行密码更新SQL、恢复配置及调整密码策略,并针对MySQL8.0特性推荐了更可靠的–init-file解决方案。 综合评分: 78 文章分类: 安全工具,应用安全,解决方案,数据库安全,运维安全
MySQL忘记root密码或者root密码错误
原创
guowei guowei
网络安全直通车
2026年4月10日 15:16 北京
说明:有的同学安装了MySQL之后用root密码登录不上(先检查一下复制的密码对不对,有没有多了空格冒号之类的)。
如果提示access denied for user root,就是密码错误。这个时候需要修改root密码,为了方便输入,可以修改成一个比较简单的密码。
适用版本:MySQL 5.7。
8.0看这个:https://www.jb51.net/article/145464.htm
1、配置跳过权限验证
没有密码无法登录,先配置跳过权限验证,不校验登录密码。
Windows环境下MySQL Server的配置文件为my.ini,一般在 MySQL 的安装目录下。
例如:C:\ProgramData\MySQL\MySQL Server 5.7
(Linux的配置文件是/etc/my.cnf,同样适用)
在配置文件中加一行skip-grant-tables
[mysqld]
skip-grant-tables
2、重启数据库服务
在服务中重启:
3、修改密码
使用mysql命令登录,使用以下密码修改密码。
命令行连接到服务端(也可以用Navicat,空密码登陆):
mysql -uroot;
use mysql;
执行以下SQL:
update user set authentication_string=password('123456') where Host='localhost' and User='root';
4、还原配置
密码修改成功了,后面还是需要用密码登录。
修改以后,在配置文件my.ini中去掉skip-grant-tables,重启数据库服务。
再使用 mysql -uroot -p123456 登录。
5、修改密码安全限制
否则不能使用简单密码。
永久修改:
MySQL默认的配置文件:my.ini
(Linux的配置文件是/etc/my.cnf,同样适用)
validate_password_policy=0
validate_password_length=1
6、授权远程访问
连接到数据库以后
grant all privileges on *.* to 'root'@'%' identified by '123456';
flush privileges;
实测mysqld –skip-grant-tables这样的命令行,在mysql8中无法成功启动,而且测试了该参数放在ini文件里面也同样无法启动
MySQL的密码是存放在user表里面的,修改密码其实就是修改表中记录。
重置的思路是是想办法不用密码进入系统,然后用数据库命令修改表user中的密码记录。
查了下,MySQL5系统在网上建议的方法是以–skip-grant-tables参数启动mysql服务,该参数指示在启动时不加载授权表,因此启动成功后root用户可以空密码登陆
mysqld –skip-grant-tables
登陆之后可以用
UPDATE user SET authentication_string=” WHERE user=’root’;
这类命令设置密码或者将密码置空。
但是,实测mysqld –skip-grant-tables这样的命令行,在mysql8中无法成功启动,而且测试了该参数放在ini文件里面也同样无法启动
MySQL8系统密码重置的两个思路
两条思路,或者用–init-file参数在服务启动时加载并运行修改密码的命令文件,该命令一旦执行,服务启动后密码即已经清除或者重置,启动服务后即可以空密码或指定密码登入。
或者继续研究–skip-grant-tables命令行参数下服务不能启动的原因,解决问题,然后启动服务后以空密码登入,手工输入命令,执行清除或者重置mysql.user表中的密码记录字段。
推荐使用前者。
具体操作流程如下:
方法一:利用–init-file参数解决
该参数指定服务启动时先执行一个包含sql命令文件,因此,只需要将重置密码的命令写在该文件中,以此参数指定启动时执行该命令,启动完成即可重置系统密码了。
第一步,关掉系统服务
net stop mysql
第二步,创建一个文本文件,内含一条密码修改命令
ALTER USER ‘root’@’localhost’ IDENTIFIED BY ”;
第三步:命令行方式启动服务器,指定启动时执行上述的密码修改命令文件
mysqld –init-file=d:mysqlc.txt –console
具体操作截图
方法二,想办法让–skip-grant-tables参数用起来
同方法一,先关掉系统服务
实测,在mysql8系统下,用mysqld –console –skip-grant-tables –shared-memory可以无密码启动服务
服务启动后,以空密码登入系统
mysql.exe -u root
然后执行sql命令将root用户密码设置为空
UPDATE mysql.user SET authentication_string=” WHERE user=’root’ and host=’localhost’;
具体操作截图
MySQL8的一些特性导致老方法重置不大管用了,建议使用–init-file参数解决,实测安全可靠。
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:网络安全直通车 guowei guowei《MySQL忘记root密码或者root密码错误》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。









评论