5

我已经阅读了 SO 和其他一些地方的许多线程,并且无法修复我在 MAMP 中的 mysql 安装。

背景。前几天我对我的 root 用户进行了更改,试图让本地服务正确连接。重新启动我的机器后,mamp 中的 phpmyadmin 不再显示我的任何数据库,并显示“无权限”来创建数据库。我尝试了很多方法来恢复我在这里和其他地方阅读的权限,但无济于事。--skip-grant-tables 似乎不起作用。在 shell 中以 root 身份连接我没有 localhost 的权限,但我使用 127.0.0.1 的权限。

show grants for root@localhost;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION

我安装了全新安装的 MAMP 并复制到我的数据库中。虽然它有效,但我遇到了数据库未显示所有表的实例。

所以我必须解决两个问题之一。我要么必须修复原始安装,要么让它在我的新 mamp 安装中显示我的 dbs 的所有表。

在这里学到的教训是不要偷懒,不要在本地使用你的 root 用户,只需创建另一个登录名。

更新当我连接为:

/Applications/MAMP/Library/bin/mysql -uroot -h127.0.0.1 -p
mysql> SHOW GRANTS FOR 'root'@'localhost';
+------------------------------------------------------------------------+
| Grants for root@localhost                                              |
+------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION    | 
| GRANT ALL PRIVILEGES ON `db`.* TO 'root'@'localhost' WITH GRANT OPTION | 
+------------------------------------------------------------------------+

但是当我连接为:

/Applications/MAMP/Library/bin/mysql -uroot -hlocalhost -p
mysql> SHOW GRANTS FOR 'root'@'localhost';
ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'mysql'
mysql> SELECT user();
+----------------+
| user()         |
+----------------+
| root@localhost | 
+----------------+
mysql> SELECT current_user();
+----------------+
| current_user() |
+----------------+
| @localhost     | 
+----------------+

因此,当我通过 IP 或套接字作为 localhost 连接时,我不知何故没有以 root 身份登录。我觉得这很混乱?

4

1 回答 1

10

经过几天的努力,我发现了解决方案。因为 MAMP 安装与标准 mysql 安装有点不同,所以花了一些时间将这些部分组合在一起。我仍然不明白一些细节,但我们开始吧。

即使我以 root 身份登录,但现实是我是上述和 ''@'localhost' 指示的匿名用户。所以显然存在权限错误,它包含三个部分:用户名、密码和主机。所以我的 root 帐户发生了一些变化(我相信是密码),但是整个事情的反应有点不稳定,因为我没有告诉我我的密码和用户名组合不正确,而是在没有权限的情况下登录。我相信我通过运行一些类似下面的命令来加剧这种情况。

mysqladmin -u root password 'password'

最后这就是我所做的,我想明确这是在 OS X 上安装 MAMP 的说明,尽管我确信它们可以很容易地适应 Windoz。

非常感谢这个线程帮助我了解如何解决这个问题。

  1. 打开活动监视器。
  2. 关闭 MAMP
  3. 确保在活动监视器中关闭 mysql。现在,您可能会看到一个 _mysqld 进程正在运行,它可能是默认的 OSX mysql 运行。
  4. 运行以下命令,将端口号替换为您使用的端口号。这将启动 mysql 减去用户权限。

    /Applications/MAMP/Library/libexec/mysqld --skip-grant-tables --port=8889 --socket=/Applications/MAMP/tmp/mysql/mysql.sock

  5. 在您的控制台中登录到没有凭据的 mysql。

    mysql

  6. 运行以下命令。

    FLUSH PRIVILEGES;
    GRANT ALL ON *.* TO 'username'@'localhost' IDENTIFIED BY 'password';
    
  7. 关闭 mysqld 并在不使用 skip-grant-tables 选项的情况下重新启动它

  8. 登录到 mysql 以确认一切正常。

  9. 您还需要修复您的 phpmyadmin。出于某种原因,我想以此作为开头,我不明白这些更改不会快速传播,而是突然开始工作。

    进入 /Application/MAMP/bin/phpMyAdmin/config.inc.php 并为新创建的登录输入正确的凭据。确保它们准确无误,包括主机。

  10. 最后在 phpmyadmin 工作后进入 mysql.user 表,看看哪里出了问题。了解发生了什么问题很重要。

关于上面发生的一些事情,我想澄清一下,比如为什么 MAMP 的 phpmyadmin 凭证更改不能立即生效。

希望这一切都有帮助!

于 2012-10-18T22:56:54.667 回答