使用rsync同步了SVN仓库,不用担心机器故障导致代码丢失了

自从在第一家公司开始使用版本管理系统SVN之后,就再也离不开了,不管搞个啥都得往SVN上面放,服务器部署更新起来相比于FTP上传那个方便啊。为了访问方便,我的私人SVN库架在了一个客户的服务器上,但是比较郁闷的就在于虽然放在服务器上面,但总还是不放心啊,万一哪天服务器硬盘坏了,这代码库丢失就是大事情了,而且我的这位客户在我把代码库放上去之前硬盘确实坏过一个。

之前一直都是想做一下这个SVN代码库的自动备份的,这个心结今天晚上终于搞掉了。方案跟大家分享一下:

首先,目前共有三台机器参与其中。客户服务器A,目前的代码总库,工作时候的代码签入签出都还是走的这台服务器;自己购买的一台美国VPS虚拟主机B,主力备份;工作&生活笔记本C,候选备份机器。

第一步,在A机器上安装rsync,并配置文件 /etc/rsyncd.conf,参考如下:

uid = nobody
gid = nobody
use chroot = no
max connections =
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log

[svn]
path = /path/to/your/svn/repos
comment = my svn repos
ignore errors
read only = yes
list = no
auth users = username              # 在进行同步服务时使用的用户名
secrets file = /file/to/.rsync.pas # 在该文件中指定用户在同步时需要使用的密码
                                   # 文件内容的格式为 username:pass
                                   # 该文件必须权限为 600
                                   # 并且如果是使用sudo来运行rysnc,那么该文件的owner必须为root

然后使用sudo rsync –daemon命令在后台启动rsync服务,到此,离成功已经过半。(配置时您需要删除这些注释)

第二步,在A机器上开启防火墙,让rsync服务能够在其他服务器上进行访问

sudo vim /etc/sysconfig/iptables

仿照你的80端口添加如下行

 

 

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 873 -j ACCEPT

第三步,在B机器上,现在便可以使用下面的命令来进行文件同步了(因显示不下,折为两行,下同):

rsync -vzrtopg --password-file=/***/.rsync.pass --progress
--delete username@yourdomain.com::svn /your/svn/repos/backup/path

使用–password-file参数的目的在于将密码保存在B服务器上的某一个文件中,这样就不需要每次都把密码在命令行里面敲了。该文件直接明文保存密码字符串即可。

第三步,在B机器上,设置cron任务,让其每天都同步一次:crontab -u root -e 在vi中加入下面一行:

0 0 * * * rsync -vzrtopg --password-file=/***/.rsync.pass --progress
--delete username@yourdomain.com::svn /your/svn/repos/backup/path

最后,在C机器上,因为我的机器是mac,所以编辑~/.profile文件,加入一个命令别名:

alias svn_backup='rsync -vzrtopg --password-file=/***/.rsync.pass --progress
--delete username@yourdomain.com::svn /your/svn/repos/backup/path'

这样,每次想在本地机器上再同步一次的时候呢,就可以直接敲svn_backup就把整个SVN代码库同步到本机了。因为已经有了每天能够同步一次的主力备份服务器,在本机就不用备份这么频繁了。同时在本机备份之前,最好确认A、B服务器的备份状态,以防止发生下面的一种情况:A服务器文件系统损坏,目录下文件丢失,导致B服务器在同步的时候也将其目录下的文件删除,这样,在如此极端的情况下,本地还有一份同步备份,虽然该备份可能不是最新的,会有一些版本偏差。

大功告成!洗洗睡觉。

 

This entry was posted in 杂七杂八 and tagged , , , . Bookmark the permalink.

Leave a Reply

Your email address will not be published.

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>


Verify Code   If you cannot see the CheckCode image,please refresh the page again!