我的MySQL(5.5)root用户有一些非常奇怪的问题。 我想允许外部主机访问root用户,但似乎我的根@本地主机没有“授予选项”的本地数据库! 我认为这个问题是由于我认为我有两个root @ localhost用户,两个用不同的授权规则,但我不知道如何回到我的安装。
我已经尝试删除root用户并重新创build它(我认为),重置root用户密码(修改mysql数据库本身)
我不能进入根帐户使用我一直指定的密码,而是一个替代密码,我甚至不知道我是怎么得到的…这个替代用户是似乎没有满根权限,但仍被称为根。
– 下面发布的解决scheme –
您可以在禁用身份validation的情况下启动MySQL。 从那里你可以创build/删除MySQL的pipe理帐户。
您可以在MySQL文档中find详细信息: http : //dev.mysql.com/doc/refman/5.0/en/resetting-permissions.html
mysqld --skip-grant-tables --skip-networking 在mysql中运行:
UPDATE mysql.user SET Password = PASSWORD('MyNewPass')WHERE User ='root';
授予所有特权。 TO'root'@'localhost'WITH GRANT OPTION;
closuresMySQL
find解决scheme – 这是由于从MySQL 5.1更新到MySQL 5.5,并移动身份validation模式(MySQL数据库本身)一起造成的。 由于有这个模式的核心更新使用它与一个5.5数据库根本不会工作造成两个主要的错误:不能作为root用户删除权限的MySQL用户删除
尝试访问与“root”@“localhost”不同的'root'@'127.0.0.1'服务器。 然后发出一个命令来创build用户'root'@'localhost'并授予它所有的权限
您应该删除多余的root @ localhost条目。 这可以通过Mircea Vutcovicibuild议的“–skip-grant-tables”来完成,也可以在正常的会话(本地或远程)中完成,如果仍然可以作为root访问的话。
尝试这样的事情:
#get to admin tables use mysql #confirm the differences for the root entries select host, user, grant_priv from user where user = 'root'; #adjust as needed delete from user where user = 'root' and host = 'localhost' and grant_priv = 'N'; #commit flush privileges;
更新 :根据你显示的selecttesting的输出,你不会看到有多个根与不同grant_privs的问题。 因此,如果Mircea Vutcovici给出的build议不能解决您的问题,我可能会猜测真正的问题确实存在于root privs。 也许你正在做一些不正确的事情,比如尝试连接到错误的主机或使用保存在configuration文件(.my.cnf)中的密码。 换句话说,你可能需要更具体。
SHOW GRANTS FOR 'root'@'localhost';键入SHOW GRANTS FOR 'root'@'localhost'; 给我看了一些模糊的密码,所以我在另一个系统(使用root作为用户名和相应的密码)上使用HeidiSQLlogin到该系统的mysql并键入
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY 'thepassword' WITH GRANT OPTION;
当我回到系统并login使用时,它工作
mysql -uroot -pthepassword;
以下是我在Windows系统上所遵循的几个步骤
use mysql;select数据库use mysql; UPDATE mysql.user SET PASSWORD=PASSWORD('MyNewPass') WHERE USER='root';
FLUSH PRIVILEGES;
GRANT ALL ON *.* TO 'root'@'localhost';
从用户注销,然后使用上面为我工作的步骤的新密码login到根