AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 512195
Accepted
Korjavin Ivan
Korjavin Ivan
Asked: 2013-05-31 23:42:00 +0800 CST2013-05-31 23:42:00 +0800 CST 2013-05-31 23:42:00 +0800 CST

删除旧备份的脚本

  • 772

我有很多备份,例如:

backup-20130528_054504_mysql.tar.gz, 
bill_db_201305290130.BAK.bz2,
etc_20130412.tbz

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

在今天之前,我有一个带有如下命令行的 cron 任务:

/usr/bin/find /media/backups -ctime +7 -delete

但这是个坏主意。

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

可能我需要一个新脚本来替代这个“find -ctime”,它无论如何都会保存一些旧的备份。

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

我想要这样的东西:

  • 前一年每年备份一次
  • 去年每个月备份一次
  • 上个月每周 4 个备份
  • 以及最近 7 天的 7 个备份。

对于每个 {unique_prefix}。

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

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

请指出我的解决方案。

backup
  • 3 3 个回答
  • 698 Views

3 个回答

  • Voted
  1. dawud
    2013-06-01T10:58:35+08:002013-06-01T10:58:35+08:00

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

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

    您应该考虑为此任务使用专用软件。有很多,但想到了bacula和amanda 。

    • 3
  2. Best Answer
    Dennis Kaarsemaker
    2013-06-01T11:08:53+08:002013-06-01T11:08:53+08:00

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

    你真正需要的不是删除东西的更聪明的方法(虽然这不是一个坏主意,我写了一些类似的东西只是保留最后的 N 备份),而是适当地监控你的文件系统所以你会注意到它填满了早在它发生之前,你就可以采取行动。这样你就不会丢失你的数据。

    • 2
  3. gavenkoa
    2022-09-01T03:10:47+08:002022-09-01T03:10:47+08:00

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

    find . -type f -name 'app-*.tar.gz' -mtime +100 --delete
    

    保留最后 X 项是安全的:

    ls -t app-*.tar.gz | tail -n +100 | xargs --no-run-if-empty rm
    

    您可以通过每天/每周/每月/每年的策略获得最好的结果,这并非易事。你可以试试运气rsnapshot和cron。

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

    • https://github.com/ccztux/glsysbackup
    • https://github.com/jgehrcke/timegaps
    • 0

相关问题

  • 总大小(磁盘)与总大小(媒体)

  • 社区对备份解决方案的意见

  • 无法读取不同 LTO-3 驱动器上的 LTO-3 磁带

  • 使用 TSM 备份时跳过硬链接

  • 使用 rsync 维护名称更改的目录的副本

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve