2014-09-04 90 views
0

我输入了以下:授权后发生MySQL错误1045,我做错了什么?

mysql> grant all on DBNAME.* to '[email protected]' identified by 'MYROOTPWD'; 

然后我辞职出来的MySQL并做了一些贝壳的东西。现在当我尝试使用mysql时,它会失败

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

我不会忘记密码;我可以在授权命令中看到我的终端上有几行代码。我已经尝试了一堆关于此主题的previous answers,但没有成功。

我做错了什么?当然,我可以重置根密码并继续前进,但我想知道我的错误,所以我从不重复。

更新:不,我没有刷新权限。显然我误解了它的作用。为什么我以前存在的能力(根本不使用mysql)不起作用?

+0

您是否拥有FLUSH PRIVILEGES? – Hackerman 2014-09-04 20:02:33

+0

您是否在执行授权后执行FLUSH PRIVILEGES? – 2014-09-04 20:02:35

+2

请注意,'GRANT'语句会自动执行与“刷新特权”操作等效的操作;当执行GRANT,REVOKE,SET PASSWORD语句时读取权限表。当直接对特权表进行DML更改时,需要'FLUSH PRIVILEGES'语句;在MySQL再次读取权限表之前,这些更改不会被注意,并且不会生效。 – spencer7593 2014-09-04 20:29:00

回答

2

MySQL用户应该由独立的用户名和主机名被识别,在GRANT语句:

> grant ... to 'root'@'localhost' ... 
        ^^ 

(注意周围的用户名和周围的主机名引号。)MySQL用户通过用户名和主机名标识。如果你只有一个单引号的字符串,MySQL会使用它作为用户名并假设一个主机名。检查mysql.db表,可能你有一行User列包含[email protected]

+0

好的,我可以用-u root @ localhost登录,他没有权限对mysql db做任何事情。 – 2014-09-04 20:22:41

+0

但我仍然不明白发生了什么事。这个新用户是否覆盖它? – 2014-09-04 20:37:06

+0

GRANT声明不可能“覆盖”任何用户。一个MySQL用户由两个值标识:'username'和'hostname';并且有一些主机名为'localhost'的funkiness;这不是一个普通的TCP 127.0.0.1环回。 (如果mysql.user中的另一行不匹配,则'hostname'中的'%''通配符将匹配。)另一方面,您不是唯一具有这些类型问题的人。 MySQL文档有一个部分,你可能会觉得有用[http://dev.mysql.com/doc/refman/5.5/en/resetting-permissions.html](http://dev.mysql.com/doc/refman/ 5.5/EN /复位-permissions.html)。 – spencer7593 2014-09-04 21:23:00