文章内容

2021/9/4 16:01:44,作 者: 黄兵

MySQL Error: : 'Access denied for user 'root'@'localhost'

在上篇文章(Mysql 同一个数据库服务器转移数据),迁移数据库的时候出现如下错误:

MySQL Error: : 'Access denied for user 'root'@'localhost'


出现错误的原因:

在运行 MySQL 5.7(及更高版本)的 Ubuntu 系统中,root MySQL 用户默认设置为使用 auth_socket 插件而不是密码进行身份验证。

在许多情况下,这允许更高的安全性和可用性,但是当您需要允许外部程序(例如,phpMyAdmin)访问用户时,它也会使事情复杂化。

为了使用密码以 root 身份连接到 MySQL,您需要将其身份验证方法从 auth_socket 切换到 mysql_native_password。为此,请从终端打开 MySQL 提示符:

sudo mysql

接下来,使用以下命令检查每个 MySQL 用户帐户使用的身份验证方法:

SELECT user,authentication_string,plugin,host FROM mysql.user;

输出

+------------------+-------------------------------------------+-----------------------+-----------+
| user             | authentication_string                     | plugin                | host      |
+------------------+-------------------------------------------+-----------------------+-----------+
| root             |                                           | auth_socket           | localhost |
| mysql.session    | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys        | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
4 rows in set (0.00 sec)


解决方案:

在此示例中,您可以看到 root 用户实际上使用 auth_socket 插件进行了身份验证。要将 root 帐户配置为使用密码进行身份验证,请运行以下 ALTER USER 命令。请务必将密码更改为您选择的强密码,并注意此命令将更改您在步骤 2 中设置的 root 密码:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

然后,运行 FLUSH PRIVILEGES 告诉服务器重新加载授权表并使您的新更改生效:

FLUSH PRIVILEGES;

再次检查每个用户使用的身份验证方法,以确认 root 不再使用 auth_socket 插件进行身份验证:

SELECT user,authentication_string,plugin,host FROM mysql.user;

输出

+------------------+-------------------------------------------+-----------------------+-----------+
| user             | authentication_string                     | plugin                | host      |
+------------------+-------------------------------------------+-----------------------+-----------+
| root             | *3636DACC8616D997782ADD0839F92C1571D6D78F | mysql_native_password | localhost |
| mysql.session    | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys        | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
4 rows in set (0.00 sec)

您可以在此示例输出中看到 root MySQL 用户现在使用密码进行身份验证。在您自己的服务器上确认后,您可以退出 MySQL shell:

exit


参考资料:

1、MySQL Error: : 'Access denied for user 'root'@'localhost'

分享到:

发表评论

评论列表