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

我已经在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服务器已消失”错误 的全部内容, 来源链接: utcz.com/qa/405315.html

回到顶部