php - 每周使用 PHP 归档 MySQL 数据

标签 php mysql archiving mysql-backup

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

我想将“实时”表中的所有数据复制到存档中,并截断实时表,以为下周将出现的下一个“当前数据”腾出空间。

任何人都可以建议一种有效的方法来做到这一点。我真的想避免 -- insert into archive_table select * from live --。我希望能够使用 PHP 运行此存档器,因此我无法使用 Maatkit。有什么建议吗?

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

最佳答案

偷偷摸摸的方式:

不要复制记录。这需要太长时间。

相反,只需重命名事件表,然后重新创建:

RENAME TABLE live_table TO archive_table;
CREATE TABLE live_table (...);

它应该非常快且无痛。

编辑:如果您想要每个循环周期的存档表,我描述的方法最有效。如果您想维护单个存档表,可能需要变得更加棘手。但是,如果您只想对历史数据进行即席查询,则可能可以使用 UNION。

如果您只想保存几个周期的数据,您可以以类似于日志轮转的方式进行几次重命名。然后,您可以定义一个 View ,将存档表合并为一个大表。

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

RENAME TABLE live TO archive1; 
CREATE TABLE live (...); 
ALTER TABLE LIVE AUTO_INCREMENT = (SELECT MAX(id) FROM archive1);

但遗憾的是,这行不通。但是,如果您使用 PHP 来驱动该流程,那么就很容易解决。

关于php - 每周使用 PHP 归档 MySQL 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5640625/

相关文章:

php - Mysql触发器中的多个IF不起作用

php - 解析错误 : syntax error, 意外 'mysql_select_db' (T_STRING) - 无法看到我的错误?

php - 在 PHP 中,将数组与 MySQL 表中的字段进行比较

date - 归档时 NLog 不正确的日期

svn - 删除文件还是存档?

linux - 从不同文件夹中提取嵌套的不同类型的文件

php - 如何根据另一个表的ID获取表中的行数

php - IF 条件不适用于所有情况

php - google sheets 将数据附加到 sheet api 返回 401 身份验证错误

php - MySQL 更新不起作用