it-swarm.cn

MySQL错误::'访问被拒绝用户'root'@'localhost'

$ ./mysqladmin -u root -p ' redacted '
输入密码:

mysqladmin:在'localhost'连接到服务器失败错误:
'拒绝用户'root'@'localhost'(使用密码:YES)'

我怎样才能解决这个问题?

134
Harsh Trivedi
  1. 打开并编辑/etc/my.cnf/etc/mysql/my.cnf,具体取决于您的发行版。
  2. skip-grant-tables下添加[mysqld]
  3. 重启Mysql
  4. 您现在可以使用以下命令mysql -u root -p登录mysql
  5. 运行mysql> flush privileges;
  6. 通过ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPassword';设置新密码
  7. 返回/etc/my.cnf和 删除/评论 skip-grant-tables
  8. 重启Mysql
  9. 现在您可以使用新密码mysql -u root -p登录
206
Kishore Venkataramanan

我发现的所有解决方案都比必要的复杂得多,而且没有一个对我有用。这是解决我的问题的解决方案。无需重启mysqld或以特殊权限启动它。

Sudo mysql

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

使用单个查询,我们正在更改 auth_plugin to mysql_native_password 并将root密码设置为 root (随意在查询中更改它)

现在您应该可以使用root登录。更多信息可以在 mysql文档中找到

(退出mysql控制台用 Ctrl + D 或输入 exit

339
user1878906

我尝试了很多步骤来纠正这个问题。对于这个问题有很多可能解决方案的来源很难从废话中过滤出来。我终于找到了一个很好的解决方案 这里

步骤1:识别数据库版本

$ mysql --version

你会看到MySQL的这样一些输出:

$ mysql  Ver 14.14 Distrib 5.7.16, for Linux (x86_64) using  EditLine wrapper

或者为MariaDB输出如下: /

mysql  Ver 15.1 Distrib 5.5.52-MariaDB, for Linux (x86_64) using readline 5.1

记下您正在运行的数据库和版本,稍后您将使用它们。接下来,您需要停止数据库,以便手动访问它。

第2步:停止数据库服务器

要更改root密码,必须事先关闭数据库服务器。

您可以使用以下方法为MySQL执行此操作:

$ Sudo systemctl stop mysql

对于MariaDB:

$ Sudo systemctl stop mariadb

步骤3:在没有权限检查的情况下重新启动数据库服务器

如果在不加载有关用户权限的信息的情况下运行MySQL和MariaDB,则可以使用root权限访问数据库命令行而无需提供密码。这将允许您在不知情的情况下访问数据库。

为此,您需要停止数据库加载存储用户权限信息的授权表。因为这有一点安全风险,所以您也应该跳过网络以防止其他客户端连接。

启动数据库而不加载授权表或启用网络:

$ Sudo mysqld_safe --skip-grant-tables --skip-networking &

此命令末尾的&符号将使此进程在后台运行,以便您可以继续使用终端。

现在您可以以root用户身份连接到数据库,root用户不应该要求输入密码。

$ mysql -u root

您将立即看到数据库Shell Prompt。

MySQL提示

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

MariaDB提示

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>

现在您具有root访问权限,您可以更改root密码。

第4步:更改Root密码

mysql> FLUSH PRIVILEGES;

现在我们可以实际更改root密码。

对于 MySQL 5.7.6和更新 以及 MariaDB 10.1.20和更新 ,使用以下命令:

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';

对于 MySQL 5.7.5及更早版本 以及 MariaDB 10.1.20及更早版本 ,使用:

mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('new_password');

确保使用您选择的新密码替换new_password

注意: 如果ALTER USER命令不起作用,它通常表示更大的问题。但是,您可以尝试UPDATE ... SET来重置root密码。

[重要]这是解决我的特定问题的特定行:

mysql> UPDATE mysql.user SET authentication_string = PASSWORD('new_password') WHERE User = 'root' AND Host = 'localhost';

请记住在此之后重新加载授权表。

在任何一种情况下,您都应该看到命令已成功执行的确认。

Query OK, 0 rows affected (0.00 sec)

密码已更改,因此您现在可以停止数据库服务器的手动实例并按原样重新启动它。

步骤5:正常重启数据库服务器

本教程进入了一些重新启动数据库的步骤,但我使用的唯一部分是:

对于MySQL,使用: $ Sudo systemctl start mysql

对于MariaDB,使用:

$ Sudo systemctl start mariadb

现在,您可以通过运行以下命令确认已正确应用新密码:

$ mysql -u root -p

该命令现在应该提示新分配的密码。输入它,您应该按预期访问数据库提示。

结论

您现在可以恢复对MySQL或MariaDB服务器的管理访问权限。确保您选择的新root密码强大且安全,并将其保存在安全的地方。

29
Blairg23

对于Ubuntu/Debian用户

运行以下命令以root身份连接(没有任何密码)

Sudo /usr/bin/mysql --defaults-file=/etc/mysql/debian.cnf
20
Fab

对于新的Linux用户来说,这可能是一项艰巨的任务。让我用mysql 8更新这个(现在最新版本是8.0.12,截至2018年9月12日)

  1. 在“/etc/mysql/mysql.conf.d/”打开“mysqld.cnf”配置文件。
  2. 添加-skip-grant-tables 到[mysql]文本的下一行并保存。
  3. 重启mysql服务为“Sudo service mysql restart”。现在你的mysql没有任何身份验证。
  4. 连接到mysql客户端(也称为mysql-Shell)为 mysql -u root -p 。截至目前,没有密码可以输入。
  5. 运行sql命令 flush特权;
  6. 现在将密码重置为 ALTER USER'root'@'localhost'ENFENTIFIED BY'MyNewPassword';
  7. 现在让我们回到正常状态;从“mysqld.cnf”中删除该行“skip-grant-tables”并重新启动服务。

而已。

12
Amit Kr

在MySQL工作台中,您可以转到左侧边栏,在管理选择“用户和权限”下,单击用户帐户下的根,右侧部分单击选项卡“帐户限制”以增加最大查询,更新等,以及然后单击“管理角色”选项卡并选中相应的框以授予帐户访问权限。希望有所帮助!

4
Colleen Purcell

我这样做是为了在OSx中初始设置MySQL时设置我的root密码。打开一个终端。

Sudo sh -c 'echo /usr/local/mysql/bin > /etc/paths.d/mysql'

关闭终端并打开一个新终端。以下是在Linux中工作,以设置root密码。

Sudo /usr/local/mysql/support-files/mysql.server stop
Sudo mysqld_safe --skip-grant-tables

(Sudo mysqld_safe --skip-grant-tables:这在第一次对我不起作用。但是第二次尝试,出来就是成功。)

然后登录MySQL

mysql -u root

FLUSH PRIVILEGES;

现在更改密码:

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

重启MySQL:

Sudo /usr/local/mysql/support-files/mysql.server stop
Sudo /usr/local/mysql/support-files/mysql.server start
2
Sadee