SQLSTATE [HY000] [2002]连接超时
得到这个在我的错误日志飘飞,想弄清楚这个问题:SQLSTATE [HY000] [2002]连接超时
[04-Oct-2014 13:25:42 America/Chicago] Failed to connect to database: SQLSTATE[HY000] [2002] Connection timed out [04-Oct-2014 13:25:42 America/Chicago] PHP Fatal error: Call to a member function prepare() on a non-object in /home/spconlin/public_html/spc_app/app/add_log.php on line 28
连接脚本:
<?php
if(!defined('INCLUDE_CHECK')) die('You are not allowed to execute this file directly');
// db config
$db_host = '127.0.0.1';
$db_database = '*****';
$db_user = '*****';
$db_pass = '*****';
//db connection
try {
$db = new PDO("mysql:host=$db_host;dbname=$db_database;charset=utf8", $db_user, $db_pass,
array(
PDO::ATTR_EMULATE_PREPARES => false,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, //PDO::ERRMODE_SILENT is default setting
PDO::ATTR_PERSISTENT => false
)
);
}
catch(PDOException $e) {
error_log("Failed to connect to database: ".$e->getMessage());
}
?>
我做了什么:
- 从'lo calhost”为127.0.0.1的连接
- 开关持久连接到假
之前做上述变化,以我的连接如上图所示我得到SQLSTATE[HY000] [2002] Resource temporarily unavailable
而非connection timed out
。
一些背景信息 - 特别是这个add_log.php脚本在实际使用时将信息添加到数据库,每秒最多几次。虽然差不多99%的时间这个特定的脚本在错误中被引用,但有时候其他脚本也是如此。我意识到脚本指向真的并不意味着什么,因为这不是错误发生的地方(它发生在连接而不是add_log.php脚本中),但它很奇怪,它几乎总是引用这个特定的文件,导致我相信这个问题经常被相继提出是这个问题的一部分。
DB是innodb。
这实际上是我的服务器和数据库或连接到它的人/计算机的问题?是否可能'他们'与'我'有不良联系,这是什么原因导致错误?
编辑:
难道是在我需要我的网页上的连接脚本需要它的方式?由于该文件经常被“击中”,它也会要求我的连接脚本与下面的行一样多。请注意,我正在使用$_SERVER['DOCUMENT_ROOT']
(可能有影响?)。
require $_SERVER['DOCUMENT_ROOT'].'/custom/functions/connect.php';
你应该在代码中改进的事情是在创建新代码之前检查连接。
您应该设法尽可能重用连接,而不是重新创建不必要的连接。
当太多的连接打开时,你会遇到像这样的错误,并且它不会很明显地被重现。
此外,当连接不成功时,您应该在准备之前退出。
此更改可能需要您在类的内部实现该逻辑。
你可以在此扩展吗?我正在使用pdo。原本我打开了持续的连接......我现在已经关闭了。其次,在pdo中,脚本结束时会自动关闭连接。所以,唯一打开的连接就是应该打开的连接。 – user756659 2014-10-06 04:15:35
如果有什么'ATTR_PERSISTENT'应该设置为true – meda 2014-10-06 04:16:44
这是我原来的 - 当这是我仍然得到相同的错误,但他们是'SQLSTATE [HY000] [2002]资源暂时不可用' – user756659 2014-10-06 04:19:01
你能用客户端登录到你的数据库吗?没有PHP?通常这是一个MySQL资源问题 – 2014-10-05 02:17:52
什么行代码是在add_log.php行28?它似乎并不是你所包含的代码的一部分。 – mschuett 2014-10-05 04:24:20
它与op中提到的不相关。错误发生在连接中,然后在下次使用$ db时触发。脚本没有“错误” - 它们工作正常 - 我无法自己复制此错误,并且它不会一直发生。 – user756659 2014-10-05 16:25:09