网站搜索

MySQL 访问被拒绝,用户 'root'@'localhost'


使用本指南,您将发现三种解决此错误的方法。

这个错误是什么意思?

理解这个错误的最好方法是将其分解为单个组成部分。该错误发生在你尝试在本地计算机上登录到你的MySQL实例时,因此称为“localhost”。

示例如下:

mysql -u root -p

错误的组成部分如下:

  1. 错误 1045 (28000) - 分别指的是错误代码和 SQLSTATE。例如,在 MySQL 和 MariaDB 中,错误代码 1045 意味着对于该用户名和指定密码的访问被拒绝。
  2. 第二个是消息字符串。错误消息的格式为:用户 '‘%s’'@'%'s’' 访问被拒绝(使用密码:%s)。

注意:错误信息中的第一个 %s 指的是用户名,而第二个 %s 指的是主机。

解决方案 1:Sudo 进入 MySQL

解决此错误的第一种也是最常见的方法是以sudo身份进入您的MySQL实例并将auth_plugin设置为mysql_native_password。

打开你的终端并运行:

sudo mysql

输入账户的密码并继续。

接下来,修改auth_plugin并为root账户设置一个新密码,如下所示:

ALTER USER 'root@localhost' IDENTIFIED WITH mysql-native_password BY 'password';

更改身份验证插件将允许您登录到服务器。

接下来,刷新权限以更新权限表:

FLUSH PRIVILEGES;

最后,退出终端并尝试登录:

mysql -u root -p

解决方案2 - 手动编辑配置文件

如果错误仍然存在,您可能需要编辑MySQL配置文件。在大多数情况下,它位于/etc或/etc/mysql目录下,文件名为my.cnf。

在Windows和Mac用户的MySQL安装文件夹中找到此文件。

如果文件不存在,创建它。

用文本编辑器打开文件,并找到 mysqld 块。

nano /etc/mysql/my.cnf

在[mysqld]区块下,添加以下条目。

skip-grant-tables

关闭并保存文件。

接下来,重新启动MySQL服务器并登录。

sudo service mysql restart

mysql -u root -p

登录后,刷新权限并设置新密码:

FLUSH PRIVILEGES;

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

请确保将上面的命令替换为一个安全的密码。

完成后,编辑 my.cnf 文件并删除我们之前添加的条目。

重启 MySQL 服务器并用新密码登录。

解决方案 3 – 以安全模式启动 MySQL

MySQL为您提供了mysqld_safe工具,用于启动MySQL服务器。该工具允许我们在启动和重启服务器时指定安全功能,以用于诊断错误。

首先停止MySQL服务器。

sudo service mysql stop

接下来,以无身份验证的方式启动 MySQL;

mysqld_safe --skip-grant-tables &

该命令将在后台作为一个任务启动服务器。

一旦守护进程在运行(禁用身份验证),打开一个新终端并运行:

mysql -u root -p

上述命令应该允许您无需密码登录。

登录后,刷新权限并设置新密码为:

FLUSH PRIVILEGES;

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

关闭会话并重启MySQL。

现在用你的新密码登录到服务器。

结束

在本文中,我们讨论了解决这一问题的三种主要方法。

"mysql access denied for user 'root@localhost'" error.

我们希望这个教程能帮助您解决这个错误。