我在My MySQL设置中遇到了MySQL root用户的问题,而我在生活中无法解决如何解决问题。似乎我以某种方式搞砸了root用户,现在我对数据库的访问非常不稳定。

作为参考,我在OS X上使用MAMP来提供MySQL服务器。我不确定这有多重要 - 我猜我无论做什么都需要一个命令行修复来解决它。

我可以像往常一样使用MAMP启动MySQL,并使用我为PHP应用程序创建的“标准”用户访问数据库。但是,我在MySQL GUI客户端和phpMyAdmin中使用的root用户只能访问“information_schema”。数据库,以及我手动创建的两个,并且可能(并且错误地)保留了权限。我的root用户无法访问我的15个左右的其他数据库。当我加载phpMyAdmin时,主屏幕显示:“Create new database:No Privileges”。

我当然在某个阶段使用MAMP对话框更改了root用户的密码。但是我不记得我是否做了其他可能导致这个问题的事情。我已经尝试过再次更改密码,问题似乎没有变化。

我也尝试使用命令行重置root密码,包括使用--skip-grant-tables手动启动mysql然后刷新privs,但是,似乎没有什么能解决这个问题。

我已经结束了我的想法,非常感谢来自这里的一位专家的一步一步的建议和诊断!

非常感谢你的帮助。

有帮助吗?

解决方案

这是因为MAMP和命令行mysql(以及除MAMP之外的所有mysql)都不同。

MAMP有自己内置的mysql,你无法通过命令行访问它,只能在phpmyadmin中构建。

这是我的经验,我有MAMP并使用其他mysql在rails和其他东西上使用ruby。

其他提示

我遇到了同样的问题:只有一个用户帐户通过管理控制台或查询浏览器访问mysql数据库。当我突然使用skip-grant-tables时,所有帐户都可以登录,包括root。

我早在2006年就看到它作为一个错误,但是最后一个条目没有在skip-grant-tables模式下可以执行的命令,所以我仍然没有解决问题。

有什么帮助我
这个答案类似于Ben Bakelaar 在上面的链接中描述的答案。当 my.ini 禁用名称解析标志(skip-name-resolve)时会出现问题。这会破坏mysql解析'localhost'的能力,而mysql.user表只有一个localhost / root的条目。

将mysql.user表的localhost条目更新为127.0.0.1,即使启用了skip-name-resolve功能,也可以登录本地控制台。

尝试使用--skip-grant-tables启动服务器,然后检查mysql数据库中的权限表:

select * from user where User='root';
select * from tables_priv where User='root';
select * from db where User='root';

您也可以尝试:

show grants for root@localhost;
show grants for root@'%';
show grants for root@'hostname';

进入后,您可以尝试授予root完全权限:

grant all privileges on *.* to root@localhost identified by 'password' with grant option;

您的评论会显示您当前的root权限(不使用--skip-grant-tables)。你没有“root”@'%'的任何条目都没关系,默认情况下你没有这个条目,你可以认为这是一个安全措施。

看起来你已经弄乱了'root'@'localhost'特权。 GRANT ALL PRIVILEGES ON。很奇怪。通常,您有类似 GRANT ALL PRIVILEGES ON *。* GRANT ALL PRIVILEGES on myDatabase.myTable 。您的 GRANT 未指定要授予其权限的数据库和/或表。我不知道你的客户是如何设法生产它的。我无法使用mysql命令行客户端(尝试空字符串,空格,任何类型的引号...)重现它,mysql拒绝GRANT语句(当然,这是正确的行为)。看起来MAMP正在做一些非常奇怪的事情。由于我不能像你那样重现 GRANT ,我不能说mysql如何解释它,但我想它已经在全局级别上设置了'N'的权限。

要修复它,您需要具有适当权限的用户。通常,您有一个用户'root'@'localhost'和一个'root'@'your-hostname'。如果你很幸运,'root'@'your-hostname'仍然没问题。 Afair,mysql连接的工作方式如下:如果你连接到 localhost ,你连接为'root'@'localhost'(不确定 127.0.0.1 ,我想它也是'root'@'localhost')。如果连接到 your-hostname ,则以'root'@'your-hostname'连接。如果此用户的权限仍然可以,您可以更新'root'@'localhost'的权限,您就完成了。

在您的评论中,您说您无法通过 127.0.0.1 进行连接,因为套接字处于不寻常的位置。我想你误解了这个错误。如果连接到'localhost',则通过套接字连接IIRC,但如果连接到 127.0.0.1 your-hostname ,则通过TCP / IP连接。如果mysql尝试通过套接字连接并且找不到套接字(因为您没有指定正确的位置),则错误消息提到mysql尝试查找套接字的位置。您的错误消息没有。我猜您的错误是网络错误。也许您已经使用 - skip-networking 选项启动了mysql-server,或者您的配置指定了错误的绑定地址。您需要先修复它,否则您无法以'root'@'your-hostname'连接。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top