无法诊断我的MySQL root用户问题

时间:2009-09-14 22:34:47

标签: php mysql phpmyadmin mamp

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

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

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

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

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

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

非常感谢你的帮助。

4 个答案:

答案 0 :(得分:5)

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

我看到它as a bug as far back as 2006,但是最后一个条目没有在skip-grant-tables模式下可以执行的命令,所以我仍然没有解决问题。

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

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

答案 1 :(得分:1)

尝试使用--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;

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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

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

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