如何允许远程连接到MySQL

我在local机器上安装了MySQL Community Edition 5.5 ,我想允许remote连接。 所以,我可以从外部来源连接。

我怎样才能做到这一点?

这在MySQL上是默认允许的。

默认情况下禁用的是远程root访问。 如果要启用它,请在本地运行此SQL命令:

  GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION; FLUSH PRIVILEGES; 

然后在Unix / OSX系统上find以下行并将其注释my.cnf文件中,该文件通常位于my.cnf上。 如果是Windows系统,可以在MySQL安装目录下find它,通常是C:\Program Files\MySQL\MySQL Server 5.5\ ,文件名将是my.ini

换行

  bind-address = 127.0.0.1 

  #bind-address = 127.0.0.1 

然后重新启动MySQL服务器( Unix / OSX和Windows )以使更改生效。

完成以上所有操作后,我仍然无法远程login,但Telnet到端口3306确认MySQL正在接受连接。

我开始看着MySQL中的用户,注意到有多个root用户使用不同的密码。

 select user, host, password from mysql.user; 

所以在MySQL我再次为root设置所有的密码,最终我可以以root身份远程login。

 use mysql; update user set password=PASSWORD("NEWPASSWORD") where User='root'; flush privileges; 

在我的情况下,我试图连接到分OS的远程MySQL服务器。 经过许多解决scheme(授予所有权限,删除IP绑定,启用networking)问题仍然没有得到解决。

事实certificate,在研究各种解决scheme时,我遇到了iptables,这让我意识到mysql端口3306不接受连接。

这里是我如何检查和解决这个问题的小记事。

  • 检查端口是否接受连接:
  telnet(mysql服务器ip)[portNo] 
  • 添加ip表规则以允许端口上的连接:
  iptables -A INPUT -i eth0 -p tcp -m tcp --dport 3306 -j ACCEPT 
  • 不build议这样做的生产环境,但如果你的iptablesconfiguration不正确,添加规则可能不会解决问题。 在这种情况下,应该这样做:
 服务iptables停止 

希望这可以帮助。

如果您的MySQL服务器进程仅在127.0.0.1或:: 1上进行侦听,则您将无法远程连接。 如果你在/etc/my.cnfbind-address设置,这可能是问题的根源。

您还必须为非localhost用户添加权限。

如果您的防火墙服务正在运行,那么检查防火墙端口3306是否也是开放的。

如果你从brew安装了MySQL,那么默认情况下只会在本地接口上侦听。 要解决此问题,您需要编辑/usr/local/etc/my.cnf并将bind-address127.0.0.1更改为*

然后运行brew services restart mysql

只是FYI我把我的头发与这个问题了几个小时..终于我打电话给我的托pipe服务提供商,发现在我的情况下使用云服务器,在控制面板1and1他们有一个辅助的防火墙,你必须克隆和添加端口一旦join,我就直奔了。

而对于OS X的人们来说,注意到bind-address参数通常是在启动的plist中设置的,而不是在my.ini文件中。 所以在我的情况下,我从/Library/LaunchDaemons/homebrew.mxcl.mariadb.plist删除了<string>--bind-address=127.0.0.1</string>

从我的经验来看,可以在/etc/mysql/mysql.conf.d/mysqld.cnf这个path下findconfiguration文件。

(我挣扎了一段时间才find这条路)