Cron作业在MySQL表之间移动很多行

时间:2013-01-15 22:56:59

标签: mysql cron mysqldump

我有一个主数据库,每天最多可存储5,000个新行。

我希望有一个第二个数据库,它只包含最近30天的数据。

因此,我计划设置一个cron作业,定期转储超过30天的行并复制新行。

复制部件的最佳设计是什么?

  • 仅使用MySQL进行动态复制
  • MySql导出到txt文件,然后是MySql导入,然后删除临时文件
  • 一个PHP脚本,它遍历行并逐个复制

我想要稳健性和最少的CPU /内存使用量

2 个答案:

答案 0 :(得分:2)

最快且最强大的方法是直接在MySQL中执行传输。以下是涉及的步骤:

首先,创建第二个表:

CREATE TABLE IF NOT EXISTS second.last30days LIKE main_table;

接下来,插入30天或更新的记录:

INSERT INTO 
second.last30days
SELECT
*
FROM
main_table
WHERE
created >= CURDATE() - INTERVAL 30 DAYS
ORDER BY created;

最后,删除超过30天的记录:

DELETE FROM 
second.last30days
WHERE
created < CURDATE() - INTERVAL 30 DAYS
ORDER BY created;

建议不要同时运行INSERTDELETE语句。

答案 1 :(得分:0)

如果数据库都托管在同一台服务器上。只需使用insert ... select语句。 这样你就可以减少一切。 1查询,完成。

MySQL 5.0 - 13.2.5.1. INSERT ... SELECT Syntax"