1

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

我想要第二个数据库,随时只包含最近 30 天的数据。

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

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

  • 单独使用 MySQL 即时复制
  • MySql 导出到 txt 文件,然后是 MySql 导入,然后删除临时文件
  • 一个遍历行并一一复制的php脚本

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

4

2 回答 2

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;

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

于 2013-01-16T02:07:49.113 回答
0

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

MySQL 5.0 - 13.2.5.1。插入 ... 选择语法"

于 2013-01-15T23:11:29.660 回答