1

我有一个网站抓取脚本,它将数据存储到几个 MySQL 表中。主表中的记录是从其他记录中引用的。该脚本需要大约 5 个小时才能执行,但它总是在大约 70 分钟后停止工作(set_time_limit() 设置为 c)。我尝试从浏览器和 cron 运行它,结果是一样的。

由于脚本在随机时间停止,因此可能导致数据库不一致。可以存储主表记录,但不能使用主表中的 mysql_insert_id() 存储从表记录。

有没有比在运行脚本时从主表中删除最后一条记录以及从其他表中删除该行的所有引用记录更好的方法?

4

2 回答 2

2

您可以将对给定记录的所有查询包装在事务中,并在最后提交。这样,如果脚本在一组查询中途死亡,更改将被回滚并且数据将保持一致。

于 2012-05-04T18:35:14.713 回答
1

首先要做的事情:你检查过 mysql 连接的 TTL 吗?也许这就是导致问题的原因?

如果这个问题不断出现,您可能想看看使用 PDO 创建一个 db 适配器对象,您可以简单地使用:启动脚本,$db->beginTransaction();并通过提交更改来结束(如果一切顺利)$db->commit();

这种方法有很多优点,其中最主要的是$db->rollBack();万一出现问题。另一个优点是,当 MySQL 端确实发生错误时,PDO 类会抛出一个PDOException对象,因此您可以进行回滚,以确保不会将损坏的数据写入您的数据库并以某种方式退出,类似于 thisdie($e->getMessage());看看什么完全出错了。

检查PDO 手册页以获取信息

于 2012-05-04T18:37:08.813 回答