mysql忘记root密码的完美解决办法

时间:2022-07-23 15:59:48

之前在用mac本的时候新装的mysql无法直接进入,总是提示access denied for user root @localhost这个错误,原来是因为没有给root登录权限。用不用密码都有错误,下面就来说说解决办法。

因为我用的是mac系统,所以跟Linux稍微有点差别,不过不大。首先必须要将mysql服务停掉,进入到mysql的bin目录下,执行sudo ./mysqld_safe --skip-grant-tables; (注意:要用sudo,并且命令前要加./)这个命令也是启动mysql的命令,但是安全模式,客户端连接的时候是不需要密码的。注意:如果在使用这个命令之前,mysql是启动的状态,则客户端使用mysql命令连接的时候会报Can't connect to local MySQL server through socket'/tmp/mysql.sock' 异常。这个时候你就把mysql服务停掉,用mysqld_safe启动就行了。启动之后,用./mysql -uroot就可以直接进入到mysql命令行。不需要输入密码。进去之后,输入以下命令grant all privileges on *.* to 'root'@'localhost' identified by 'root' with grant option;给root权限。注意:identified by 后面跟着的是mysql root的密码,也就是说这个密码一定要与mysql root的登录密码一致,否则还是登录不上去。但是这个时候会报错:The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement,意思是说在安全模式下不能修改权限,这个时候需要执行以下语句:set global read_only=0; flush privileges;这样再执行grant命令就可以了。之后就是修改root的密码:

UPDATE user SET authentication_string=PASSWORD('newpassword') where USER='root';
这里要注意,密码的字段不是password,我用的是5.7的版本,应该是authentication_string,(这个字段名根据具体版本而定)PASSWORD是一个加密函数,括号里面是密码就行了,而且里面的密码要与上面的grant语句中的identified by后面的密码一样,否则root依然无法登录。这样就OK了。最后执行一下flush privileges。之后重启一下mysql,这个时候启动就正常启动就可以了,再通过密码登录mysql,成功!