MySQL错误1045(28000):用户'root'@'localhost'被拒绝访问(未使用密码)

43

我尝试了多个StackOverflow上的解决方案,但都没有成功。我在Mac OSX(Sierra 10.12.3)上尝试创建新数据库和用户。从终端输入:

mysql -u root

它输出了这个错误:

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

为了尝试解决这个问题,我从“系统偏好设置”中停止了mysql,然后从终端键入:

sudo mysqld_safe —skip-grant-tables

我打开了第二个选项卡,输入:

mysql -u root

然后从 MySQL 中:

update mysql.user set password_expired = 'N', authentication_string=PASSWORD('newpassword') where user = 'root';

flush privileges;

我随后重新启动了计算机(使用 CMD + C 杀死进程无效)。 重新启动后,尝试 mysql -u root 仍然出现相同的错误。

我可以通过 MySQL 客户端和非 root 用户访问 mysql。

感谢任何帮助。


2
您已添加了密码,请使用“-p”并添加密码。 - René Höhle
3
所以,它们并不完全相同。NO表示您没有向MySQL发送密码。YES表示您正在向MySQL发送密码,但是是错误的密码。在安装MySQL时,您是否为mysql root用户设置了特定密码?默认情况下没有密码,因此您可以使用mysql -u root -p并按Enter键。 - Niagaradad
@SomeStudent 从他们的网站上下载了它。 - Alan P.
@RickJames 我尝试过使用 mysql -u 命令,有的时候带上 -p 参数,有的时候不带,但是两种情况都会显示错误。 - Alan P.
4
确认一下:你确定正在使用的是MySQL 5.7,而不是MySQL 5.6或更早的版本。并且插件列包含"mysql_native_password"。(在MySQL 5.7之前,密码哈希存储在名为password的列中。从MySQL 5.7开始,密码列被移除,密码哈希存储在authentication_string列中。)您还验证了身份验证字符串的内容与PASSWORD('mysecret')的返回值匹配。另外,请问我们使用DML操作对mysql.user表进行操作是否有原因,而不是使用SET PASSWORD FOR语法? - spencer7593
显示剩余14条评论
10个回答

49

出于安全考虑,使用mysql -u root命令时需要在命令中添加-p参数才能正常运行,请尝试以下方式:

 mysql -u root -p[Enter]
 //enter your localhost password

1
谢谢,但我已经尝试过带和不带“-p”参数,没有任何区别。@spencer7583解决了这个问题。 - Alan P.

17
mysql -u root -p;

MySQL会要求输入密码。


嗨,我正在尝试删除并重新安装XAMPP以允许远程访问(因为我遇到了很多MySQL访问问题)。我已经删除了XAMPP,但无法删除MySQL。在我的情况下,唯一有效的MySQL命令是您的。 - Galilo Galilo
你能帮忙吗? - Galilo Galilo

12
确认一下:您确定正在运行MySQL 5.7,而不是MySQL 5.6或更早版本。插件列包含“mysql_native_password”(在MySQL 5.7之前,密码哈希存储在名为“password”的列中。从MySQL 5.7开始,删除了密码列,密码哈希存储在authentication_string列中)。您还验证了authentication string的内容与PASSWORD('mysecret')的返回值匹配。此外,我们使用DML针对mysql.user表而不是使用SET PASSWORD FOR语法是否有原因? – spencer7593
基本上只需确保Plugin列中包含“mysql_native_password”。
不是我的工作,但我读了评论并注意到这被称为答案,但尚未发布为可能的答案。

6

只需使用:

$ sudo mysql

没有使用"-u root"参数。

3
使用这个命令后,系统提示我输入密码。我输入密码后仍然出现相同的错误。 - Alan P.

3
如果由于某些原因需要跳过密码提示,您可以在命令中输入密码(危险)。
mysql -u root --password=secret

1

您需要在XAMPP文件夹中使用xampp-controle.exe来运行MySQL。之后登录:

mysql -u root

我没有使用XAMPP或Windows。 - Alan P.
好的,你必须控制MySQL是否在运行。 - b2ok
1
不确定那是什么意思。 - Alan P.
MySQL正在运行吗? - b2ok
是的,MySQL正在运行。 - Alan P.

1

你是否考虑过,根密码可能不是你想象中的那样?你有检查过文件 /root/.mysql_secret 中的密码吗?这是自动从5.7版本开始生成的默认根密码位置。

cat /root/.mysql_secret

0

评论者@Niagaradad帮了我。我一直输入错误的密码。

注意错误信息

ERROR 1045 (28000): Access denied for user 'ayaz'@'localhost' (using password: YES)

它说,密码:是。这意味着我正在向SQL发送密码,这是错误的。

通常情况下,如果您没有设置密码,则root帐户没有密码。如果您通过homebrew安装了mysql,则root帐户将没有密码。

以下是评论内容。

所以,不完全相同。NO表示您未向MySQL发送密码。YES表示您正在向MySQL发送密码,但是密码不正确。您在安装MySQL时是否为mysql root用户专门设置了密码?默认情况下没有密码,因此您可以使用mysql -u root -p并按Enter键。


0
在我的情况下,我需要在我的AWS RDS实例上编辑入站规则以接受所有流量。否则,默认的TCP/IP限制会阻止我从本地机器创建数据库。

0

如果你已经更改了密码,但现在无法使用,请尝试以下方法(仅适用于Windows系统,其他系统可能不同):

1)关闭mysql服务 2)备份/mysql/data文件夹 3)进入/mysql/backup文件夹 4)将/mysql/backup/mysql文件夹中的文件复制到/mysql/data/mysql文件夹中(覆盖原有文件) 5)启动mysql服务

在我的Win7 XAMPP上测试通过。


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