有没有办法设置 MySQL 复制以添加新行并删除旧行?例如,我在主 MySQL 上有一个可以追溯到大约 5 年前的表。我希望复制仅保持最近 30 天的最新状态。30 天后的任何内容都将从复制中删除。我该如何实现这一点?
- 提前致谢
答案1
不,不是原件复制品的复制品就不是复制品。
答案2
您无法通过该路线到达您想去的地方。您的第一个问题是 MySQL 需要一种方法来确定要保留哪些数据以及要删除哪些数据。如果表之间没有依赖关系,您可以使用每个表中的时间戳或日期字段来实现,在这种情况下,您只需对每个表运行一个简单的查询。
您可以通过日志来完成此操作,但这既棘手又容易出错。
答案3
虽然您无法使用本机 MySQL 支持来做到这一点,但正如许多人指出的那样,在大多数情况下,可以使用脚本相当容易地完成。但是,难易程度取决于您的架构的复杂程度。
下面是一个查询示例,该查询使用以下命令从具有时间戳字段的表中删除日期和时间函数...
delete from table where DATE_ADD( DATE_FORMAT( table.timestamp,'%Y-%m-%d %T'), INTERVAL 4 HOUR) < NOW()
答案4
设置复制并使数据库相同后,发出“stop slave”并删除旧数据。除非主服务器对这些行进行操作,否则旧数据不会重新出现。然后“start slave”。