无法远程访问在Mac OS X上运行的MySQL服务器


11

我的工作计算机上运行的是MySQL服务器,该计算机运行Mac OS X Maverick。我想从家用计算机(也有Mac OS Maverick)访问它。

从终端,如果在1选项卡中,我SSH进入我的工作计算机,并且只让ssh会话坐在那里而不空闲,那么在另一个选项卡中,我可以访问MySQL服务器。

但是,如果不运行ssh会话,则会出现以下错误

错误2003(HY000):无法连接到“ SERVER_IP_ADDRESS”上的MySQL服务器(60)

我试图my.cnf通过注释掉绑定地址或将其分配给服务器来修改服务器上的文件,0.0.0.0但是它不起作用。

为什么会这样呢?如何配置服务器,使其无需在客户端上运行ssh即可进行远程访问?有人可以帮忙吗?


我在远程OS X上运行PostGIS时遇到了同样的问题... ssh在一个选项卡中打开时可以连接到数据库,但否则无法连接。我认为问题是当我未登录到远程服务器时,数据库服务器进程已暂停或未运行。
andybega 2015年

Answers:


20

今天,在OSX Yosemite上,我用最新的Homebrew更新的MySQL 5.7来解决这个错误,我对此一直心存感激。遵循有关StackOverflow和其他地方的建议,我在my.cnf所有都指定了文件的地方四处寻找bind-address=0.0.0.0。我什至按照这些说明删除并重新安装了MySQL,然后使用进行了重新安装brew install mysql。仍然不允许远程连接。

直到我运行ps -ax | grep mysql并注意到在启动命令中传递了绑定地址(因此覆盖了所有my.cnf文件)后,我才进行了更多挖掘,发现默认情况下Homebrew将MySQL绑定到127.0.0.1

编辑~/Library/LaunchAgents/homebrew.mxcl.mysql.plist更改--bind-address=127.0.0.1--bind-address=0.0.0.0解决我的问题(如果这不仅仅是开发机器,则应将其更改为特定的IP地址)。

我觉得这是我所咨询的大多数资源中都缺少的重要信息,因此希望在此处发布可以帮助其他人!

编辑:正如LeandroCR在注释中指出的那样,运行brew services restart mysql将使用默认文件覆盖LaunchAgents中的plist文件,从而导致MySQL再次神秘地拒绝连接。因此,比起我最初写的更好的建议如下:

  1. 编辑/usr/local/Cellar/mysql/<yourversion>/homebrew.mxcl.mysql.plist或替换--bind-address=127.0.0.1bind-address=*--bind-address=0.0.0.0请参阅关于绑定地址的MySQL文档
  2. 使用重启mysql brew services restart mysql

然后,MySQL从那时起应该继续接受非本地连接-大概在重新安装它之前。

编辑(2019年9月) Timothy Zorn指出,通过Homebrew安装并运行的MySQL 8.x不再会出现此问题,因此我上面写于2016年的答案可能仅与5.x有关。


3
另一个提示:如果您正在运行$ brew服务,请重新启动mysql,它将每次从LaunchAgents中清除plist文件。如果您要坚持更改,请编辑/usr/local/Cellar/mysql/<yourversion>/homebrew.mxcl.mysql.plist-还要Emma非常感谢!!!
LeandroCR '16

我已经使用安装了mysql 5.6 brew install mysql56,并且更改了~/Library/LaunchAgents/homebrew.mxcl.mysql56.plist/usr/local/Cellar/mysql56/5.6.32/homebrew.mxcl.mysql56.plist文件。但是仍然当我通过mysql启动时mysql.server start,ps命令显示bind-address=127.0.0.1。还有其他要编辑的文件吗?
xi.lin

据我了解,@ xi.lin mysql.server start绕过了LaunchAgent,因此它可能是从其他地方获取其设置的。要使用中的设置plist,您可能必须使用brew services restart mysql
Emma Burrows

@EmmaBurrows使用brew services restart mysql输出Successfully started mysql`(标签:homebrew.mxcl.mysql)`,但地址仍然是127.0.0.1 。实际上,我找不到其他东西homebrew.mxcl.mysql.plisthomebrew.mxcl.mysql56.plist
xi.lin

1
到目前为止,这已不再起作用。用于mysqld_safe为我运行的命令没有bind_address。而是在中指定/usr/local/etc/my.cnf
Timmmm

6

运行locate my.cnf找到文件/usr/local/etc/my.cnf

  1. 编辑该文件并设置 bind-address = 0.0.0.0
  2. 重启mysql: brew services restart mysql

5

我希望您需要使用'%'通配符创建用于远程访问的用户,并授予数据库的权限。

第1步:

在my.cnf(/server/9107/how-do-i-find-where-mysql-is-loading-its-config-from)中注释掉您的绑定地址

# bind-address        = xxx.xxx.xxx.xxx

并重新启动MySQL Server。

第2步:

然后,您需要向用户授予权限以进行远程访问

GRANT ALL ON *.* TO 'myuser'@'%' IDENTIFIED BY 'mypass';

请看一下如何启用远程连接。


我之前尝试过此设置(注释绑定地址),但没有用。我已经创建了一个用户并授予了所有权限。mysql> show grants for 'home'; | Grants for home@% | GRANT ALL PRIVILEGES ON *.* TO 'home'@'%' IDENTIFIED BY PASSWORD '...' WITH GRANT OPTION |
chepukha 2014年

你有防火墙吗?如果是这样,请禁用它。
Abdul Manaf 2014年

是的,关闭防火墙后我可以访问服务器。但是,可以将防火墙配置为允许远程访问sql服务器,而不是完全将其关闭吗?在服务器上的防火墙设置中,我将mysqld设置为“允许传入连接”
chepukha 2014年

您是否还在同一台计算机上安装了SQL Server?
Abdul Manaf 2014年

是的,我愿意。您是说SQL Server和防火墙在同一台计算机上?
chepukha 2014年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.