我有一个主数据库,每天最多可存储 5'000 行新行。
我想要第二个数据库,随时只包含最近 30 天的数据。
因此,我计划设置一个 cron 作业,定期转储超过 30 天的行并复制新的行。
复制部分的最佳设计是什么?
- 单独使用 MySQL 即时复制
- MySql 导出到 txt 文件,然后是 MySql 导入,然后删除临时文件
- 一个遍历行并一一复制的php脚本
我想要稳健性和最少的 CPU/内存使用量
最快和最健壮的方法是直接在 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;
建议不要同时运行INSERT
andDELETE
语句。
如果数据库都托管在同一台服务器上。只需使用一个insert ... select
语句。这样你就可以最小化一切。1个查询,完成。