ubuntu,mysql如何确定主机名?

这是具体的问:我有在运行在这个虚拟机和主机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(); 

这是什么告诉你:

  • USER()报告你如何尝试在MySQL中进行身份validation
  • CURRENT_USER()报告你如何被允许在MySQL中进行身份validation

当你得到错误

拒绝访问用户“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,以便知道这些更改。