MySQL允许无密码login,不会让我运行任何东西

我试图允许远程login到MySQL,所以我改变了/etc/mysql/my.cnf绑定到0.0.0.0而不是127.0.0.1 (我要把它马上回来,我保证!),但它没有,所以我试图改变用户根的主机*(我后来认识应该是%)。 无论如何,我现在无法login到MySQL服务器,甚至在本地,除非我尝试login没有密码,在这种情况下,它让我在,但是当我尝试执行任何命令,它通知我,我不是授权这样做,我是用户''@'localhost' 。 我已经closures了服务器,并使用--skip-grant-tables运行它,它允许我以root用户身份login,而且我可以实际执行某些操作,但是我不确定如何恢复正常的本地密码login。 我只是检查,我的PHP应用程序(它有自己的一套凭据)工作正常。 是的,我把绑定回到127.0.0.1 。 如果不是很明显,我是MySQL的新手。

服务器运行Ubuntu 12.04 LTS。

编辑:要清楚,我目前没有运行--skip-grant-tables

首先摆脱--skip-grant-tables

 service mysql restart 

接下来,让我们确保mysql的root用户拥有正确的密码:

 SELECT user,host FROM mysql.user WHERE password=PASSWORD('rootpassword'); 

如果没有回来,请修改密码,如下所示:

 UPDATE mysql.user SET password=PASSWORD('rootpassword') WHERE user='root'; FLUSH PRIVILEGES; 

接下来,让我们确保所有用户都有一个密码:

 SELECT user,host FROM mysql.user WHERE password=''; 

如果返回,请删除这些用户:

 DELETE FROM mysql.user WHERE password=''; FLUSH PRIVILEGES; 

当我看到这个消息

当我尝试执行任何命令时,它会通知我,我没有被授权这么做,那个im用户'''localhost'。 我已经closures了服务器并使用–skip-grant-tables运行它,它允许我以root用户身份login,而且我可以实际执行某些操作,但是我不确定如何获取正常的本地密码login名

然后我对自己说:OMG他有匿名login。 请删除它们如下:

 mysql -uroot -p -e"DELETE FROM mysql.user WHERE user=''; FLUSH PRIVILEGES;" 

请从mysql.db中删除对testing数据库的所有引用

 mysql -uroot -p -e"DELETE FROM mysql.db WHERE LEFT(db,4)='test'; FLUSH PRIVILEGES;" 

这将确保您的MySQL安装

你不应该使用--skip-grant-table继续运行mysql服务器。 否则,您将无法控制连接到服务器的用户!

您必须撤消对您的root用户(以及任何其他用户)所做的更改。 完成后,停止mysql服务器并正常启动。

使用--skip-grant-tables启动mysqld后,您应该login到mysql并执行:

use mysql; UPDATE user SET Host='%' WHERE Host='*' AND User='root';
use mysql; UPDATE user SET Host='%' WHERE Host='*' AND User='root'; 

之后从MySQL注销并重新启动服务器没有--skip-grant-tables

尝试以root身份login,并检查一切正常。 (特权等)

--skip-grant-tables仅用于pipe理目的,您不应该使用此参数正常运行mysql