正确的方法来解决mysql最大用户连接错误

时间:2011-01-01 06:18:23

标签: php mysql sql

我正在使用 PHP MYSQL 数据库,因为它们都是开源的,易于使用。

当我逐个执行插入和/或更新 数百万行时,我遇到了问题

当此操作执行时,我得到了 MYSQL 错误:

'max_user_connections' active connections  

这是解决此问题的最佳方法。

我不想使用PHP以外的其他数据库或语言。

 connect_db();
   $query = "insert into table(mobno,status,description,date,send_deltime,sms_id,msg,send_type) values('".$to."','".$status."','".$report."','','".$timewsha1."','".$smsID."','','".$type."')";

    $result = mysql_query($query) or ("Query failed : " . mysql_error());

此查询将执行数千次。

然后服务器发出连接错误。

4 个答案:

答案 0 :(得分:7)

首先,尝试从您的托管服务器管理员了解MySQL数据库可用的最大连续活动连接数。这是最基本的&掌握有关知识的主要信息。

如果您的页面加载了相当长的时间并在页面加载后释放连接,那么应该没问题。当您的脚本需要很长时间从数据库中检索信息或维护连接时,会出现此问题 由于您正在执行数百万行的INSERT和/或UPDATE操作,因此您可能会遇到一些问题。

此外,如果您无法关闭脚本中的连接,则可能有人将加载页面,而不是在加载页面时关闭连接,它将保持打开状态。然后没有其他人可以使用该连接。 因此请确保在执行所有MySQL / SQL查询结束时,数据库连接已关闭。另外,请确保您的服务器提供超过250个连接,因为几乎所有服务器通常都有100个连接。

还要确保您没有使用持久连接(在使用内置函数“mysql_pconnect()”时可用),因为这将锁定用户,直到手动关闭连接。

希望它有所帮助。

答案 1 :(得分:2)

//this loop is for preparing the subquery for mutiple records

for(// this loop for getting data for  mutiple records){
$sub_query[] = "('".$to."','".$status."','".$report."','','".$timewsha1."','".$smsID."','','".$type."')";
}

$query = "insert into table(mobno,status,description,date,send_deltime,sms_id,msg,send_type) values ";
$query .= implode(',',$sub_query);
mysql_query($query );

答案 2 :(得分:0)

因此,远程应用程序调用此脚本,向其发送值列表,然后执行此查询一次,对吧?它不是在foreach或for或while循环中?当你说它会被执行数百万次时,你的意思并不代表我的意思。如果它处于循环中,则将db connect移动到循环外部,否则每次循环迭代时它都会尝试再次连接,并且还记得在脚本结束时调用mysql_close,以防万一。

答案 3 :(得分:0)

mysql_pconnect()将创建一个持久连接,如果您不想耗尽服务器的连接池,那么这就是您的选择。