这是具体的问题:我在 parallels 中的 ubuntu 上运行 apache,并且在此 VM 和主机 OS X 上运行 mysql。由于我尝试在本地模拟我的生产环境,因此我连接到 OS X 上的远程 mysql 服务器。我为一些客户端成功地执行了此操作,现在我有了一个新的客户端。
我的 ubuntu hosts 文件中有 umhef.ca、osx 和 dom.biz。当我从 ubuntu ping OS X 时,它会报告成功并显示正确的 IP。我的 drupal 设置文件将主机设置为“osx”,将用户设置为“rootd”。用户在 OS x mysql 服务器上设置了此数据库的权限。我怎么知道的?我可以看到在 mysql 中成功设置的其他用户,他们似乎与此用户相同。
这是帮助我排除出现此错误的原因的背景信息:PDOException:SQLSTATE [HY000] [1045] 拒绝用户“rootd”@“umhef.ca”访问(使用密码:是)
这个主机到底是怎么来的?它是合法主机,因为它和其他主机都指向 Os x VM。因此,为了排除故障,我尝试从 ubuntu 执行此操作:
mysql --host=osx --user=rootd --password=mypassword
Access denied for user 'rootd'@'umhef.ca' (using password: YES)
我尝试注释掉我的 ubuntu hosts 文件,但为什么 ubuntu 忽略了我的主机参数?我还应该使用什么来解决这个问题?谢谢,sam
答案1
如果你可以以 root@localhost 身份登录 MySQL,请运行以下命令
SELECT USER(),CURRENT_USER();
这告诉你什么:
当你收到错误时
拒绝用户“rootd”@“umhef.ca”访问(使用密码:是)
主机部分由表决定mysql.user
。MySQL 有一种古怪但有条不紊的用户身份验证方式。闲暇时,您可以阅读我的 DBA StackExchange 帖子MySQL 错误:拒绝用户‘a’@‘localhost’访问(使用密码:是)了解其工作原理。
无论如何,为了切入正题,这样做
SELECT user,host FROM mysql.user;
这将为您提供所有可能的CURRENT_USER()
值(允许您连接到 MySQL 的方式)。我猜您尝试以 身份登录,rootd@osx
但您可能没有 中的条目mysql.user
。换句话说,如果您运行
SELECT CONCAT(user,'@',host) userhost FROM mysql.user
WHERE user='rootd' AND host='osx';
你什么也得不到。如果你跑
SELECT CONCAT(user,'@',host) userhost FROM mysql.user WHERE user='rootd';
您可能会看到[email protected]
。如果没有,那么 mysqld 会假设您以这种方式进入,并且 中不存在匹配的身份验证mysql.user
。
如果您在操作系统中做了任何主机更改,请务必重新启动 mysqld 以便它可以知道这些更改。