我正在尝试学习如何使用rsync。 我想创build每天备份我的生产服务器。
现在我运行命令
rsync -azr /var/www/* [email protected]:/var/www
现在让我们说,有一天,我想回滚我的生产服务器上的/ var / www /目录到上个月的版本。 我如何告诉rsync检索版本N?
在阅读rsync只复制src和dest之间的差异时,我假定rsync像subversion那样提交到目的地的更改,并跟踪每个版本,并随时select签出任何版本。 这是rsync的工作方式吗? 这就像颠覆,但整个服务器? 那太棒了,因为那意味着我不必为每晚的备份做完整的ssh拷贝。
rsync将您当前的文件结构镜像到另一端。 它仅发送文件中的差异,但不保留修订。
http://blog.interlinked.org/tutorials/rsync_time_machine.html
可能更接近你想要做的事情。 对于较less的“手动”方法, http://rsnapshot.org/
rsync不是一个版本控制系统。 它在裸露的文件系统对象上运行,并根据需要直接添加,更新和删除它们。 其他工具可能会添加某种版本,但无法使用裸rsync进行回滚。
您可以在脚本中使用Bash的一点粘合剂,每日进行一次增量备份; 我使用此脚本的修改版本来备份我的开发服务器文件: http : //samba.anu.edu.au/rsync/examples.html
我使用以下选项进行备份:
-avP --stats --compress \ --delete \ -b --backup-dir ${DIRBACKUPBACKUP} \ --bwlimit=20 \ --include=/etc/ \ --include=/etc/** \ --include=/var/ \ --include=/var/vmail/ \ --include=/var/vmail/** \ --exclude=* \ [email protected]:/
其中${DIRBACKUPBACKUP}
是一个唯一的目录名称(我使用当前的date和时间)。
有没有自动的方式来恢复,但我应该能够重build目录看起来像在特定的一天使用这些选项。
如果您的目标是能够将代码回滚到另一个时间段,那么将其保存在一个颠覆回购中,并使用像Capistrano这样的东西来检查testing/生产是明智的。
通过Capistrano,我的开发人员可以通过电子邮件向我们的QA小组发送他们想要部署的PHP应用程序的标签和版本号码进行testing。 QA可以编辑Capistrano文件以包含该版本和标签,然后运行ENVIRONMENT=testing;cap deploy
。 Capistrano将login到我们的testing服务器,并根据我为他们写的配方部署该版本的代码。
进入生产的过程是相同的过程,但是我们设置了ENVIRONMENT=production
如果您需要回滚到以前的版本,您可以针对给定的环境运行cap rollback
,Capistrano将login到服务器并将代码指向从Subversion安装的先前版本。
通过这种方法,我只需要备份variables数据,比如Subversion repo,Capistrano recipes和PostgreSQL DB。 通过Capistrano和configurationpipe理工具,我可以在几分钟内推出新的主机。
我过去把我的/ etc和/ var / www放在一个svn仓库中,以便快速恢复,并使用tar来进行增量备份和完整备份。
Rsync默认只是确保两个目录是同步的,但是正如其他人指出的那样,如果文件没有改变,你可以编写脚本使其具有到较旧备份的符号(或硬)链接。
没有理由为什么你不能使用两个。