简单的 bash 备份解决方案

简单的 bash 备份解决方案

我有一个非常对 shell 脚本的经验有限,想制定某种脚本来每周备份我的博客 (Wordpress)。

这是我目前所拥有的

#!/bin/bash

# Determine current date
setenv CURDATE date +%Y%m%d

# Backup DB & email it to me
mysqldump dbname -u user -ppassword | gzip | uuencode ${CURDATE}dbname.sql.gz | mail -s "backup for dbname ${CURDATE}" [email protected]

cd /home/myhome

# Zip blog
tar cf - blog.mysite.me | gzip - > ~/backups/${CURDATE}blog.mysite.me.tar.gz

这就是我有点困惑的地方...我原本想通过电子邮件将博客目录发送给我自己,但是当目录大小超过 10MB 左右时该怎么办?我该如何编写脚本来拆分目录并通过电子邮件将目录块发送给我?

我还有一个更好的建议,那就是将备份通过 FTP 传输到我拥有的另一个 VPS。但为了节省空间,我只想保留最后 10 个备份。我将如何实现脚本的以下部分:

  1. 上传备份
  2. 获取文件列表
  3. 获取当前目录中的文件数(例如 /home/myhome/backups/blog )
  4. 如果数量 > 10,删除最旧的

如能得到任何关于解决该问题的帮助/建议或指点,我们将不胜感激:)

答案1

不要将其压缩并进行 ftping,而是通过网络使用 rsync。如果您为每个日期创建一个新目录,并使用 --link-dest 选项将其链接回上一个目录,它将仅存储已更改的文件,而未更改的文件将硬链接到上一个目录。

我发布了一些代码您使用哪种 Linux 服务器备份解决方案

答案2

首先,要通过命令设置变量,请使用

CURDATE=$(date +%Y%m%d) 

代替

setenv CURDATE date +%Y%m%d

如果您只想保留 10 天的备份,您可以删除 10 天前的备份。使用date相关命令找到它并保存到另一个变量:

PAST_DATE=$(date +"%m-%d-%Y" --date="10 days ago")

其次,您可以使用lftp在一行上执行 ftp 命令,如下所示:

lftp -u user,pass server -e "mrm *${PAST_DATE}.sql.gz; exit;

如果您在文件名中使用日期,并且每天删除 10 天前的文件,您就可以实现您想要的效果。您lftp也可以使用它来放置文件,它的工作方式与常规客户端相同,只是它在一行上工作。

相关内容