MySql ERROR 1045(28000):用户'root'@'localhost'拒绝访问(使用密码:NO)

Ala*_* P. 32 mysql

我尝试过StackOverflow的多个解决方案,但没有取得任何成功.我正在Mac OSX(Sierra 10.12.3)上尝试创建一个新的数据库和用户.从终端我输入:

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

输出此错误:

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

为了尝试解决它,我从'系统偏好设置'中停止了mysql,然后从终端输入:

sudo mysqld_safe —skip-grant-tables
Run Code Online (Sandbox Code Playgroud)

我打开第二个标签并输入:

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

然后从mysql中:

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

flush privileges;
Run Code Online (Sandbox Code Playgroud)

然后我重新启动计算机(使用CMD + C杀死进程不起作用).重新启动后,尝试mysql -u root仍然会产生相同的错误.

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

任何帮助表示赞赏.

Pra*_*til 34

出于安全原因,mysql -u root不会工作,直到您在命令中传递-p,请尝试以下方式

 mysql -u root -p[Enter]
 //enter your localhost password
Run Code Online (Sandbox Code Playgroud)


小智 8

只是为了确认:您确定您运行的是MySQL 5.7,而不是MySQL 5.6或更早版本.插件列包含"mysql_native_password".(在MySQL 5.7之前,密码哈希存储在名为password的列中.从MySQL 5.7开始,密码列被删除,密码已存储在authentication_string列中.)并且您还验证了身份验证字符串的内容匹配PASSWORD('mysecret')的回报.另外,我们是否有理由对mysql.user表使用DML而不是使用SET PASSWORD FOR语法? - spencer7593

所以基本上只要确保插件列包含"mysql_native_password".

不是我的工作,但我读了评论,并注意到这被作为答案陈述,但尚未作为可能的答案发布.


小智 7

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

而mysql会要求输入密码


Ale*_*ico 5

只需使用:

$ sudo mysql
Run Code Online (Sandbox Code Playgroud)

不带“ -u root”参数。

  • 使用此命令后,我会收到输入密码的提示。我输入它并得到同样的错误。 (2认同)