【问题标题】:MySQL server has gone away during crawling in Perl在 Perl 中爬行期间 MySQL 服务器已消失
【发布时间】:2012-05-02 13:24:55
【问题描述】:

我使用 WWW::Mechanize 库来获取 URL 的内容并将它们的数据保存到 mysql 表中。但是当页面的内容太大时,它会给出这个错误信息:

DBD::mysql::st 执行失败:MySQL 服务器已在 F:\crawling\perl_tests\swc2.pl 第 481 行。

例如,当我尝试提取此页面的内容时,它会抛出此错误:https://www.e-conomic.com/secure/api1/EconomicWebService.asmx?wsdl

我也加了这段代码,但是还是不行

$connection->{max_allowed_packet}=1000000000;

【问题讨论】:

    标签: mysql perl web-crawler www-mechanize


    【解决方案1】:

    您使用的是最新的 DBI 和 DBD::mysql 吗?它应该启用 mysql_auto_reconnect。

    如果你在forks下使用mysql,可能需要设置

    $dbh->{InactiveDestroy} = 1;
    

    【讨论】:

      【解决方案2】:

      您可能想查看DBIx::Connector。来自文档:

      您可以将连接存储在应用中的某个位置 轻松访问它,只要它仍在范围内,它就会尝试 维护数据库连接是最困难的。即使跨叉 (尤其是 DBI 1.614 和更高版本)和新线程,甚至调用 到 $conn->dbh->断开连接。当你不再需要它时,放手吧 超出范围,数据库连接将被关闭。

      【讨论】:

        【解决方案3】:

        尝试添加

        max_allowed_packet=32M
        

        在 MySQL 配置文件中

        【讨论】:

          猜你喜欢
          • 2018-05-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-05-25
          • 2011-06-07
          • 2010-12-20
          相关资源
          最近更新 更多