用户'root@localhost'访问被拒绝(使用密码:NO)

207

我正在尝试在Windows桌面上运行WordPress,它需要MySQL。

我使用微软提供的Web Platform Installer安装了所有内容。我从未为MySQL设置过根密码,在安装WordPress的最后一步中,它要求输入MySQL服务器密码。

如果有默认密码,root用户的默认密码是什么?如何更改密码?

我已经尝试过:

mysql -u root password '123'

但是它显示给我:

Access denied for user 'root@localhost' (using password:NO)

之后我尝试:

mysql -u root -p

然而,它要求输入一个我并没有的密码。


更新:根据Bozho的建议,我执行了以下步骤:

  1. 从Windows服务中停止MySQL服务。

  2. 打开CMD。

  3. 将位置更改为c:\ program files \ mysql \ bin。

  4. 执行下面的命令。

    mysqld --defaults -file ="C:\\ program files \\ mysql \\ mysql server 5.1 \\ my.ini"--init-files = C:\\ root.txt

  5. 该命令运行时会有一个关于字符集的警告,如下所述。

  6. 我启动了Windows服务中的MySQL服务。

  7. 我在命令行中输入

    mysql -u root -p 输入密码:123 //123是密码

  8. 命令行显示以下错误。

    Access denied for user 'root@localhost' (using password:**YES**)

我该如何解决这个问题?


4
第一条命令有误,应该是 -p--password,而不是 password。这就是为什么 MySQL 会回复 USING PASSWORD NO 的原因。 - Konerak
8
似乎没有人给他一个显而易见的答案。在初始安装后,“root”用户的密码为空。因此,只需执行“mysql -u root -p”,然后按下回车键,即留空密码。然后当然要为“root”用户设置密码。 - RiggsFolly
4
不行!空密码会导致访问被拒绝! - J86
我想添加一条评论,因为我不确定被接受的答案是否正确。对我来说,输入mysql -u root -p,然后在提示输入密码时,输入正确的密码(安装时设置的密码)就可以了。而将已知存在的数据库名称作为-p参数传递并不能起作用。 - Carmine Tambascia
19个回答

127

对于这种错误,您只需以管理员身份为根用户设置新密码。请按照以下步骤操作:

[root ~]# mysql -u root
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password:NO)
  1. 停止运行中的 MySQL 服务/守护进程

 [root ~]# service mysql stop   
 mysql stop/waiting
  • 使用以下选项启动没有任何特权的 MySQL; 该选项用于启动并且不使用 MySQL 的特权系统。

  •  [root ~]# mysqld_safe --skip-grant-tables &
    

    此时,终端看起来似乎会停止工作。不要管它,使用新的终端进行下一步操作。

    1. 进入mysql命令提示符

     [root ~]# mysql -u root
     mysql> 
    
  • 修复根用户的权限设置;

  •  mysql> use mysql;
     Database changed
     mysql> select * from  user;
     Empty set (0.00 sec)
     mysql> truncate table user;
     Query OK, 0 rows affected (0.00 sec)
     mysql> flush privileges;
     Query OK, 0 rows affected (0.01 sec)
     mysql> grant all privileges on *.* to root@localhost identified by 'YourNewPassword' with grant option;
     Query OK, 0 rows affected (0.01 sec)
    

    *如果您不想设置任何密码,或者更愿意使用空密码。

        mysql> grant all privileges on *.* to root@localhost identified by '' with grant option;
        Query OK, 0 rows affected (0.01 sec)*
        mysql> flush privileges;
        Query OK, 0 rows affected (0.00 sec)
    

    确认结果:

        mysql> select host, user from user;
    +-----------+------+
    | host      | user |
    +-----------+------+
    | localhost | root |
    +-----------+------+
    1 row in set (0.00 sec)
    
    1. 退出shell,并以正常模式重新启动mysql。

     mysql> quit;
     [root ~]# kill -KILL [PID of mysqld_safe]
     [root ~]# kill -KILL [PID of mysqld]
     [root ~]# service mysql start
    
  • 现在您可以使用您设置的密码成功地作为 root 用户登录

  •   [root ~]# mysql -u root -pYourNewPassword 
      mysql> 
    

    2
    在输入“[root ~]# mysqld_safe --skip-grant-tables &”后按Enter键,然后打开另一个终端并输入“[root ~]# mysql -u root”。 - Liuda
    7
    第三步时,我遇到了ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)的错误。 - MrMartin
    6
    @MrMartin,请创建该目录 sudo mkdir -p /var/run/mysqld 并赋予权限 sudo chown mysql:mysql /var/run/mysqld - ratojakuf
    4
    执行truncate table user;将删除所有用户,应该提供警告。因此,命令grant all privileges on *.* to root@localhost identified by 'YourNewPassword' with grant option;无法工作,因为尚未重新创建root用户。请注意不改变原意,简化语言。 - Tofandel
    3
    在运行 grant all privileges on *.* to root@localhost identified by '' with grant option; 后,我收到了 您的SQL语法有误,请检查与您的MySQL服务器版本相对应的手册,以获取正确的语法使用方式near 'identified by 'password' with grant option' at line 1 的错误提示。 - andrew kot
    显示剩余3条评论

    70

    @Bozho - 我按照指示创建了一个文本文件并从提到的命令中调用它,之后我遇到了 100608 [warning] --default-character-set is deprecated and will be removed in a future release. please use --character-set-server instead 的问题。最后,当我再次启动mysql服务时,我遇到了完全相同的错误,但这次是带有 (using password:yes),我该怎么办? - Nasser Hadjloo
    @Bozo - 注意,我无法使用mysqldt-nt运行您的命令,我使用mysqldt -nt来运行它。实际上,第一个命令对cmd不可识别。我在等待您的回复。 - Nasser Hadjloo
    @Bozho - 我已经更新了我的问题并附上了错误信息。谢谢你的时间。 - Nasser Hadjloo
    @Bozho - 有没有办法更新/自定义我的mysql错误?将“Access denied for user 'root@localhost' (using password:NO)”更新为“Access denied for user 'myname@localhost' (using password:NO)” - Hitesh

    30

    使用mysql -u root -p命令,它会要求输入密码,输入密码并按回车键即可。


    在用户遭到拒绝访问的情况下,我进行了调整后,这个问题得到了解决。 - Shawn W
    这个方法在之前尝试的所有方法都失败后成功了。(Mac OS Big Sur,MySQL 8的全新安装) - Shad

    27

    1) 您可以通过调用MySQL控制台来设置根密码。默认情况下,它位于

    C:\wamp\bin\mysql\mysql5.1.53\bin

    进入该目录并键入MySQL,然后按以下方式设置密码。

        > SET PASSWORD FOR root@localhost = PASSWORD('new-password');
    

    2) 您可以通过编辑wamp的phpmyadmin应用程序来为root用户配置。

    C:\wamp\apps\phpmyadmin3.3.9\config.inc.php 
    

    注意:如果您使用xampp,那么文件将位于

    C:\xampp\phpMyadmin\config.inc.php
    

    看起来像这样:

            $cfg['Servers'][$i]['verbose'] = 'localhost';
            $cfg['Servers'][$i]['host'] = 'localhost';
            $cfg['Servers'][$i]['port'] = '';
            $cfg['Servers'][$i]['socket'] = '';
            $cfg['Servers'][$i]['connect_type'] = 'tcp';
            $cfg['Servers'][$i]['extension'] = 'mysqli';
            $cfg['Servers'][$i]['auth_type'] = 'config';
            $cfg['Servers'][$i]['user'] = 'root';
            $cfg['Servers'][$i]['password'] = 'YOURPASSWORD';
            $cfg['Servers'][$i]['AllowNoPassword'] = false;
    

    $cfg['Servers'][$i]['AllowNoPassword']设置为false会解决"Access denied for user 'root@localhost' (using password:NO)"错误。

    如果您之前更改了 'root@localhost' 的密码,则需要执行两个操作来解决"Access denided for user 'root@localhost'"错误:

    1. 如果 ['password'] 中有空引号,如' ',则将密码放在引号中。
    2. 更改(using password:NO)为(using password:YES)。

    这将解决该错误。

    注意:phpmyadmin是随wamp附带的一个单独的工具。 它只提供MySQL的接口。 如果更改了mysql root的密码,则应更改phpmyadmin配置。 通常,phpmyadmin的配置是针对根用户的。


    1
    不行,MySQL无法启动:c:\wamp64\bin\mysql\mysql5.7.23\bin>mysql 错误1045(28000):用户'ODBC'@'localhost'被拒绝访问(未使用密码) - Jaxx0rr
    对我很有帮助!谢谢Andreas!: ) - Louisr57

    13

    我在使用 OS X El Capitan 时也遇到了同样的错误。Mysql 版本是 5.7。在执行以下步骤后,我能够使用 root 连接到 mysql。

    停止 mysql 服务器。

    sudo mysql.server stop
    

    以安全模式启动mysql

    sudo mysqld_safe --skip-grant-tables
    

    使用mysqld,将数据库更改为mysql并更新用户'root'的详细信息。

    show databases;
    use mysql;
    UPDATE mysql.user 
        SET authentication_string = PASSWORD('MyNewPass'), password_expired = 'N'
        WHERE User = 'root' AND Host = 'localhost';
    exit;
    

    之后杀死'mysqld_safe'进程,正常启动mysql。您应该能够使用根用户和新密码登录mysql。有关更多详细信息,请参阅SQL文档


    11

    只需要在 C:\xampp\mysql\bin 路径下编辑 my.ini 文件,添加如下内容:

    skip-grant-tables
    

    # MySQL服务器[mysqld]port=3306 之间插入一行,然后重新启动MySQL服务器。
    效果如下图所示:

    Screenshot


    当我这样做时,我会得到另一个错误“通信链接失败”。 - Ahmed Hussein

    8
    更改密码后,我在获取某些信息时遇到了错误:

    使用密码:否)访问被拒绝用户'root'@'localhost'(

    使用密码:是)访问被拒绝用户'root'@'localhost'(

    两种情况都出现了错误。
    但问题是,之后我尝试使用

    mysql -uroot -ppassword

    代替

    mysql -u root -p password

    -> 在-uroot和-ppassword之间添加空格,因此如果有人遇到麻烦可以尝试这种方式。

    6

    这个解决方案对我不起作用,因为我没有第二步需要的密码。 - Nasser Hadjloo
    这是我发送链接时正在查看的内容,你确定这行不通吗?我没有看到任何与旧密码有关的参考。对于Windows,请执行以下操作:shell> mysql -u root mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpwd'); mysql> SET PASSWORD FOR 'root'@'127.0.0.1' = PASSWORD('newpwd'); mysql> SET PASSWORD FOR 'root'@'%' = PASSWORD('newpwd'); - sholsapp
    1
    就像我之前说的那样,当我输入 mysql -u root 时,我遇到了问题,无法登录到 mysql 来运行第二行命令。那么如何使用这个命令呢? - Nasser Hadjloo

    5
    如果有人使用正确密码仍然遇到“用户帐户‘root’的指定密码无效或无法连接到数据库服务器”的错误,则另一种解决方案是:
    • 在Windows注册表中,删除 HKCU\Software\Microsoft\WebPlatformInstaller 下的 mysql_pwd 注册表项
    • 卸载旧版 MySQL .NET 连接器
    • 下载并安装最新的 MySql .NET 连接器:MySql .NET Connector

    检查密码和数据库名称对我有用.. +1 - Abhinav Dobhal

    5
    1. C:\xampp\phpMyAdmin 中的 config.inc.php 文件中的密码更改。
    2. 在命令提示符中键入 mysql -u root -p
    3. 会要求您输入密码。 输入您在 config.inc.php 中更新的密码。

    我不需要更新密码。-p 参数解决了一切。 - Youth overturn

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接