目录
一、svnsync备份说明
svnsync实际上是制作2个镜像库,当一个坏了的时候,可以迅速切换到另一个。不过,必须svn1.4版本以上才支持这个功能。 当制作成2个镜像库的时候起到双机实时备份的作用;
二、案例说明
将源主机192.168.121.155上的svn库备份到备份机192.168.121.156上;
2.1、备份机上安装与源主机同版本的svn
源主机上svn版本:
在备份机上安装相同版本的Subversion,安装完成以后查看备份机上的svn的版本号:
2.2、备份机上创建svn备份版本库
# mkdir /opt/svn //新建版本库目录
# svnadmin create /opt/svn/svnbackup //创建一个名为svnbackup的版本库
2.3、备份机上修改配置并创建备份账户
编辑备份机中版本库目录中conf目录下的svnserve.conf文件
去掉相关配置的注释
需要保留这四项
在备份机上创建一个备份账户,在备份机上拥有读写权限
编辑备份机版本库目录中conf目录下的passwd文件,创建备份账户
backupuser = 123456
编辑备份机版本库目录中conf目录下的authz文件,授权账户backupuser对版本库有读写的权限
backup = backupuser
[svnbackup:/]
@backup = rw
注意:该账户在后续步骤中配置源主机时,在源主机上还会创建一遍但权限不同
2.4、源主机上创建备份账户
在源主机和备份机上创建一个相同的账户,在源主机上拥有读权限,在备份机上拥有读写权限
源主机版本库上conf/passwd中创建本分账户
backupuser = 123456
源主机版本库上conf/authz中授权账户backupuser对版本库有读的权限
2.5、备份机上限制账户提交版本
因为是备份机所以只允许专用的备份账户进行提交操作,在备份版本库中的hooks目录下进行文件操作:
进入svn备份版本库中的hooks目录
# cd hooks/
# ll
创建start-commit文件
# vim start-commit
将下面的脚本添加到start-commit文件中
#!/bin/sh
USER="$2"
# 限制只用backupuser用户才能提交版本修改到版本库
if [ "$USER" = "backupuser" ]; then exit 0; fi
echo "Only the syncuser user may commit new revisions" >&2
exit 1
注意:backupuser是上一步创建的备份账户
编辑完成,保存退出
给start-commit文件授权
# chmod 755 start-commit
授权成功
2.6、备份机上创建钩子函数文件
在备份版本库中的hooks目录下创建钩子函数文件:
进入svn备份版本库中的hooks目录
创建pre-revprop-change文件
# vim pre-revprop-change
将下面的脚本添加到pre-revprop-change文件中
#!/bin/sh
USER="$3"
# 限制只有backupuser用户才能提交版本属性修改到此版本库
if [ "$USER" = "backupuser" ]; then exit 0; fi
echo "Only the syncuser user may change revision properties" >&2
exit 1
注意:backupuser是备份账户
编辑完成,保存退出
给pre-revprop-change文件授权
# chmod 755 pre-revprop-change
授权成功
2.7、备份机上初始化备份仓库
在备份机上执行初始化命令
命令语法:
svnsync init {备份机上svn的备份库的url} {源主机上需要备份的库的url} --username {备份账户} --password {备份账户密码}
例如:
备份机上创建备份库的路径:/opt/svn/svnbackup
当前源主机上需要备份的库的url:svn://192.168.121.155/repository
#svnsync init file:///opt/svn/svnbackup svn://192.168.121.155/repository --username backupuser --password 123456
询问是否存放密码(如果是做自动备份可以存放起来)
直接输入yes后回车
备份仓库初始化完成
2.8、备份机手动时执行第一次备份
先查看备份机上的数据情况版本库中的db目录下主要存放的真正的数据
# tree db
在备份机上执行备份命令:
# svnsync sync file:///opt/svn/svnbackup --username backupuser --password 123456
注意:如果初始化时没有记住账户则在执行备份命令的时候需要带上账户名和密码,方式与初始化的方式一致,直接追加在命令后面
备份完成
再次查看备份机上的数据结构
# tree db
说明数据备份成功
2.9、备份机上开启备份仓库
启动当前的备份库
# svnserve -d -r /opt/svn
如果此处报错:svnserve: E000098: Can't bind server socket: Address already in use
需要将当前svn的进程杀死,(命令 kill -9 PID),再执行
# svnserve -d -r /opt/svn
保证当前的备份库能通,可以使用svn浏览器测试
svn://192.168.121.156/svnbackup
数据同步成功
2.10、实时备份方案
因为数据是从源主机提交同步的,所以需要在源主机上进行配置
到源主机的版本库中的hooks目录下复制post-commit.tmpl文件为post-commit文件进行修改
# cp post-commit.tmpl post-commit
编辑post-commit文件,删除最后的三行,然后增加一行,内容如下:
svnsync sync --non-interactive svn://192.168.121.156/svnbackup --username backupuser --password 123456
保存退出
当源主机提交之后,svn或通过post-commit钩子函数自动同步到备份机。
测试提交多个版本后,查看备份机版本
实时同步配置成功
2.11、定时备份方案
在备份机上定时执行备份脚本。
在备份机上svn的版本库中创建一个目录backup用于存放备份脚本和备份日志
# mkdir backup //该目录在版本库中,绝对路径为/opt/svn/svnbackup/backup
在backup目录下创建svnsync.sh文件
# vim svnsync.sh
将下面的脚本复制到svnsync.sh文件中
#!/bin/sh
echo "$(date '+%m-%d-%Y %H:%M:%S') begin sync"
svn propdel svn:sync-lock --revprop -r 0 file:///opt/svn/svnbackup --username backupuser --password 123456
svnsync sync file:///opt/svn/svnbackup --username backupuser --password 123456
echo "$(date '+%m-%d-%Y %H:%M:%S') end sync"
保存退出
注意:文件中的路径可以自定义,在添加定时的时候指定执行路径即可。
创建日志文件svnsync.log用于输出备份日志
# touch svnsync.log
对svnsync.sh文件授权,该文件需要有执行权限
# chmod 775 svnsync.sh
测试脚本是否可用。
# /opt/svn/svnbackup/backup/svnsync.sh > /opt/svn/svnbackup/backup/svnsync.log
查看打印的日志
# vim svnsync.log
日志正常,查看版本库
# tree db
版本库已更新。
利用crontab定时同步SVN
第一次使用crontab -e 命令时会让我们选择编辑器,很多人会不小心选择默认的nano(不好用),或则提示no crontab for root - using an empty one 888;这时候我们要重新选择编辑器
解决办法:使用root账户登录系统执行命令
# select-editor
输入数字:3 (vi编辑器 回车)
重新输入crontab -e就可以进行编辑定时任务了
# crontab -e
从左到右依次为:
[分钟] [小时] [每月的某一天] [每年的某一月] [每周的某一天] [执行的命令]
注意每个选项的取值范围
添加一行
#每天 02:00 执行任务
0 2 * * * /opt/svn/svnbackup/backup/svnsync.sh >> /opt/svn/svnbackup/backup/svnsync.log
至此,定时配置完成
2.12、备份恢复
采用svnsync时可以直接进行切换
热备份恢复:在进行热备份(实时备份)是备份仓库本来就是已经启动了的,可以直接使用账户登录查看,但是由于备份账户具有写权限,所以不建议使用备份账户直接操作,需要在备份机上添加一个可读账户并授权,即可访问数据。
定时备份恢复:在做定时备份是备份仓库可以不用启动,所以需要先查看备份仓库是否启动,如果未启动,先启动备份仓库
# svnserve -d -r /opt/svn
同样不建议使用备份账户直接访问,建议新添加一个账户授权后在访问。