0

我的 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

4 回答 4

5

我遇到了同样的问题:只有一个用户帐户可以通过管理控制台或查询浏览器访问 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 功能,您也可以登录到本地控制台。

于 2010-09-23T16:41:41.020 回答
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;
于 2009-09-15T15:05:40.130 回答
1

您的评论显示了您当前的 root 权限(没有 --skip-grant-tables)。'root'@'%' 没有任何条目很好,默认情况下没有,您可以将其视为一种安全措施。

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

要修复它,您需要一个具有适当权限的用户。通常,您有一个用户'root'@'localhost'和一个'root'@'your-hostname'. 如果幸运的话,'root'@'your-hostname'还是可以的。公平地说,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.1or ,则通过 TCP/IP 连接your-hostname。如果 mysql 尝试通过套接字连接并且找不到套接字(因为您没有指定正确的位置),错误消息会提到 mysql 尝试找到套接字的位置。您的错误消息没有。我猜你的错误是网络错误。也许您已经使用该--skip-networking选项启动了 mysql-server,或者您的配置指定了不正确的绑定地址。您需要先解决该问题,否则您无法连接为'root'@'your-hostname'.

于 2010-04-08T08:51:10.317 回答
0

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

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

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

于 2010-04-07T22:25:55.813 回答