我正在尝试学习如何使用 rsync。我想每天备份我的生产服务器。
现在我运行命令
rsync -azr /var/www/* [email protected]:/var/www
现在假设有一天,我想将生产服务器上的 /var/www/ 目录回滚到上个月的版本。我该如何告诉 rsync 检索版本 N?
在读到 rsync 仅复制源和目标之间的差异时,我假设 rsync 的工作方式类似于 subversion,您将更改提交到目标,并跟踪每个版本,并可以选择随时签出任何版本。rsync 就是这样工作的吗?它就像 subversion,但适用于整个服务器?那太好了,因为这意味着我不必为我的夜间备份进行完整的 ssh 复制。
答案1
rsync 将您当前的文件结构镜像到另一端。它仅发送文件中的差异,但不保留修订。
http://blog.interlinked.org/tutorials/rsync_time_machine.html
可能更接近你想要做的事情。对于不太“手动”的方法,http://rsnapshot.org/
答案2
rsync 不是版本控制系统。它操作裸文件系统对象,并根据需要直接添加、更新和删除它们。其他工具可能会添加某种版本控制,但无法使用裸 rsync 进行回滚。
答案3
您可以在脚本中使用 Bash 的一些粘合剂,进行每日增量备份;我使用此脚本的修改版本来备份我的开发服务器文件: http://samba.anu.edu.au/rsync/examples.html
答案4
如果你的目标是能够将代码回滚到另一个时间段,那么最好将其保存在 subversion 存储库中,并使用类似卡皮斯特拉诺检查一下测试/生产情况。
使用 Capistrano,我的开发人员可以通过电子邮件将他们想要部署用于测试的 PHP 应用程序的标签和修订号发送给我们的 QA 小组。QA 可以编辑 Capistrano 文件以包含该修订和标签,然后运行ENVIRONMENT=testing;cap deploy
。Capistrano 将登录到我们的测试服务器并根据我为他们编写的方案部署该版本的代码。
投入生产的过程是一样的,但我们设定ENVIRONMENT=production
如果需要回滚到以前的版本,您可以cap rollback
针对给定的环境运行,Capistrano 将登录到服务器并将代码指向从 subversion 安装的以前的版本。
通过这种方法,我只需备份可变数据,例如 Subversion 存储库、Capistrano 配方和 PostgreSQL DB。借助 Capistrano 和配置管理工具,我可以在几分钟内推出新主机。