我有一个运行 PHP 的 apache web 服务器。我正尝试从 apache 服务器连接到运行 mysql 服务器的数据库服务器。以下是现有设置的简要说明。
- Apache 服务器:RHEL 5.5;PHP 5.3.2
- 数据库服务器:Ubuntu 10.04 64位;mysql服务器版本5.1
- 没有防火墙规则限制这两台机器之间的连接。无论是在我们的硬件防火墙中还是在 iptables 中。
- /etc/mysql/my.cnf 将 bind-address 设置为机器的 ip。
- skip-networking 被注释掉,即被禁用。
- mysql 正在运行,位于标准端口 3306 上
- /var/run/mysqld/mysqld.sock 归 mysql 所有
- 我可以本地连接到 mysql
以下是我的php连接脚本:
<?php
$host="555.555.55.55";
$user="some_user";
$pass="some_pass";
$conn = mysql_connect($host, $user, $pass);
if ($conn === FALSE) { echo mysql_error(); }
else { echo 'Connected'; mysql_close($conn); }
?>
尝试在 apache 服务器上托管的浏览器中执行 php 脚本只会产生:“无法连接:无法连接到‘555.555.55.55’上的 MySQL 服务器 (4)”
有什么建议吗?谢谢。
答案1
我们将机器的 IP 更改为我们机构内的其他 IP 范围。从私有范围更改为公共 IP。它现在可以连接。我们现在正在调查这个私有范围。感谢大家的帮助!
答案2
只是为了排除简单的事情,你试过ps -A | grep mysqld
在 Ubuntu 服务器上运行吗?如果这里没有文本输出,则服务器实际上没有运行。
mysql -u root -p
您可以通过从 Ubuntu 机器上的终端运行来连接到 MySQL 服务器吗?如果可以,您也可以mysql -u root -p -h <ubuntu-server-ip>
从 Red Hat 服务器进行连接吗?
您的 PHP 脚本看起来很好,但就其价值而言,您通常希望在检查 $conn 变量时进行更明确的比较,例如:
if ($conn === FALSE) { echo mysql_error(); } else { echo 'Connected'; }
此外,如果$conn
设置为FALSE
,则mysql_close($conn)
在底部调用会浪费服务器时间(mysql_close(FALSE)
会占用时间来默默返回 FALSE);您只需要释放一个有效的资源标识符,在这种情况下(非持久连接)您不需要显式释放资源。