我试图允许远程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