SVN是集中式管理版本库,一旦服务器端发生灾难级事故,需要使用备份数据迅速恢复,以下是针对SVN的几种不同备份方法:
生产服务器 SVN://ip1/code
镜像服务器 SVN://ip2/code_mirror
NAS存储服务器 ftp://ip3
一、sync镜像实时备份:
1、镜像服务器SVN的创建与配置方法,和生产服务器SVN创建相同,可参考之前文章。
2、用户权限配置,为了保证备份镜像的安全,可只设置一个独立的备份账户。
3、配置完成后,在生产环境服务器上进行初始化
svnsync init SVN://ip2/code_mirror file:///svn/proj/
注:
a 备份镜像服务器 svn://ip2/project,
b 生成环境服务器 file:///svn/proj/
c 生成环境服务器本地文件路径前必备为 file:///
初始化过程会要求输出系统登录用户密码,按照提示输入即可
4、添加实时同步
在hooks目录下的post-commit文件(文件要有可执行权限)中,添加同步语句
svnsync sync --non-interactive SVN://ip2/code_mirror --username svnsyncadmin --password svnsyncpassword
这样,每次生产环境的SVN版本更新时,都会实时同步到镜像服务器上。
5、svnsync命令可选项介绍
--config-dir DIR
指导Subversion从指定目录而不是默认位置(用户主目录的.subversion)读取配置信息。--no-auth-cache
阻止在Subversion管理区缓存认证信息(如用户名密码)。--non-interactive
如果认证失败,或者是不充分的凭证时,防止出现要求凭证的提示(例如用户名和密码)。这在运行自动脚本时非常有用,只是让Subversion失败而不是提示更多的信息。--password PASS
指出在命令行中提供你的密码—另外,如果它是需要的,Subversion会提示你输入。--username NAME
表示你要在命令行提供认证的用户名—否则如果需要,Subversion会提示你这一点。
二、hotcopy定时备份 + ZIP压缩 + FTP上传到NAS
svn提供了hotcopy和dump两种备份方式。
hotcopy备份本质上就是仓库完整拷贝
优点 - 备份过程较快,灾难恢复也快。
缺点 - 无法分段备份,因此单次备份时,硬盘消耗相对较大 。
dump是官方推荐的备份方式,需使用专门的版本还原机制。
优点 – 可全量备份也可增量备份,可根据需要灵活备份或还原指定版本。
缺点 – 相对还原麻烦,特别是版本量多时,还原速度较慢。
实践中发现hotcopy备份与还原更为方便,而且hotcopy后,可以使用ZIP进行压缩,再通过FTP同步到NAS上,NAS的大硬盘可以满足大容量备份文件,而且NAS上还可以实现更多的备份功能,进一步提高安全性。
这里只记录hotcopy备份方法。
1、hotcopy本地手动备份
svnadmin hotcopy /svn/project /backup/project
2、hotcopy本地自动备份
通过宝塔的定时任务或者linux的corn功能,配合bash脚本实现,网上例子不再赘述。
3、压缩和FTP上传功能
通过BASH实现,不再赘述
三、python 实现 SVN全功能备份
以下是我自己正在使用的python全功能备份脚本,配合宝塔的定时功能,每天早上6点定时执行即可,实现了如下功能:
(1)执行svn的sync镜像备份(需要先初始化)
(2)执行svn的hotcopy备份
(3)压缩hotcopy备份为zip文件
(4)通过FTP上传ZIP备份文件到NAS存储
(5)自定义设置保留备份天数
(6)清除本地和FTP上过期备份功能
(7)记录当天备份的过程日志
(8)备份完成,将成功或者失败的日志,通过Email邮件通知(推荐使用QQ邮箱的SMTP服务,可以在微信上收到邮件通知)
(9)防火墙需要开放相应的端口