一、停止运行MySQL服务
方法1.在cmd命令行中输入: net stop mysql ; 这样就可以将MySQL服务停止。
方法2.在任务管理器里搜索“service”,进入找到 MySQL服务,停止服务即可。
方法3.win+r快捷键,输入services.msc回车,进入服务列表,找到Mysql服务。
二、以管理员身份打开cmd,并切换至MySQL的安装目录下的bin目录;开启跳过密码验证登录的MySQL服务:
1.输入:mysqld --console --skip-grant-tables --shared-memory
直接回车即可;
三、再新开一个cmd(同样以管理员身份打开),并切换至MySQL的安装目录下的bin目录;开始免密登录,切换至mysql库,然后查看用户信息,再将root用户密码设置为空:
1.输入:mysql -u root -p
回车后会让我们输入密码,因为第二步是开启跳过密码验证的MySQL服务;所以不用输密码,直接回车就行;
2.切换至mysql库:use mysql;
3.查看用户信息:select host, user, authentication_string, plugin from mysql.user;
4.将root用户密码设置为空:update user set authentication_string=’’ where user=‘root’;
5.上一小步已经将root用户的密码(即authentication_string)设置为空;这时,可以再查看哈用户信息:select host, user, authentication_string, plugin from mysql.user;
就可以看到root所对应的authentication_string为空了。
6.更新设置完密码为空后,刷新权限。输入:flush privileges;
四、 保留以-console --skip-grant-tables --shared-memory 启动的MySQL服务的窗口!关闭那个修改账号为空的窗口;在重新开一个cmd窗口,进入到bin目录(以-console --skip-grant-tables --shared-memory启动的方式无法通过alter修改密码,但是密码置空后,新开窗口却可以,待研究)
1.输入:mysql -u root -p
回车后会让我们输入密码,因为第二步是开启跳过密码验证的MySQL服务;所以不用输密码,直接回车就行;
有些博主,此时已经可以正常登录,若能登录,执行下面的步骤:进入mysql库修改密码即可
但是我本地验证发现报错
猜测原因:
mysql的密码验证或者由于我的root账号的host为%
2.此时,打开navicat,将连接的密码设置为空,连接数据,连接成功。
进入到mysql库,新建查询
3.修改密码:
alter user ‘root’@’%’ IDENTIFIED BY ‘123456’;
修改成功
关于为什么不在置空的时候就直接设置新密码:
由下上图可以发现,user表中的密码authentication_string是密文,如果直接通过
update user set authentication_string=’’ where user=‘root’;来设置,密码为明文,实际登录无法匹配
五、关闭以-console --skip-grant-tables --shared-memory 启动的MySQL服务的窗口以及其他cmd窗口;在服务列表重新启动mysql,或者新建一个cmd,通过net start mysql来重启服务
一般情况来说,使用新密码直接登录即可正常使用
但是我本地却发现通过navicat无法登录报错
通过cmd却可以登录
根据报错提示信息可知:
require_secure_transport = OFF 模式
此为默认设置,该模式下用户可以不通过ssl加密连接到数据库
require_secure_transport = ON 模式下
强制要求配置ssl
修改该配置即可,使用navicat连接正常