无法使用 IP 地址连接到本地 Mysql,但可以从远程服务器连接

无法使用 IP 地址连接到本地 Mysql,但可以从远程服务器连接

这里有一个有趣的问题,它似乎不属于我读过或搜索过的任何 mysql 连接问题:在 Ubuntu 12.04 机器上,我有一些系统更新等待安装,我今天晚上处理了这些问题。安装后,我开始在系统日志中看到一些错误,抱怨某个特定的 php 脚本无法再连接到机器上的 mysql 实例。以下是具体错误:

PHP Warning:  mysql_connect(): Can't connect to MySQL server on '192.168.0.40' (4) 

现在,服务器的 IP 地址是 192.168.0.40,并且我已检查以确保 mysql 在 0.0.0.0 上监听,以便我可以使用“localhost”或“192.168.0.40”进行连接。

事情变得奇怪了:从本地机器,如果我尝试以下操作:

mysql -uroot -p -h192.168.0.40

我收到此错误:

ERROR 2003 (HY000): Can't connect to MySQL server on '192.168.0.40' (110)

我检查了一下,错误 110 表示操作系统超时,错误 2003 是 mysql 通用的“无法连接”错误。这表明它没有用户的权限。

但是,如果我从远程机器(例如,从 192.168.0.30)执行同样的事情,我可以直接登录而不会出现任何问题。

此外,本地计算机上使用主机“localhost”而不是“192.168.0.40”连接到 mysql 的其他脚本也可以顺利连接。此外,我可以通过命令行和 php 脚本顺利通过 mysql 套接字进行连接。

因此,这感觉像是本地盒子上的某种网络问题,但是这个盒子上没有 iptables 规则(它是外部防火墙),我无法弄清楚还有什么原因导致这种情况。

这个有问题的脚本在最新的系统更新之前运行良好。

现在,我只需将脚本更改为通过本地主机进行连接,但我真的很想知道为什么它会中断,原因有二:

  1. 可能还有其他使用 192.168.0.40 连接的脚本不经常运行,现在已损坏。审核所有这些脚本将花费比我目前想要投入的更多时间。

  2. 我很好奇,想知道它为什么坏了,这样我才能正确地修复它。

有什么帮助吗?

答案1

如果您确实想远程访问服务器,请打开适当的防火墙端口(默认 3306)。

答案2

确保 MySQL 用户有从 192.168.0.40 连接的权限。

答案3

我遇到了同样的问题,只能连接到 localhost 或 127.0.0.1 上的数据库,我尝试了所有方法。我打开了防火墙端口,尝试编辑 my.ini 网络配置,等等。

解决方案(这些是我最终修复它所采取的步骤):

  • 打开 MySQL Workbench
  • 以管理员身份登录数据库
  • 导航至顶部的服务器菜单
  • 选择用户和权限
  • 确保您要连接的所有帐户在‘限制主机匹配:’部分都选择了 %。

我将 root 用户设置为 localhost,我认为这是默认设置。将 localhost 改为 % 可以解决问题。

再次强调,这一切都假设您的防火墙端口是打开的,并且您已经尝试了所有其他方法。

参考图1

参考图2

相关内容