extremedata数据恢复软件(SVN dump备份与还原)

1. 现象
  • SVN结构
  • SVN主目录: /svn/repos
  • SVN配置文件: /svn/etc
2. 原因分析

SVN数据与用户备份

hotcopy 与 dump

  • Hotcopy直接复制存储库。 它速度很快,但它保留了底层文件系统等信息。 导入副本的服务器需要是相同的版本,具有相同的配置等
  • Dump是版本独立的。 这意味着导出的副本可以被任何版本的svn使用

Gzip压缩与xz压缩

  • Gzip压缩速度快,但是压缩比例没有xz高
  • xz压缩速度慢,但是压缩比例高

在考虑磁盘空间紧张,内存和CPU资源使用充足,可以使用xz压缩,压缩速度慢

在内存和CPU资源使用紧张,不考虑磁盘容量大小,建议使用gzip压缩,压缩速度快

3. 解决方法3.1 备份策略

每一个月进行全量备份,每隔8个小时进行增量备份


3.2 备份准备

本地备份目录:/data/Backup/SVN

  • 赋予权限
  • 将目录/data以及子目录对其他用户添加可读、可执行的权限
  • 目录/data/Backup以及子目录添加对组backup可读、可写、可执行的权限

# 添加组backup groupadd backup # 添加用户cory到组backup usermod -a -G backup cory # 更改/data权限 chmod -R 775 /data # 更改/data/Backup的用户组backup chown -R root:backup /data/Backup3.3 备份内容

  • 数据备份

将dump出来的文件进行备份

  • 配置文件备份
  • 认证文件、权限文件备份
  • SVNAdmin备份

iF.SVNAdmin管理界面备份

3.4 备份脚本

此版本只是基础版本,增量与全量备份未写在其中,请知悉

extreme

#!/usr/bin/env bash # TODO: Bup备份 # TODO: 其他备份目录 # TODO: 软编码 IP 等 # TODO: 定期删除 # TODO: 模块编码 # TODO: 增量备份与全量备份 set -e password=$1 repo_dir="/svn/repos" backup_dir="/data/Backup/SVN" svnadmin="/usr/bin/svnadmin" svnlook="/usr/bin/svnlook" name=$(basename "$repo_dir") revision=$($svnlook youngest "$repo_dir") target="$backup_dir/$name-$revision.xz" echo "$name-$revision.xz" > $backup_dir/currentBackup.info if [ ! -e "$target" ]; then rm -f "$backup_dir/$name"-*.xz # nice $svnadmin dump -r $((revision_full + 1)):${latest_revision} --incremental --deltas --quiet "$repo_dir" | xz -T 0 --compress --stdout -9 --extreme > "$target" # nice $svnadmin dump --quiet "$repo_dir" | xz -T 0 --compress --stdout -9 --extreme > "$target" nice $svnadmin dump --deltas --quiet "$repo_dir" | xz -T 0 --compress --stdout -9 --extreme > "$target" fi # sync data sshpass -p "$

" rsync -arvP -e "ssh -p 22222" $backup_dir/currentBackup.info sailingadmin@192.168.10.11:/data/SVN/ # sync data sshpass -p "$

" rsync -arvP -e "ssh -p 22222" "$target" sailingadmin@192.168.10.11:/data/SVN/ # sync etc sshpass -p "$

" rsync -arvP -e "ssh -p 22222" /svn/etc sailingadmin@192.168.10.11:/data/SVN/ # sync svnadmin sshpass -p "$

" rsync -arvP -e "ssh -p 22222" /var/www/html/svnadmin sailingadmin@192.168.10.11:/data/SVN/ # delete rm -rf $backup_dir/currentBackup.info rm -rf "$target"
3.5 定期删除备份文件

将备份在192.168.10.11目录的过期文件定期删除

通过Linux Crontab或者Jenkins都可以,如Crontab

#!/usr/bin/env bash # TODO: Bup备份 # TODO: 其他备份目录 # TODO: 软编码 IP 等 # TODO: 定期删除 set -e password=$1 repo_dir="/svn/repos" backup_dir="/data/Backup/SVN" svnadmin="/usr/bin/svnadmin" svnlook="/usr/bin/svnlook" name=$(basename "$repo_dir") revision=$($svnlook youngest "$repo_dir") target="$backup_dir/$name-$revision.xz" echo "$name-$revision.xz" > $backup_dir/currentBackup.info if [ ! -e "$target" ]; then rm -f "$backup_dir/$name"-*.xz # nice $svnadmin dump -r $((revision_full + 1)):${latest_revision} --incremental --deltas --quiet "$repo_dir" | xz -T 0 --compress --stdout -9 --extreme > "$target" # nice $svnadmin dump --quiet "$repo_dir" | xz -T 0 --compress --stdout -9 --extreme > "$target" nice $svnadmin dump --deltas --quiet "$repo_dir" | xz -T 0 --compress --stdout -9 --extreme > "$target" fi # sync data sshpass -p "$

" rsync -arvP -e "ssh -p 22222" $backup_dir/currentBackup.info sailingadmin@192.168.10.11:/data/SVN/ # sync data sshpass -p "$

" rsync -arvP -e "ssh -p 22222" "$target" sailingadmin@192.168.10.11:/data/SVN/ # sync etc sshpass -p "$

" rsync -arvP -e "ssh -p 22222" /svn/etc sailingadmin@192.168.10.11:/data/SVN/ # sync svnadmin sshpass -p "$

" rsync -arvP -e "ssh -p 22222" /var/www/html/svnadmin sailingadmin@192.168.10.11:/data/SVN/ # delete rm -rf $backup_dir/currentBackup.info rm -rf "$target"
3.6 还原

准备文件

  • 全量备份文件:repos-5083-Full.xz
  • 增量备份文件:repos-5098-Inc.xz
  • 其他其他备份文件:etc配置权限文件、svnadmin界面文件
1) SVN安装

Centos 7 安装 SVN

  • Apache安装

crontab -e # 每隔两天删除备份文件 # 删除除当前备份文件(从currentBackup.info读取)以外的其他压缩文件 # * * */2 * * cd /data/SVN && ls *.xz | grep -v $(cat currentBackup.info) | xargs rm -rf

  • 去除apache默认欢迎界面

sudo sed -i 's/^/#&/g' /etc/httpd/conf.d/welcome.conf

  • 阻止显示/var/www/html目录

sudo sed -i "s/Options Indexes FollowSymLinks/Options FollowSymLinks/" /etc/httpd/conf/httpd.conf

  • 安装SVN和mod_dav_svn模块

sudo yum install -y subversion mod_dav_svn2) SVN配置

  • 更改配置文件

sudo vi /etc/httpd/conf.modules.d/10-subversion.conf

最终内容如下:

LoadModule dav_svn_module modules/mod_dav_svn.so LoadModule authz_svn_module modules/mod_authz_svn.so LoadModule dontdothat_module modules/mod_dontdothat.so <Location /svn> DAV svn SVNParentPath /data/SVN AuthName "SVN Repos" AuthType Basic AuthUserFile /etc/svn/svn-auth AuthzSVNAccessFile /etc/svn/authz Require valid-user </Location> 创建SVN Repo sudo mkdir /data/SVN cd /data/SVN sudo svnadmin create repos sudo chown -R apache:apache repos3) 还原Restore

解压全量备份包和增量备份包

sudo xz -d -T 0 repos-5083-Full.xz sudo xz -d -k -T 0 repos-5098-Inc.xz

依次导入解压出来的备份文件

sudo svnadmin load /data/SVN/repos < repos-5083-Full sudo svnadmin load /data/SVN/repos < repos-5098-Inc4)还原权限文件

拷贝备份文件到SVN安装时的配置文件路径地址:

# AuthUserFile /etc/svn/svn-auth # AuthzSVNAccessFile /etc/svn/authz sudo /etc/svn sudo cp /data/etc/svn/authz /etc/svn/ sudo cp /data/etc/svn/svn-auth /etc/svn/ sudo chown -R root:apache /etc/svn/ sudo chmod -R 670 /etc/svn/5) 开启apache并修改防火墙

sudo systemctl start httpd.service sudo systemctl enable httpd.service sudo firewall-cmd --zone=public --permanent --add-service=http sudo firewall-cmd --reload


确认已恢复到到对应Revision:5098

6) iF.SVNAdmin管理界面还原

拷贝svnadmin备份文件到/var/www/html中

sudo cp -rf /data/svnadmin /var/www/html/ sudo chmod -R 777 /var/www/html/svnadmin/data/ sudo chown -R apache:apache /var/www/html/svnadmin/


因为未安装php相关软件包,安装完成,重启即可

sudo yum install php sudo systemctl restart httpd


3.7 验证1)访问验证

SVN访问以及IF.Svnadmin管理界面访问

2)权限验证3)节点Revision还原验证

您可以还会对下面的文章感兴趣:

使用微信扫描二维码后

点击右上角发送给好友