首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >每周使用PHP对MySQL数据进行归档

每周使用PHP对MySQL数据进行归档
EN

Stack Overflow用户
提问于 2011-04-13 03:39:52
回答 3查看 4.2K关注 0票数 2

我有一个MySQL DB,它每周的某一天在给定的时间(大约120万行)从某个源接收大量数据,并将其存储在,我们称之为“活动”表中。

我希望将“活动”表中的所有数据复制到归档中,并截断活动表,以便为下一周到来的下一个“当前数据”腾出空间。

有没有人能建议一个有效的方法来做这件事。我真的在努力避免-- insert into archive_table select * from live --。我希望能够运行此归档程序使用PHP,所以我不能使用Maatkit。有什么建议吗?

编辑:另外,存档的数据需要易于访问。因为每次插入都有时间戳,所以如果我想查找上个月的数据,我可以在归档中搜索它

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-04-13 04:33:49

诡计多端:

不要复制记录。这太耗时了。

相反,只需重命名活动表,然后重新创建:

代码语言:javascript
复制
RENAME TABLE live_table TO archive_table;
CREATE TABLE live_table (...);

它应该是相当快和无痛的。

编辑:如果你想要一个每个循环周期的存档表,我描述的方法效果最好。如果您想维护单个存档表,可能需要更复杂一些。但是,如果您只想对历史数据进行即席查询,那么您可能只需要使用UNION。

如果您只想保存几个周期的数据,则可以以类似于日志轮换的方式多次执行重命名操作。然后,您可以定义一个视图,将存档表合并为一个很大的表。

EDIT2:如果你想维护自动增量的东西,你可能希望尝试一下:

代码语言:javascript
复制
RENAME TABLE live TO archive1; 
CREATE TABLE live (...); 
ALTER TABLE LIVE AUTO_INCREMENT = (SELECT MAX(id) FROM archive1);

但不幸的是,这样做行不通。但是,如果您使用PHP来驱动这个过程,那么很容易解决这个问题。

票数 2
EN

Stack Overflow用户

发布于 2011-04-13 03:44:15

编写脚本以作为cron作业运行,以执行以下操作:

  1. 从“活动”表转储归档数据(从shell使用mysqldump可能更有效) script)
  2. Truncate活动表
  3. 修改转储文件中的INSERT语句,以便表名引用存档表而不是活动表
  4. 将归档数据追加到存档表(同样,可以通过shell脚本从转储文件导入,例如mysql dbname < dumpfile.sql)
票数 1
EN

Stack Overflow用户

发布于 2011-04-13 03:47:51

这将取决于您在归档数据后对数据所做的操作,但是您是否考虑过使用MySQL复制?

您可以将另一台服务器设置为复制从服务器,一旦复制了所有数据,请在其前面使用SET BIN-LOG 0执行删除或截断操作,以避免该语句也被复制。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5640625

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档