最近发现使用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
更详细的解释,可以参考这里。