这是具体的问:我有在运行在这个虚拟机和主机OS X上的平行和MySQL的Ubuntu上运行的Apache。因为我尝试在本地模拟我的生产环境,我连接到OS X上的远程MySQL服务器。成功为一些客户,现在我有一个新的。
我在我的ubuntu主机文件中有umhef.ca,osx和dom.biz。 当我从Ubuntu的平台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主机文件,但为什么是Ubuntu忽略我的主机参数? 我还应该使用什么来解决这个问题? thx,山姆
如果您可以以root @ localhost身份login到MySQL,请运行以下命令
SELECT USER(),CURRENT_USER();
这是什么告诉你:
当你得到错误
拒绝访问用户“rootd'@'umhef.ca”(使用密码:是)
主机部分由表mysql.user
确定。 MySQL有一个奇怪但有条不紊的方式进行用户authentication。 在你的业余时间,你可以阅读我的DBA StackExchange post MySQL错误:拒绝访问用户'a'@'localhost'(使用密码:YES)关于它的工作方式。
无论如何,要尝试切入,追求这一目标
SELECT user,host FROM mysql.user;
这会给你所有可能的CURRENT_USER()
值(你被允许连接到MySQL的方式)。 我的猜测是你正在试图login作为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
没有匹配的authentication。
如果您在操作系统中进行了任何主机更改,请务必重新启动mysqld,以便知道这些更改。