这里有一个有趣的问题,它似乎不属于我读过或搜索过的任何 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 规则(它是外部防火墙),我无法弄清楚还有什么原因导致这种情况。
这个有问题的脚本在最新的系统更新之前运行良好。
现在,我只需将脚本更改为通过本地主机进行连接,但我真的很想知道为什么它会中断,原因有二:
可能还有其他使用 192.168.0.40 连接的脚本不经常运行,现在已损坏。审核所有这些脚本将花费比我目前想要投入的更多时间。
我很好奇,想知道它为什么坏了,这样我才能正确地修复它。
有什么帮助吗?
答案1
如果您确实想远程访问服务器,请打开适当的防火墙端口(默认 3306)。
答案2
确保 MySQL 用户有从 192.168.0.40 连接的权限。
答案3
我遇到了同样的问题,只能连接到 localhost 或 127.0.0.1 上的数据库,我尝试了所有方法。我打开了防火墙端口,尝试编辑 my.ini 网络配置,等等。
解决方案(这些是我最终修复它所采取的步骤):
- 打开 MySQL Workbench
- 以管理员身份登录数据库
- 导航至顶部的服务器菜单
- 选择用户和权限
- 确保您要连接的所有帐户在‘限制主机匹配:’部分都选择了 %。
我将 root 用户设置为 localhost,我认为这是默认设置。将 localhost 改为 % 可以解决问题。
再次强调,这一切都假设您的防火墙端口是打开的,并且您已经尝试了所有其他方法。