首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >删除旧备份的脚本

删除旧备份的脚本
EN

Server Fault用户
提问于 2013-05-31 07:42:00
回答 3查看 800关注 0票数 1

我有很多备份,比如:

代码语言:javascript
复制
backup-20130528_054504_mysql.tar.gz, 
bill_db_201305290130.BAK.bz2,
etc_20130412.tbz

这是每天完成的完整备份。

在此之前,我有一个具有如下命令行的cron任务:

代码语言:javascript
复制
/usr/bin/find /media/backups -ctime +7 -delete

但这是个坏主意。

一台服务器7天前停止执行新备份(文件系统已满),所有旧备份都被cron删除。

也许我需要一个新的脚本来代替这个“查找-ctime",它无论如何都会保存一些旧的备份。

我所有的备份文件都有名字{unique_prefix}YYYYMMDD.

我想要这样的东西:

  • 去年之前,每年都有一次备份
  • 为去年的每个月提供一个备份
  • 前一个月每周备份4次
  • 以及7天的备份。

对于每个{unique_prefix}。

所有这些文件都是通过cron通过rsync、ssh等下载到我的服务器的。

我不喜欢重新发明轮子,而且很确定这是一个典型的任务。

请告诉我解决方案。

EN

回答 3

Server Fault用户

回答已采纳

发布于 2013-05-31 19:08:53

我不同意dawud的观点,认为简单的备份是最好的。

您真正需要的不是一种更聪明的删除东西的方法(虽然这不是个坏主意,但我写了一些类似的东西,只保留了最后的N个备份),而是对您的文件系统进行适当的监视,这样您就会注意到它已经填满了,而且您可以采取行动。这样你就不会丢失你的数据。

票数 2
EN

Server Fault用户

发布于 2013-05-31 18:58:35

shell脚本可以处理到一定复杂程度的备份。您还有一些工具可以利用tarrsync来完成更复杂的任务(例如,rsnapshot)。

但是,看起来您需要一个非常细粒度的备份和保留策略,除非shell脚本不必要地复杂,而且上面提到的其他工具不提供,否则shell脚本可能不适合处理。

您应该考虑使用专用软件来完成这项任务。有很多,但巴库拉阿曼达在脑海中浮现。

票数 3
EN

Server Fault用户

发布于 2022-08-31 11:10:47

您可以使用基于时间的策略(如果停止生成新的备份,最终会删除所有备份):

代码语言:javascript
复制
find . -type f -name 'app-*.tar.gz' -mtime +100 --delete

保存最后X项是安全的:

代码语言:javascript
复制
ls -t app-*.tar.gz | tail -n +100 | xargs --no-run-if-empty rm

通过每天/每周/每月/每年的策略你能得到的最好的,这是不容易实现的。你可以试试rsnapshotcron的运气。

有些库支持删除旧快照,但您需要采用它们的约定:

票数 0
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/512195

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档