1. 程式人生 > >svn備份一般採用三種方式

svn備份一般採用三種方式

這是subversion官方推薦的備份方式。 

1)定義備份策略: 
備份頻度:每週六進行一次全量備份,每週日到週五進行增量備份 
備份地點:備份儲存路徑到/home/backup/svn/ 
備份命名:全量備份檔名為:weekly_fully_backup.yymmdd,增量備份檔案命名為:daily-incremental-backup.yymmdd 
備份時間:每晚21點開始 
備份檢查:每月末進行svnadmin load恢復試驗。 
2)建立全量備份指令碼: 
在~/下建立一個perl指令碼檔案,名為weekly_backup.pl,執行全量備份,並壓縮備份檔案,程式碼如下(本程式碼只針對一個庫的備份,如果是多個庫請做相應改動): 
     
#!/usr/bin/perl -w 
my $svn_repos="/home/svn/repos/project1"; 
my $backup_dir="/home/backup/svn/"; 
my $next_backup_file = "weekly_fully_backup.".`date +%Y%m%d`; 

$youngest=`svnlook youngest $svn_repos`; 
chomp $youngest; 

print "Backing up to revision $youngest\n"; 
my $svnadmin_cmd="svnadmin dump --revision 0:$youngest $svn_repos >$backup_dir/$next_backup_file"; 
`$svnadmin_cmd`; 
open(LOG,">$backup_dir/last_backed_up"); #記錄備份的版本號 
print LOG $youngest; 
close LOG; 
#如果想節約空間,則再執行下面的壓縮指令碼 
print "Compressing dump file...\n"; 
print `gzip -g $backup_dir/$next_backup_file`; 

3)建立增量備份指令碼: 
在全量備份的基礎上,進行增量備份:在~/下建立一個perl指令碼檔案,名為:daily_backup.pl,程式碼如下: 

#!/usr/bin/perl -w 
my $svn_repos="/home/svn/repos/project1"; 
my $backup_dir="/home/backup/svn/"; 
my $next_backup_file = "daily_incremental_backup.".`date +%Y%m%d`; 

open(IN,"$backup_dir/last_backed_up"); 
$previous_youngest = ; 
chomp $previous_youngest; 
close IN; 

$youngest=`svnlook youngest $svn_repos`; 
chomp $youngest; 
if ($youngest eq $previous_youngest) 

  print "No new revisions to backup.\n"; 
  exit 0; 

my $first_rev = $previous_youngest + 1; 
print "Backing up revisions $youngest ...\n"; 
my $svnadmin_cmd = "svnadmin dump --incremental --revision $first_rev:$youngest $svn_repos > $backup_dir/$next_backup_file"; 
`$svnadmin_cmd`; 
open(LOG,">$backup_dir/last_backed_up"); #記錄備份的版本號 
print LOG $youngest; 
close LOG; 
#如果想節約空間,則再執行下面的壓縮指令碼 
print "Compressing dump file...\n"; 
print `gzip -g $backup_dir/$next_backup_file`; 
   
4)配置/etc/crontab檔案 
配置 /etc/crontab 檔案,指定每週六執行weekly_backup.pl,指定週一到週五執行daily_backup.pl; 
具體步驟俺就不囉嗦了. 
   
5)備份恢復檢查 
在 月底恢復檢查中或者在災難來臨時,請按照如下步驟進行恢復:恢復順序從低版本逐個恢復到高版本;即,先恢復最近的一次完整備份 weekly_full_backup.071201(舉例),然後恢復緊挨著這個檔案的增量備份 daily_incremental_backup.071202,再恢復後一天的備份071203,依次類推。如下: 
user1>mkdir newrepos 
user1>svnadmin create newrepos 
user1>svnadmin load newrepos < weekly_full_backup.071201 
user1>svnadmin load newrepos < daily_incremental_backup.071202 
user1>svnadmin load newrepos < daily_incremental_backup.071203 
.... 

如果備份時採用了gzip進行壓縮,恢復時可將解壓縮和恢復命令合併,簡單寫成: 
user1>zcat weekly_full_backup.071201 | svnadmin load newrepos 
user1>zcat daily_incremental_backup.071202 | svnadmin load newrepos 
...