每周使用PHP归档MySQL数据

问题描述

| 我有一个MysqL数据库,该数据库每周在给定的时间(大约120万行)在每周的某一天每周一次从源中接收大量数据,并将其存储在“实时”表中。 我想将所有来自“活动”表的数据复制到存档中,并截断活动表以为下周的下一个“当前数据”腾出空间。 任何人都可以建议一种有效的方法。我真的在努力避免-插入live_中的select *。我希望能够使用PHP运行此存档器,因此我无法使用Maatkit。有什么建议么? 编辑:此外,存档的数据需要易于访问。由于每个插入都带有时间戳,因此如果我要查找上个月的数据,我可以在存档中进行搜索     

解决方法

偷偷摸摸的方式: 不要复制记录。太久了 相反,只需重命名活动表,然后重新创建:
RENAME TABLE live_table TO archive_table;
CREATE TABLE live_table (...);
它应该非常快速且无痛。 编辑:如果您要每个旋转周期的存档表,我描述的方法效果最好。如果要维护单个存档表,则可能需要增加技巧。但是,如果您只想对历史数据进行临时查询,则可以只使用UNION。 如果只想保存几段时间的数据,则可以执行几次重命名操作,其方式类似于日志轮换。然后,您可以定义一个视图,将存档表UNION合并为一个大的honkin \'表。 EDIT2:如果您想维护自动增量的东西,您可能希望尝试:
RENAME TABLE live TO archive1; 
CREATE TABLE live (...); 
ALTER TABLE LIVE AUTO_INCREMENT = (SELECT MAX(id) FROM archive1);
但可悲的是,这行不通。但是,如果您使用PHP驱动该过程,则很容易解决。     ,编写脚本以作为cron作业运行以: 从\“ live \”表中转储存档数据(使用Shell脚本中的mysqldump可能更有效) 截断实时表 修改转储文件中的INSERT语句,以便表名称引用存档表而不是活动表 将存档数据追加到存档表(再次,可以仅通过shell脚本从转储文件导入,例如mysql dbname