无法连接远程MySQL服务器

5
我有一台服务器试图连接到一个托管在本地网络外的MySQL数据库。我试图使用公共IP地址进行连接。
在命令行中测试连接时,我收到了以下错误信息:
ERROR 2003 (HY000): Can't connect to MySQL server on '[ip_address]' (146)
PDO也给出了同样的错误。无论如何,在本地和同一网络内连接都正常工作,这让我感到困惑。
MySQL服务器的bind-address已经被修改以接受远程连接。MySQL服务器还有一个具有适当权限设置的用户。但无论如何,看起来我甚至不能开始建立连接。
是否有一个my.cnf值需要添加,以便MySQL接受来自本地网络外部的请求?
谢谢。
5个回答

6

需要检查的事项:

  1. MySQL是否在公共IP上监听(听起来你已经完成了)
  2. MySQL是否在标准端口上监听/连接相同的端口。
  3. 远程机器上是否运行着防火墙?(通常在发行版中打包)防火墙是否配置为允许对该端口的连接?
  4. 如果远程机器在另一个网络内部,您的连接和终端机器之间是否进行了网络地址转换(NAT)-如果是,是否将MySQL端口配置为通过。
  5. my.cnf文件是否配置为允许从除localhost 127.0.0.1 IP之外的任何地方连接-虽然您更有可能获得拒绝访问的响应,而不是无法连接。

嗨Rudi,谢谢您的回复!... 1.是的,2.3306,3.据我所知没有防火墙,4.没有NAT,直接IP,5.bind-address已设置并删除了skip-networking。 - Julian H. Lam
在这种情况下:ping <mysql服务器IP> - 检查是否有响应。 telnet <mysql服务器IP> 3306 - 应该输出一个版本字符串(它不会正常工作,但它会给你一个线索,如果它正在运行)。还要检查守护程序是否实际在服务器上运行(具体取决于win/linux)。 - Rudu
答案中有一些好的观点,Rudu,谢谢。问题最终证明是我自己的一个愚蠢的配置变量——我将“bind-address”设置为内部IP,并期望它在外部工作。这算是星期五下午疲惫的一个教训... - Julian H. Lam
第二天看起来似乎很明显 - 但你可能会花费数小时来查找这样的错误。很高兴它已经解决了。 - Rudu

3

为该特定主机的用户授予权限。或者,使用%(即通配符)作为主机,可以从任何主机访问它。


嗨,Sandesh - 你相信我几年前就解决了这个问题吗?请查看上面的答案以了解出了什么问题。 :) 另外,欢迎来到StackOverflow! - Julian H. Lam

2

我最终尝试通过命令行连接:mysql --host=foobar,甚至这也不起作用,这让我有了一点头绪。 - Julian H. Lam

0

使用以下命令为所有用户授予权限:

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

现在打开你的 "my.cnf" 文件。对于 Ubuntu,请使用(sudo find / -type f -name "my.cnf")

注释掉 "bind-address = 127.0.0.1" 这一行

使用以下命令重启 MySQL,对于 Ubuntu,请使用 "sudo service mysql restart"


执行这些命令后,我无法以root身份登录。 - Mohit

0

我遇到了同样的问题,大多数解决方案如下:

  1. 更改配置文件以允许端口/地址
  2. 通过防火墙允许程序/端口
  3. 检查远程连接的IP / URL

但在我的情况下,数据库托管在远程服务器上,路由器需要端口转发。

  1. 进入您的路由器设置(打开浏览器并输入192.168.0.1或类似地址)
  2. 输入凭据(通常为admin/admin或admin/password)
  3. 在菜单中找到“转发”或“端口转发”
  4. 创建新条目(在我的情况下,我使用postgres,因此使用TCP的5432端口)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接