PHP Laravel NGINX html css Bootstrap Python Symfony Apache Windows linux jquery Django ASP vanilla Slim vagrant docker Homestead MySQL Redis Git SVN ssh Root vim PhpStorm Pycharm sass less PHP Laravel android html css Vue Angular React NGINX html css Javascript

MySQL无法使用密码登录root用户的解决办法

原创

原创不易 ~ 转载请注明出处哦

最近换了一台服务器,在使用MySQL的时候,发现无法使用Adminerroot用户登录了。ssh到服务器上,发现普通用户身份无法使用sudo mysql -u root -p的命令以root用户登录MySQL。然而直接sudo mysql -u root却可以登录上。

这个问题的解决办法来源于askubuntu

https://askubuntu.com/a/801950/902835

If you install 5.7 and don't provide a password to the root user, it will use the auth_socket plugin.
That plugin doesn't care and doesn’t need a password. It just checks if the user is connecting using a UNIX socket and then compares the username.

即如果你安装MySQL版本5.7的时候未给root用户提供密码,MySQL将会使用auth_socket插件。这个插件并不关心root用户是否有密码,并且也不需要你提供密码。它仅仅检查用户是否使用了UNIX socket进行连接,如果是的话,只要用户名符合,那么就可以自动验证成功。

这种方式也是PostgreSQL的默认验证方式。那么如果我们需要切换回使用密码进行登录,我们可以先登录MySQL

$ sudo mysql -u root

接下来在MySQL的命令界面输入以下命令:

mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'my_new_password';

注意请使用你的密码替换其中的my_new_password字符串。

然后我们FLUSH一下权限:

mysql> FLUSH PRIVILEGES;

当然如果你不想提供一个密码(留空)的话,也可以使用以下命令:

mysql> UPDATE mysql.user SET PLUGIN = 'mysql_native_password' WHERE User = 'root';
mysql> FLUSH PRIVILEGES;

完成后,我们就可以使用密码以root用户登录MySQL了。


正在加载验证码......
请先完成验证