在使用MySQL时,我们难免会遇到忘记root的密码的烦恼(或者初次登录MySQL无法成功认证),那么究竟该如何解决这个问题呢?下面我会给您答案。
NOTE:本博客的方法仅在windows下测试过,其他系统平台并未进行测试。
关闭MySQL服务器
首先我们需要先关闭MySQL服务器,如果你未启动该服务可以跳过这一步。关闭MySQL服务器有好几种方法,最简单粗暴的方法就是启动任务管理器结束该服务,当然你也可以优雅地关闭该服务——使用CMD命令行:
net stop mysql
进入安全模式
打开CMD命令行,输入下列命令:
mysqld -nt --skip-grant-tables
即可进入安全模式,即不用密码认证即可登录MySQL。
下面就可以使用root用户进行登录了:
mysql -uroot -p
当提示要输入密码时,按回车键即可。
修改root密码
登录成功后,我们就可以修改密码了,打开CMD输入以下命令:
mysql> update mysql.user set password=PASSWORD('your password') where User='root';
NOTE:不要忘记命令后的分号;
your password
即为你要修改的密码。
对于有些高版本的MySQL,运行上述命令可能会产生下面的错误:
ERROR 1054 (42S22):unknown column 'password' in 'field list'
因为由于某些比较古怪的原因,password
被修改为authentication_string
。所以如果你遇到这个错误那么请改用下面的命令:
mysql> update mysql.user set authentication_string=password('your password') where user='root' and Host ='localhost';
命令运行成功后,就需要刷新权限表,然后退出即可:
mysql> flush privileges;
mysql> quit
现在你就可以使用修改后的密码进行登录了,enjoy!
意外收获
在我成功修改完密码之后,我尝试使用navicat连接MySQL,但是却出现错误提示"root口令已过期",这让我很是疑惑,于是我只好按照刚才的步骤重新修改密码。但是却又出现了错误:
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
这时你可以使用下面的命令更新root密码:
mysql> SET PASSWORD = PASSWORD('your_new_password');