无法远程访问在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.1为bind-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.plist了homebrew.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.