当前位置: 首页 > 面试题库 >

解决“ MySQL服务器已消失”错误

伍捷
2023-03-14
问题内容

我已经在PHP中编写了一些代码,这些代码从.edu域返回html内容。这里简要介绍:PHP中有关Web爬网程序的错误

当要爬网的链接数量很少(大约40个URL)时,该爬网程序运行良好,但是在此数量之后我收到“ MySQL服务器已消失”错误。

我将HTML内容作为长文本存储在MySQL表中,但我不明白为什么在插入至少40-50次后错误会到达。

在这方面的任何帮助都将受到高度赞赏。

请注意,我已经更改了wait_timeout和max_allowed_pa​​cket以适应我的查询和php代码,现在我不知道该怎么办。请在这方面帮助我。


问题答案:

您可能倾向于通过在查询之前“ ping”
MySQL服务器来解决此问题。这是一个坏主意。有关为什么的更多信息,请查看以下SO帖子:在每次查询之前都应该ping
mysql服务器吗?

解决此问题的最佳方法是将查询包装在try/catch块中并捕获任何数据库异常,以便您可以适当地处理它们。这在长时间运行和/或守护程序类型的脚本中尤其重要。因此,这是一个非常基本的示例,使用“连接管理器”来控制对数据库连接的访问​​:

class DbPool {

    private $connections = array();

    function addConnection($id, $dsn) {
        $this->connections[$id] = array(
            'dsn' => $dsn,
            'conn' => null
        );
    }

    function getConnection($id) {
        if (!isset($this->connections[$id])) {
            throw new Exception('Invalid DB connection requested');
        } elseif (isset($this->connections[$id]['conn'])) {
            return $this->connections[$id]['conn'];
        } else {
            try {
                // for mysql you need to supply user/pass as well
                $conn = new PDO($dsn);

                // Tell PDO to throw an exception on error
                // (like "MySQL server has gone away")
                $conn->setAttribute(
                    PDO::ATTR_ERRMODE,
                    PDO::ERRMODE_EXCEPTION
                );
                $this->connections[$id]['conn'] = $conn;

                return $conn;
            } catch (PDOException $e) {
                return false;
            }
        }
    }

    function close($id) {
        if (!isset($this->connections[$id])) {
            throw new Exception('Invalid DB connection requested');
        }
        $this->connections[$id]['conn'] = null;
    }


}


class Crawler {

    private $dbPool;

    function __construct(DbPool $dbPool) {
        $this->dbPool = $dbPool;
    }

    function crawl() {
        // craw and store data in $crawledData variable
        $this->save($crawledData);
    }

    function saveData($crawledData) {
        if (!$conn = $this->dbPool->getConnection('write_conn') {
            // doh! couldn't retrieve DB connection ... handle it
        } else {
            try {
                // perform query on the $conn database connection
            } catch (Exception $e) {
                $msg = $e->getMessage();
                if (strstr($msg, 'MySQL server has gone away') {
                    $this->dbPool->close('write_conn');
                    $this->saveData($val);
                } else {
                    // some other error occurred
                }
            }
        }
    }
}


 类似资料:
  • 问题内容: 我在办公室运行服务器以处理一些文件,并将结果报告给远程MySQL服务器。 文件处理需要一些时间,并且过程中途结束,并出现以下错误: 我已经听说过MySQL设置 wait_timeout ,但是是否需要在办公室或远程MySQL服务器上更改它? 问题答案: 检查连接是否容易并在需要时重新建立连接可能会更容易。 有关此信息,请参见PHP:mysqli_ping。

  • 问题内容: 当我尝试来源大型SQL文件(大型查询)时出现此错误。 表中的任何内容均未更新。我尝试删除和取消删除表/数据库,以及重新启动MySQL。这些都不是解决问题的方法。 这是我的最大数据包大小: 这是文件大小: 当我尝试其他方法时… 问题答案: 将此行添加到文件中解决了我的问题。 当列的值较大会导致问题时,此功能很有用,您可以在此处找到说明。 在Windows上,此文件位于:“ C:\ Pro

  • 问题内容: 我正在执行将数百条记录插入MySQL数据库的操作。 完全插入176条记录后,我得到了该错误。 [PDOException] SQLSTATE [HY000]:一般错误:2006 MySQL服务器已消失 关于如何解决的任何想法? 该过程是使用PHP。 谢谢。 问题答案: 我敢说问题出在哪里。在共享主机上将其设置为30秒,在本地主机上将其设置为28800。 我发现可以为会话更改它,因此可以

  • 我经常遇到这个错误,以至于php_error日志文件每2秒增加1MB。并且站点非常慢。 我试着把这条线添加到wp-db.php 但这并没有帮助。 Web服务器是IIS 7,最新版本的mysql和wordpress

  • 问题内容: 我有一个脚本,每晚都会做很多事情。 它使用在循环中执行的PDO准备好的语句。 前几个运行良好,但是后来我发现它们都因以下错误而失败:“ MySQL服务器已消失”。 我们运行MySQL 5.0.77。 PHP版本5.2.12 该网站的其余部分运行正常。 问题答案: 该B.5.2.9。MySQL手册中的MySQL服务器已消失,列出了导致此错误的可能原因。 也许您处于其中一种情况?-特别是考

  • 问题内容: 今天我的一个网站开始展示 这是一个低流量的客户端站点,在Apache 2.2.9(Debian),PHP 5.2.6-1 + lenny3(使用CodeIgniter 1.7.1框架)和MySQL 5.0.51a下运行。我显然是对该错误进行了重新研究,但所有可能的解决方案都表明正在进行的大查询可能会超时并重置连接,或达到数据包限制。但是,事实并非如此,这是一个使用最简单查询处理的小型数