关于Mysql8版本忘记root密码的解决办法
预备
Server version: 8.0.28
关闭MySQL服务
设置好MySQL的环境变量
mysql以跳过密码验证的方式启动
以管理员身份打开PowerShell,使用命令mysqld --console --skip-grant-tables --shared-memory这是将MySQL设置为“跳过密码验证”的方式开启服务。
将root密码置空
不要关闭先前打开的PowerShell,以管理员身份打开新的PowerShell,使用命令mysql -uroot -p登录mysql,由于现在的mysql是以跳过密码验证的方式启动的,所以提示输入密码时直接回车是可以进入mysql的。
接下来,依次输入命令:
- use mysql;
- update user set authentication_string=’’ where user=’root’; // 置空root用户的校验字符串(也就是将root密码置空。)
若不放心这部操作是否成功,可以接着使用下面的第3步。- select user, authentication_string from mysql.user; //这步不是必须的,只是为了验证查看root用户的校验字符串是否被置空。
验证成功的效果如下:(root后的authentication_string字段为空即可)
- flush privileges;//用于刷新权限,以保证刚刚的操作生效。
设置root密码(再此之前root密码已经被置空,若不想设置root密码可以跳过)
关闭之前操作所打开两个的PowerShell,以管理员的身份打开新的PowerShell,依次输入命令:
- net start mysql //启动mysql,注意mysql指的是mysql的服务名
- msyql -uroot -p//登录mysql,由于之前的操作已经将root密码置空,所以提示输入密码的时候直接回车就可以登录
- use mysql;
- alter user ‘root’@‘localhost’ identified by ‘新密码’;// 给root用户的密码传值,
- select user, authentication_string from mysql.user; // 这步不是必须,只是为了验证root用户的校验字符串插入是否成功传到。这一步成功的效果图在下方。
- flush privileges; // 刷新以使之前的操作生效
- exit // 退出MySQL
- net stop mysql //关闭MySQL服务
第5步成功的效果图:(只要看到root后的authentication_string字段有值的就好)
至此,MySQL8版本的root密码已经设置好。
另外:mysql8.0以及以上版本中,一下两种设置密码的方式:
update mysql.user set password=‘newpassword’ where user=‘root’;
update mysql.user set password=PASSWORD(‘newpassword’) where User=‘root’;
已经不再被支持使用了。