【问题标题】:MYSQL looses connection when doing bulk insertsMYSQL 在进行批量插入时失去连接
【发布时间】:2013-01-29 18:13:11
【问题描述】:

我已将我的测试服务器和新的生产服务器从 php 5.2 升级到 5.4.7。 此外,在 PHP 代码中,我将连接到 mysql 数据库的旧方式替换为新方式(因此,我使用 mysqli_connect() 方法代替 mysql_connect()。这是因为旧方式将从 PHP 4.5 版开始被弃用。

一切似乎都工作正常并且经过了很好的测试 - 我想,但我刚刚发现在执行批量单个插入查询时 mysql 连接挂起。这发生在作为生产服务器(Centos Linux)的测试服务器上。所以 PHP 确实可以很好地建立连接,只有在进行批量插入时,连接才会中途丢失。

测试服务器(Windows XP,使用 XAMPP)给出错误信息:

mysqli_connect():(HY000/2002): 每个socket地址只使用一次 (协议/网络地址/端口)通常是允许的

在 linux 机器上我收到错误消息:

mysqli_connect():(HY000/2003):无法连接到 MySQL 服务器 '127.0.0.1'(99)

我基本上在做的是:

While Loop 查询结果

{

$query="插入(a,b,c,d)值(1,2,3,4)";

query_execute($query);

}

我认为问题在于我正在执行许多插入的事实;大约 100.000 个单独的插件。我没有使用持久的 mysql 连接。

我不知道是什么原因造成的(mysql、PHP、服务器本身)?

添加: 运行/执行查询的代码(简化)类似于:

//the database connection class 
class database($query)
{    
    public function setup_connection() { 
        $this->link=mysqli_connect('localhost', 'my_user', 'my_password', 'my_db');
    } 

    public function execute_query($query){
        mysqli_query($this->link, $query);
    }
}

//a regular php page using the class 

$obj_db1=new database($query);

while($obj_db1->loop()) 
{
    $obj_db_insert=new database($query);
}

【问题讨论】:

  • 如果 query_execute 是一个自定义函数,您可以编辑您的问题以包含相应的代码吗?
  • 当你知道会有批量插入时使用持久连接。 TIME_WAIT 会影响 TCP 连接吗?
  • 我刚刚编辑了代码来解释连接数据库的方式。请记住,这种方法多年来一直有效,但突然不再有效,这似乎很奇怪。

标签: php mysql mysqli


【解决方案1】:

确保在您的插入代码中您不是每次都打开与数据库的新连接。

根据您刚刚发布的代码,我的猜测是正确的,

让你的类如下所示:

class database

{

public function setup_connection() {...}

public function execute_query($query){...}

public function close_connection(){...}
}

然后在通话中使其如下所示:

$db = new database();
$db->setup_connection();

//execute your queries as much as you want ...
//loop start
$db->execute_query($query);
//loop end 

// close connection 
$db->close_connection();

【讨论】:

  • 嗨,我已经稍微修改了初始消息以澄清使用的代码。在添加的示例中,如果我在 while 循环 $obj_db_insert=new database($query) 中创建一个类的新实例,不应该简单地替换旧连接吗?
猜你喜欢
  • 1970-01-01
  • 2011-07-28
  • 1970-01-01
  • 2021-08-04
  • 2013-04-25
  • 2013-09-12
  • 2014-05-04
  • 2019-02-11
相关资源
最近更新 更多