数据是公司的核心资源,重之又重,数据备份是为灾难上的保险。现有主服务器和备用服务器的情况下,备份思路和要求如下:
1. 主服务器和备用服务器的svn数据每天同步,以便在主服务器故障时能以最快速度切换至备用服务器;
2. 主服务器每周对svn数据进行一次全备份。
一、同步svn数据
备用服务器通过nfs服务将主服务器的svn仓库目录挂载至文件系统以方便操作。然后编写脚本程序,使用crontab创建计划任务。这里需要注意两点:一是使用chmod +x svn_sync.sh命令使脚程序可执行;二是以root用户登陆创建计划任务。脚本程序检测主服务器SVN仓库的最新版本和备用服务器的最新版本,若主服务器的仓库版本更新,则通过增量备份方式生成.svn文件,然后将其导入备用服务器,以此完成备用服务器的仓库同步。
脚本程序如下:
#!/bin/bash
#仓库列表
repo_list[0]="project"
repo_list[1]="office"
repo_list[2]="public"
#开始同步
date >svn_sync.log
echo "repo. sync start:" >>svn_sync.log
#检测主服务仓库目录是否加载
if [ ! -d /nfs/nas1_svn/repo ]; then
mount -t nfs 192.168.1.224:/disk1/svn /nfs/nas1_svn
fi
#同步仓库
for repo in ${repo_list[@]}; do
if [ -d /nfs/nas1_svn/repo/$repo ]; then
date >> svn_sync.log
echo "sync $repo" >>svn_sync.log
svn_rev=$(svnlook youngest /nfs/nas1_svn/repo/$repo)
bak_rev=$(svnlook youngest /disk1/svn/repo/$repo)
if [ $svn_rev -ne $bak_rev ]; then
bak_rev=$[$bak_rev+1]
echo "sync rev:$bak_rev to $svn_rev"
svnadmin dump --incremental -r $bak_rev:$svn_rev /nfs/nas1_svn/repo/$repo > /disk1/svn/${repo}.svn
svnadmin load /disk1/svn/repo/$repo < /disk1/svn/${repo}.svn
rm /disk1/svn/${repo}.svn
fi
echo "sync $repo finish!" >>svn_sync.log
fi
done
cp -f /nfs/nas1_svn/dav_svn.passwd /disk1/svn/
cp -f /nfs/nas1_svn/dav_svn.authz /disk1/svn/
date >> svn_sync.log
echo "repo. sync finish!" >> svn_sync.log
二、全备份svn数据
操作同上,脚本程序如下:
#!/bin/bash
#仓库列表
repo_list[0]="project"
repo_list[1]="office"
repo_list[2]="public"
#检测主服务仓库目录是否加载
if [ ! -d /nfs/nas1_svn/repo ]; then
mount -t nfs 192.168.1.224:/disk1/svn /nfs/nas1_svn
fi
#备份仓库
for repo in ${repo_list[@]}; do
if [ -d /nfs/nas1_svn/repo/$repo ]; then
mv /disk0/svn_backup/${repo}.svn /disk0/svn_backup/_${repo}.svn
svnadmin dump /disk1/svn/repo/$repo > /disk0/svn_backup/${repo}.svn
rm /disk0/svn_backup/_${repo}.svn
fi
done
cp -f /disk1/svn/dav_svn.passwd /disk0/svn_backup/
cp -f /disk1/svn/dav_svn.authz /disk0/svn_backup/