我有一个网站,里面有大量的文本文件 - 现在它们占用了大约 40 GB 的数据,并且随着时间的推移还在增加。我需要每天进行一次完整的备份。我目前的策略是创建一个受密码保护的存档,并使用以下命令将其存储在 Dropbox 中:
tar cfz - /var/www/mysite | openssl enc -aes-256-cbc -e -k "b@ckupPassword" > /home/user/Dropbox/server_backups/sources/2013_01_04_0500_mysite_source_encrypted.tgz
它可以工作,但是创建档案大约需要 14 个小时,并且会消耗大量的 IO - 而且随着数据量的增加,情况会变得更糟。
备份如此大量文件的正确策略是什么?
答案1
如果我有足够的空间,我会使用rsync
。
此示例有一个完整备份,并保留一周的增量备份。
#!/bin/bash
DAY=$(date +%A)
if [ -e /bkp/incr/$DAY ] ; then
rm -fr /bkp/incr/$DAY
fi
ionice -c 3 rsync -a --delete --inplace --backup --backup-dir=/bkp/incr/$DAY /var/www/mysite/ /bkp/full/ &> /dev/null
该脚本可能很复杂,无法存储在异地、Dropbox 文件夹等处。
如果你确实需要使用tar
,你可以跟踪修改的文件
tar zcvf - --listed-incremental=/var/log/mysite.tarlog /var/www/mysite | openssl enc ...
如果您想要完整备份,请删除/var/log/mysite.tarlog
答案2
如上所述,rsync 似乎是备份整个网站的最佳方式。但我建议您实施某种复制文件系统,例如具有复制功能的简单 GlusterFS 卷。
复制不是备份,但它可以帮助您减少备份的 I/O 影响,并最终为您提供坚实的基础,以便以后将您的网站扩展为集群。