最近发现使用mysql -u root -p登录MySQL的时候会遇到ERROR 1698 (28000): Access denied for user 'root'@'localhost'错误。 但是UPDATE user SET Password=PASSWORD('my_password') where USER='root';并不能解决我的问题。经过一番调查发现是我plugin的设置的问题。
首先使用sudo mysql -u root登录MySQL. 然后运行
1 | |
你可以发现plugin显示的是auth_socket,而且authentication_string是空值。这是因为我在安装MySQL的时候没有设置root. 导致了MySQL可以以root和空密码的形式登录。而当我运行UPDATE user SET Password=PASSWORD('my_password') where USER='root';的时候,由于plugin是auth_socket,所以这条命令并没有起作用。
我们可以来看看普通的user这几项的值是什么
1 | |
你可以发现这里plugin的值是mysql_native_password. 所以只需要将root的plugin设置为mysql_native_password即可解决问题。
1 | |
对于auth_socket和mysql_native_password更详细的解释,可以参考这里。