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

Har*_*edi 188 mysql sql database database-connection

$ ./mysqladminü根- P " 绝密 "
输入密码:

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

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

use*_*906 463

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

sudo mysql

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';
Run Code Online (Sandbox Code Playgroud)

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

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

(使用Ctrl + D或键入exit退出mysql控制台)

  • 我无法执行此操作..."您的SQL语法中有错误;请查看与您的MariaDB服务器版本对应的手册,以便在...附近使用正确的语法". (36认同)
  • 在Ubuntu 18.04上工作得很好 (17认同)
  • 这把我锁在了外面,甚至 sudo mysql 也不再工作了。必须彻底删除mysql并重新安装。 (13认同)
  • 在Ubuntu 18.04也为我工作,谢谢,:-) (12认同)
  • 你拯救了我的一天:) (7认同)
  • 单行版本: **sudo mysql -e "ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root'"** (4认同)
  • `sudo mysql` 给出 `ERROR 1045 (28000): Access Denied for user 'root'@'localhost'`(无论是否有密码) (3认同)
  • 这个答案行得通,我不小心加了没用的答案投票,对不起! (2认同)
  • @TCB13 和其他任何面临此问题的人。“我无法做到这一点……”您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以获取在附近使用的正确语法...“。在执行更改命令之前使用 FLUSH PRIVILEGES (2认同)

小智 265

  1. 打开和编辑,/etc/my.cnf/etc/mysql/my.cnf根据您的发行版.
  2. 添加skip-grant-tables[mysqld]
  3. 重启Mysql
  4. 您现在应该可以使用以下命令登录mysql mysql -u root -p
  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

  • 太糟糕了,这对MariaDB不起作用:``你的SQL语法有错误; 查看与您的MariaDB服务器版本对应的手册,以便在'USER'root'@'localhost'附近使用正确的语法'IDENTIFIED BY'NewPassword''在第1行`` (15认同)
  • 我找到了这个工作@PhilippLudwig`设置PASSWORD FOR'root'@'localhost'= PASSWORD('root');`我在第5步之后做了这个.这是我的命令提示输出的样子:`MariaDB [(none)] > MariaDB [(无)]>设置PASSWORD FOR'root'@'localhost'= PASSWORD('root'); 查询OK,0行受影响(0.00秒)` (10认同)
  • 有些人可能会在/etc/mysql/my.cnf中找到该文件 (7认同)
  • 你好,我有同样的问题.我做了上面的事情,它解决了问题,但每次我重新启动CentOS时,我都需要再次执行所有步骤(我收到消息:用户'root'访问被拒'@'localhost'(使用密码:NO) - 当运行命令mysql(或任何sql命令)时,我会在每次重启时一遍又一遍地执行. (6认同)
  • 错误 1524 (HY000):未加载插件“auth_socket” (3认同)
  • 对于步骤3,重新启动MariaDB:我发现以下工作:`sudo systemctl restart mariadb` (2认同)
  • 这个伎俩似乎不再有效了。服务器版本 5.7.27 禁止在 --skip-grant-tables 生效时更改 root 密码 (2认同)
  • 最重要的答案都很糟糕。为了节省几个小时的时间,请使用这个答案 - /sf/answers/4070852411/ 这个答案特别花费了我一个小时。不要使用这个答案。编辑配置文件会导致“无法连接”错误,从而导致您陷入新的困境。为了您的利益,请使用我上面链接的答案^ (2认同)

Bla*_*g23 39

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

第1步:确定数据库版本

$ mysql --version
Run Code Online (Sandbox Code Playgroud)

你会看到MySQL的一些输出:

$ mysql  Ver 14.14 Distrib 5.7.16, for Linux (x86_64) using  EditLine wrapper
Run Code Online (Sandbox Code Playgroud)

或者为MariaDB输出如下:

mysql  Ver 15.1 Distrib 5.5.52-MariaDB, for Linux (x86_64) using readline 5.1
Run Code Online (Sandbox Code Playgroud)

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

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

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

你可以用MySQL做到这一点:

$ sudo systemctl stop mysql
Run Code Online (Sandbox Code Playgroud)

对于MariaDB:

$ sudo systemctl stop mariadb
Run Code Online (Sandbox Code Playgroud)

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

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

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

在不加载授权表或启用网络的情况下启动数据库:

$ sudo mysqld_safe --skip-grant-tables --skip-networking &
Run Code Online (Sandbox Code Playgroud)

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

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

$ mysql -u root
Run Code Online (Sandbox Code Playgroud)

您将立即看到数据库shell提示符.

MySQL提示

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

mysql>
Run Code Online (Sandbox Code Playgroud)

MariaDB提示

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

MariaDB [(none)]>
Run Code Online (Sandbox Code Playgroud)

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

第4步:更改Root密码

mysql> FLUSH PRIVILEGES;
Run Code Online (Sandbox Code Playgroud)

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

对于MySQL 5.7.6及更高版本以及MariaDB 10.1.20及更高版本,请使用以下命令:

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';
Run Code Online (Sandbox Code Playgroud)

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

mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('new_password');
Run Code Online (Sandbox Code Playgroud)

请务必new_password使用您选择的新密码进行更换.

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

[重要]这是修复我的特定问题的具体行:

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

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

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

Query OK, 0 rows affected (0.00 sec)
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

对于MariaDB,请使用:

$ sudo systemctl start mariadb
Run Code Online (Sandbox Code Playgroud)

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

$ mysql -u root -p
Run Code Online (Sandbox Code Playgroud)

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

结论

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

  • 哇 !这行'mysql> UPDATE mysql.user SET authentication_string = PASSWORD('new_password')WHERE User ='root'AND Host ='localhost';`对我来说就是这样的救星! (2认同)

Dou*_*sea 26

根据我的经验,如果您在没有 sudo 的情况下运行,它将无法正常工作。因此,请确保您的命令是;

sudo mysql -uroot -p
Run Code Online (Sandbox Code Playgroud)

  • 这应该是公认的答案。问题不是关于忘记密码,而是关于错误消息,因为如果不使用 sudo 权限运行,则无法以 root 身份登录。 (3认同)
  • 最重要的答案都很糟糕。为了节省时间,请使用此答案 - /sf/answers/4070852411/ (2认同)

Fab*_*Fab 21

对于Ubuntu/Debian用户

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

sudo /usr/bin/mysql --defaults-file=/etc/mysql/debian.cnf
Run Code Online (Sandbox Code Playgroud)

  • 这就是全部。显然,默认情况下,“ root”在Ubuntu上不是“ root”。 (2认同)

Ami*_* Kr 13

对于新的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命令刷新权限;
  6. 现在将密码重置为ALTER USER'root'@'localhost'ENFENTIFIED BY'MyNewPassword';
  7. 现在让我们回到正常状态; 从"mysqld.cnf"中删除该行"skip-grant-tables"并重新启动服务.

而已.


PYK*_*PYK 12

我的站在这里:

  • 乌班图21.04

  • PHP 5.6.40-57

  • MYSQL 5.7.37

让我们配置一下

nano /etc/mysql/mysql.conf.d/mysqld.cnf
Run Code Online (Sandbox Code Playgroud)

在底部写下这个

skip-grant-tables
Run Code Online (Sandbox Code Playgroud)

重新加载它

service mysql restart
Run Code Online (Sandbox Code Playgroud)


小智 9

在尝试了所有其他答案之后,这终于对我有用

sudo mysql -- It does not ask me for any password

-- Then in MariaDB/MySQL console:
update mysql.user set plugin = 'mysql_native_password' where User='root';
FLUSH PRIVILEGES;
exit;
Run Code Online (Sandbox Code Playgroud)

我在这篇文章中找到了答案:https : //medium.com/@chiragpatel_52497/solved-error-access-denied-for-user-root-localhost-of-mysql-programming-school-6e3611838d06

  • 这对我使用 mysql 5.7 也有帮助。所以不仅适用于 mariadb (3认同)
  • 这个插件系列真的很有帮助。我尝试了很多组合,但这是唯一适用于 Ver 14.14 Distrib 5.7.27、Linux (x86_64) 的组合 (2认同)

Sad*_*dee 6

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

sudo sh -c 'echo /usr/local/mysql/bin > /etc/paths.d/mysql'
Run Code Online (Sandbox Code Playgroud)

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

sudo /usr/local/mysql/support-files/mysql.server stop
sudo mysqld_safe --skip-grant-tables
Run Code Online (Sandbox Code Playgroud)

( sudo mysqld_safe --skip-grant-tables :这在第一次对我不起作用。但第二次尝试,成功了。)

然后登录MySQL

mysql -u root

FLUSH PRIVILEGES;
Run Code Online (Sandbox Code Playgroud)

现在更改密码:

ALTER USER 'root'@'localhost' IDENTIFIED BY 'newpassword';
Run Code Online (Sandbox Code Playgroud)

重启 MySQL:

sudo /usr/local/mysql/support-files/mysql.server stop
sudo /usr/local/mysql/support-files/mysql.server start
Run Code Online (Sandbox Code Playgroud)


son*_*d10 6

None of the above answers helped me with this problem, so here's the solution I found.

The relevant part:

In Ubuntu systems running MySQL 5.7 (and later versions), the root MySQL user is set to authenticate using the auth_socket plugin by default rather than with a password. This allows for some greater security and usability in many cases, but it can also complicate things when you need to allow an external program (e.g., phpMyAdmin) to access the user.

In order to use a password to connect to MySQL as root, you will need to switch its authentication method from auth_socket to mysql_native_password. To do this, open up the MySQL prompt from your terminal:

sudo mysql

Next, check which authentication method each of your MySQL user accounts use with the following command:

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

Output

+------------------+-------------------------------------------+-----------------------+-----------+
| 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)
Run Code Online (Sandbox Code Playgroud)

In this example, you can see that the root user does in fact authenticate using the auth_socket plugin. To configure the root account to authenticate with a password, run the following ALTER USER command. Be sure to change password to a strong password of your choosing, and note that this command will change the root password you set in Step 2:

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

Then, run FLUSH PRIVILEGES which tells the server to reload the grant tables and put your new changes into effect:

FLUSH PRIVILEGES;

Check the authentication methods employed by each of your users again to confirm that root no longer authenticates using the auth_socket plugin:

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

Output

+------------------+-------------------------------------------+-----------------------+-----------+
| 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)
Run Code Online (Sandbox Code Playgroud)

You can see in this example output that the root MySQL user now authenticates using a password. Once you confirm this on your own server, you can exit the MySQL shell:

exit

  • 唯一知道发生了什么事的人!谢啦 (2认同)
  • 我收到此错误,为什么?`您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,了解在第 1 行“BY 'MYPERSONALPASSWORD'' 附近使用的正确语法”我刚刚粘贴了这一行:“ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '我的个人密码';` (2认同)

小智 5

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


klo*_*lor 5

在我的 Debian 10 下,错误

ERROR 1698 (28000): Access denied for user 'root'@'localhost'
Run Code Online (Sandbox Code Playgroud)

被(GOOD WAY)解决了

sudo mysql -u root -p mysql
Run Code Online (Sandbox Code Playgroud)

坏方法:

mysql -u root -p mysql
Run Code Online (Sandbox Code Playgroud)


小智 5

使用sudo更改密码:

sudo mysql

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'insert_password';
Run Code Online (Sandbox Code Playgroud)

来源:Phoenixnap - 用户 root localhost 的访问被拒绝


归档时间:

查看次数:

654950 次

最近记录:

6 年,7 月 前