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

时间:2017-01-14 00:06:50

标签: mysql sql database database-connection

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

  

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

我该如何解决这个问题?

23 个答案:

答案 0 :(得分:345)

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

sudo mysql

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

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

现在您应该可以使用root登录了。更多信息可以在mysql documentation

中找到

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

答案 1 :(得分:213)

  1. 开放&根据您的发行版修改/etc/my.cnf/etc/mysql/my.cnf
  2. skip-grant-tables
  3. 下添加[mysqld]
  4. 重启Mysql
  5. 您现在应该可以使用以下命令mysql -u root -p
  6. 登录mysql
  7. 运行mysql> flush privileges;
  8. 通过 ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPassword';
  9. 设置新密码
  10. 返回/etc/my.cnf并删除/评论 skip-grant-tables
  11. 重启Mysql
  12. 现在您可以使用新密码mysql -u root -p
  13. 登录

答案 2 :(得分:29)

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

第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提示符。

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步:更改根密码

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启动mysql

对于MariaDB,请使用:

$ sudo systemctl start mariadb

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

$ mysql -u root -p

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

<强>结论

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

答案 3 :(得分:21)

对于Ubuntu / Debian用户

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

sudo /usr/bin/mysql --defaults-file=/etc/mysql/debian.cnf

答案 4 :(得分:14)

以上答案均无助于我解决这个问题,所以here's the solution I found

相关部分:

  

在运行MySQL 5.7(及更高版本)的Ubuntu系统中,默认情况下,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插件进行了身份验证。要将根帐户配置为使用密码进行身份验证,请运行以下ALTER USER命令。确保将密码更改为您选择的强密码,并注意此命令将更改您在步骤2中设置的根密码:

     
    

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)
  
     

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

     
    

exit

  

答案 5 :(得分:13)

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

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;

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

答案 6 :(得分:12)

对于新的Linux用户而言,这可能是一项艰巨的任务。让我用mysql 8更新它(当前可用的最新版本是2018年9月12日的8.0.12)

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

就是这样。

答案 7 :(得分:12)

根据我的经验,如果您不使用sudo运行,将无法正常工作。因此,请确保您的命令是;

sudo mysql -uroot -p

答案 8 :(得分:4)

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

答案 9 :(得分:2)

我这样做是为了在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

答案 10 :(得分:1)

有时安装时会设置默认密码 - 如docs中所述。这可以通过以下命令确认。

sudo grep 'temporary password' /var/log/mysqld.log

答案 11 :(得分:0)

我试图在 mac 上利用 docker 桌面来运行 5.7.35 并且这个 docker-compose.yml 配置允许它工作: 特别是添加了一行...

<块引用>

命令:--default-authentication-plugin=mysql_native_password

...成功了

version: '3.3'
services:
  mysql_db:
    image: mysql:5.7
    command: --default-authentication-plugin=mysql_native_password
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: 'your_password'
    ports:
      - '3306:3306'
    expose:
      - '3306'
    volumes:
      - ~/your/volume/path:/var/lib/mysql

答案 12 :(得分:0)

根据 Mariadb official documentation,在 MariaDB 10.4.3 及更高版本中,默认安装了 unix_socket 身份验证插件。

要禁用它并恢复到之前的 mysql_native_password 身份验证方法,请在 [mysqld] 文件的 my.cnf 部分添加以下行:

[mysqld]
unix_socket=OFF

然后运行:

mysql_install_db --auth-root-authentication-method=normal

然后开始mysqld

此命令将正常工作:

mysqladmin -u root password CHANGEME

有关其他信息,请参阅 https://mariadb.com/kb/en/authentication-from-mariadb-104/#configuring-mysql_install_db-to-revert-to-the-previous-authentication-method

答案 13 :(得分:0)

修复Mac OS

  1. https://downloads.mysql.com/archives/community/安装MySQL(8.x是最新的日期,但请确保该版本与Mac OS版本兼容)

  2. 在安装过程中提供root的密码(让<root-password>为密码)(不要忘记记住密码!)

  3. 选择使用旧密码加密选项(这是我曾经使用过的并且没有尝试过使用使用强密码加密选项)

  4. 搜索并打开 MySQL.prefPane (使用搜索工具)

    1. 选择“配置” 标签
    2. 点击配置文件中的选择选项
      1. 选择/private/etc/my.cnf
  5. 从终端打开一个名称为/etc/my.cnfvi /etc/my.cnf)的新文件或现有文件,添加以下内容:

     [mysqld]
     skip-grant-tables
    
  6. 按如下所示重新启动mysqld:

    1. ps aux | grep mysql
    2. kill -9 <pid1> <pid2> ...(所有与mysql相关的进程的抓取pid)
  7. mysqld自动重新启动

  8. 通过从终端运行以下命令来验证是否已设置该选项:

     ps aux | grep mysql
    
     > mysql/bin/mysqld ... --defaults-file=/private/etc/my.cnf ... (output)
    
  9. 运行以下命令进行连接(让mysql-<version>-macos<version>-x86_64为安装mysql的文件夹。要获取实际文件夹,请运行ls /usr/local/并复制文件夹名称):

     /usr/local/mysql-<version>-macos<version>-x86_64/bin/mysql -uroot -p<root-password>
    

答案 14 :(得分:0)

尽管是旧版本,但在设置mysql-8 zip版本时遇到了相同的错误。最后,切换到installer版本,该版本可以无缝运行。在安装过程中,会提示您设置root密码。一旦设置,它肯定可以工作。

enter image description here

答案 15 :(得分:0)

U-对我没有任何帮助!我有一台运行mariadb 5.5.64的CentOS 7.4计算机。

在从yum安装mariadb之后,我要做的就是这个

# systemctl restart mariadb
# mysql_secure_installation

mysql_secure_installation将带您完成多个步骤,包括“设置root密码?[Y / n]”。只需说“ y”并输入密码即可。根据需要回答其他问题。

然后您可以使用

输入密码
# mysql -u root -p

它将生存

# systemctl restart mariadb

密钥

然后,我检查了/bin/mysql_secure_installation源代码,以了解它如何神奇地更改了root密码,并且这里没有其他答案。导入位是:

do_query "UPDATE mysql.user SET Password=PASSWORD('$esc_pass') WHERE User='root';"

...它说SET Password=...,而不是SET authentication_string = PASSWORD...。因此,此版本(5.5.64)的正确过程是:

login using mysql -u root -p , using the password you already set.
Or, stop the database and start it with:
mysql_safe --skip-grant-tables --skip-networking &

在mysql>提示符下:

use mysql;
select host,user,password from user where user = 'root';
(observe your existing passwords for root).
UPDATE mysql.user set Password = PASSWORD('your_new_cleartext_password') where user = 'root' AND host = 'localhost';
select host,user,password from user where user = 'root';
flush privileges;
quit;

杀死正在运行的mysqld_safe。重新启动mariadb。以root用户身份登录:mysql -u -p。使用新密码。

如果需要,可以一次设置所有root密码。我认为这是明智的:

mysql -u root -p
(login)
use mysql;
select host,user,password from user where user = 'root';
UPDATE mysql.user set Password = PASSWORD('your_new_cleartext_password') where user = 'root';
select host,user,password from user where user = 'root';
flush privileges;
quit;

这将对所有root密码执行更新:即“ localhost”,“ 127.0.0.1”和“ :: 1”的密码

将来,当我使用RHEL8或有什么功能时,我会尽力记住检查/ bin / mysql_secure_installation并查看其工作方式,这些人是为此操作系统配置mariadb的。

>

答案 16 :(得分:0)

好的,我知道这是一个老话题,但是如果您像我一样通过Google访问此页面,但上述解决方案均无效,那么结果就是我的错误是100%愚蠢。 我没有连接到服务器。连接后,一切运行顺利。

如果有助于了解我的设置,我正在使用Sequel Pro,并尝试使用NPM软件包mysql与Node连接。我认为我不需要真正连接(除了运行Sequel Pro),因为我已经在我的应用程序中进行了连接。

enter image description here

答案 17 :(得分:0)

如果您没有足够的权限,可能会发生这种情况。 键入su,输入root密码,然后重试。

答案 18 :(得分:0)

如果您和我一样,但以上所有建议均失败,请继续卸载计算机上所有版本的mysql,并使用此命令sudo find / -name "mysql"rm -rf搜索每个文件或目录中所有剩余的mysql文件。并附有mysql名称(您应跳过与编程语言库相关的文件)。现在安装MySQL的新版本并享受。注意:您将丢失所有数据,因此请先权衡一下选择。

答案 19 :(得分:0)

在我的Debian 10版本中,错误

ERROR 1698 (28000): Access denied for user 'root'@'localhost'

被(GOOD WAY)解决了

sudo mysql -u root -p mysql

坏路:

mysql -u root -p mysql

答案 20 :(得分:-1)

“-p”参数不要求参数名称和值之间有空格。

代替

$ ./mysqladmin -u root -p 'redacted'

使用

$ ./mysqladmin -u root -p'redacted'

或者只是

$ ./mysqladmin -u root -p

这将提示您输入密码。

答案 21 :(得分:-3)

解决方案:放弃!

告诉我,我花了整整两天的时间试图使MySQL无法正常工作,始终停留在权限错误上,这些错误都没有被该线程的答案解决。到了这样的地步,我想如果我继续下去,我会发疯的。

出于耐心等待,我仅使用450KB发送了安装SQLite的命令,并且从单词go开始就可以正常工作。

如果您没有圣徒的耐心,请使用SQLite并节省大量时间,精力,痛苦和存储空间。.

答案 22 :(得分:-4)

'访问被拒绝用户'root'@'localhost'(使用密码:YES)' 只有在最近更改了密码但没有对phpmyadmin的config.inc.php文件进行更改时才会发生此错误。

所以我通过将密码更改为/XAMPP/xamppfiles/phpmyadmin/config.inc.php文件解决了我的问题。