2011-05-06 114 views
4

今天我已经做了一些研究,但似乎没有解决这个问题。我最近从5.1.6升级到PHP 5.3.3,并且从5.0升级到5.5。之后,下面的代码生成一个错误说“无法连接到MySQL数据库”:PHP 5.3升级 - 无法连接到MySQL服务器

$connection = mysql_pconnect($dbhost, $dbusername, $dbpassword); 
if (!$connection) { 
    //Can't connect 
    die('Could not connect: ' . mysql_error()); 
    return; 
} 

并得到以下错误:

Warning: mysql_pconnect(): Can't connect to MySQL server on '199.59.157.103' (13) in /var/www/html/ws/Cust/customerWS_1_1.php on line 19 Could not connect: Can't connect to MySQL server on '199.59.157.103' (13)

我能够通过连接到远程主机命令行,并尝试了从重置密码到关闭IP表的所有内容。我有点茫然 - 所以任何帮助,将不胜感激。

回答

0

当你说“我可以通过命令行连接到远程主机”,你的意思是说,你正在连接到MySQL服务器REMOTELY?或者你正在连接到MySQL服务器并从MySQL服务器的命令行连接到它?如果是后者,有可能在升级到MySQL 5.5时意外停止了MySQL绑定/侦听公共IP。检查您的my.cnf

否则:您的PHP代码是否与您的MySQL服务器在同一台服务器上运行?您的权限可能会关闭。如果客户端只能访问从'localhost'连接的访问​​权限,那么MySQL的权限就是通过它的IP地址连接到MySQL服务器,反之亦然。

+0

当我说的远程连接 - 我的意思是从服务器托管我web内容我可以使用mysql -h 进行连接。如果这是MySQL没有正确听取的问题,它不应该允许任何远程连接,对吧? – tdk2fe 2011-05-06 19:07:17

+0

正确。从命令行连接时,是否使用脚本尝试使用的相同用户名和密码? – 2011-05-06 19:10:37

+0

是的。即使我硬编码连接信息,我仍然收到相同的错误。检查这种世俗的事情通常是我在做facepalm之前做的第一件事:) – tdk2fe 2011-05-06 19:12:16

0

首先您应该确保连接参数$dbhost,$dbusername$dbpassword是正确的。假设这些都是正确的,你应该检查你的mysql ini设置。我会假设bind-address被设置为127.0.0.1或localhost,但不是公共IP地址。

另请注意,如果您可以通过公共IP地址连接到MySQL,则存在安全风险。您可能想要查看不需要此类连接的解决方案。

1

有一个PHP 5.3 MySQL驱动程序限制与旧的认证方案哈希有关的数据库存储在以前的MySQL服务器。这可能会导致存储的密码出现问题,因此使用旧密码将无法访问数据库。

要解决该问题,您应该使用相同的登录名和相同的密码重新创建mysql用户。

2

我们与相同的错误消息类似的问题,“无法连接到MySQL数据库”,也许以下几点也将是有益的:

  • 检查MySQL用户权限(在本例并与外部连接,我们有旧的服务器的IP地址(允许访问)表)GRANT ALL PRIVILEGES ON tablename.* TO 'username'@'145.1.1.2'; - >重装后的权限变化(FLUSH PRIVILEGES;

  • 禁用SELinux的参数。在新的Plesk版本(> 10?)中,将自动启用... - >在/ etc/SELinux的/ config中改变这行:

    SELINUX=enforcingSELINUX=disabled 见进一步的细节:http://googolflex.com/?p=482