SVN veri havuzu yedekleme stratejileri


195

SVN'de yeniyim ve bir Windows ortamında depoları yedeklemek için hangi yöntemlerin kullanılabilir olduğunu bilmek ister misiniz?


1
Windows için VisualSVN Server, zamanında SVN depolarını yedeklemek ve doğrulamak için yerleşik bir özellik içerir: visualsvn.com/server/features/backup
bahrep

Yanıtlar:


179

(Linux) gibi bir şey kullanabilirsiniz:

svnadmin dump repositorypath | gzip > backupname.svn.gz

Windows GZip'i desteklemediğinden sadece:

svnadmin dump repositorypath > backupname.svn

11
kesin olarak bilmiyorum, ama kesinlikle 7-zip gibi bazı araçlar STDIN verileri sıkıştırmak mümkün olacak, yani Windows'da da ilk stili kullanabilirsiniz anlamına gelir.
nickf

5
Ben sadece kendime bakıyorum ve svnbook.red-bean.com/nightly/en/… dokümanlarından bir yorum --deltas seçeneğini kullanmazsanız, svnadmin dökümünün çok büyük bir çıktısını alacağınızdır.
Jason S

5
Ve Windows gzip'i destekliyor, sadece unxutils web sitesinden unxutils.sourceforge.net'i alın
Jason S

52
7Zip kullanma: svnadmin dump repositorypath | "%ProgramFiles%\7-Zip\7z.exe" a backup.7z -sibackupname.svn Bu, 'backup.7z' adında tek bir dosya içeren 'backupname.svn' adlı bir dosya oluşturur svnadmin dump.
Matt

4
@Josh Stodola bash :for project in *; do svnadmin dump ${project} | gzip > /backuppath/${project}.svn.gz; done;
Fedir RYKHTIK

107

Svnadmin hotcopy kullanıyoruz, örneğin:

svnadmin hotcopy C:\svn\repo D:\backups\svn\repo

Gereğince kitabında :

Bu komutu istediğiniz zaman çalıştırabilir ve diğer işlemlerin veri havuzunu kullanıp kullanmadığına bakılmaksızın deponun güvenli bir kopyasını oluşturabilirsiniz.

Tabii ki yedek kopyayı ZIP (tercihen 7-Zip) yapabilirsiniz. IMHO Yedekleme seçeneklerinin en basit olanıdır: felaket durumunda tekrar yerine koymaktan başka yapacak çok az şey vardır.


13
Bence svnadmin dökümü birkaç nedenden dolayı yedeklemeler için tercih edilir. Bkz svn.haxx.se/users/archive-2005-05/0842.shtml
daremon

4
@daremon: Bağlandığınız gönderilerin yanıtlarını okumanızı öneririm, özellikle svnadmin dökümünden bahseden yanıtın kontrol dosyalarını içermiyor.
Powerlord

yakın yarış, ama ben R. Bemrose tarafından önerilen cevapları okuduktan sonra svnadmin dökümü için oy
mobibob 23:11

Hotcopy komutu, oluşturduğu yedeklemelerin üzerine yazmaz veya artırmaz. Bu yüzden, görev zamanlayıcısını kullanarak pencerelerde otomatikleştirmeyi planlıyorsanız, aşağıdaki toplu iş dosyasına bakın: cfchimp.com/wordpress/2008/05/…
Ryan Sampson

1
Uyarı kelimesi. Svnsync çalışırken bir deponun ayna kopyasını kopyalamayın! Ortaya çıkan kopya bozulmuş olabilir. Ayrıntılar için bu konuya bakın: subversion.open.collab.net/ds/…
zvolkov


22

İşte bir Perl betiği:

  1. Repoyu yedekle
  2. SCP ile başka bir sunucuya kopyalayın
  3. Yedeklemeyi al
  4. Yedeklemeden bir test havuzu oluşturun
  5. Test ödemesi yapın
  6. Herhangi bir hatayla size e-posta gönderin (cron üzerinden)

Senaryo:

my $svn_repo = "/var/svn";  
my $bkup_dir = "/home/backup_user/backups";
my $bkup_file = "my_backup-";
my $tmp_dir = "/home/backup_user/tmp";   
my $bkup_svr = "my.backup.com";
my $bkup_svr_login = "backup";

$bkup_file = $bkup_file . `date +%Y%m%d-%H%M`;
chomp $bkup_file;
my $youngest = `svnlook youngest $svn_repo`;
chomp $youngest;

my $dump_command = "svnadmin  -q dump $svn_repo > $bkup_dir/$bkup_file ";
print "\nDumping Subversion repo $svn_repo to $bkup_file...\n";
print `$dump_command`;
print "Backing up through revision $youngest... \n";
print "\nCompressing dump file...\n";
print `gzip -9 $bkup_dir/$bkup_file\n`;
chomp $bkup_file;
my $zipped_file = $bkup_dir . "/" . $bkup_file . ".gz";
print "\nCreated $zipped_file\n";
print `scp $zipped_file $bkup_svr_login\@$bkup_svr:/home/backup/`;
print "\n$bkup_file.gz transfered to $bkup_svr\n";

#Test Backup
print "\n---------------------------------------\n";
print "Testing Backup";
print "\n---------------------------------------\n";
print "Downloading $bkup_file.gz from $bkup_svr\n";
print `scp $bkup_svr_login\@$bkup_svr:/home/backup/$bkup_file.gz $tmp_dir/`;
print "Unzipping $bkup_file.gz\n";
print `gunzip $tmp_dir/$bkup_file.gz`;
print "Creating test repository\n";
print `svnadmin create $tmp_dir/test_repo`;
print "Loading repository\n";
print `svnadmin -q load $tmp_dir/test_repo < $tmp_dir/$bkup_file`;
print "Checking out repository\n";
print `svn -q co file://$tmp_dir/test_repo $tmp_dir/test_checkout`;
print "Cleaning up\n";
print `rm -f $tmp_dir/$bkup_file`;
print `rm -rf $tmp_dir/test_checkout`;
print `rm -rf $tmp_dir/test_repo`;

Komut dosyası kaynağı ve bu tür yedekleme için rasyonel hakkında daha fazla ayrıntı.


19

Uzak sunucuyu yansıtma / slave olarak ayarlayan svnsync kullanıyorum . İki hafta önce bir sunucumuz vardı ve köle birincil konuma kolayca geçebildim (sadece köle deposundaki UUID'yi orijinaline sıfırlamak zorunda kaldım).

Başka bir avantajı, eşitlemenin her iki sunucuda bir görev olarak değil, bir orta adam tarafından çalıştırılabilmesidir. İki VPN aralarında bir havuzu senkronize eden bir istemcim vardı.


açıkçası ikisi arasında en son repo sürümlerini eşitler?
PositiveGuy

1
Başlıkta olmasına rağmen buna "senkronizasyon" diyeceğimi bilmiyorum. Gerçekten, ustada revizyonlar alıp köle üzerine koyacağı bir yedek. Köle üzerinde değişiklik yaptıysanız ya "senkronizasyonu" bozar ya da deliliğe neden olurlar. Aracın amaçlanan kullanımı, site dışı, salt okunur aynalar oluşturmaktır, ancak yedekleme sunucusu oluşturmak için takdire şayan bir iş yapar.
Tom Mayfield

1
Svnsync'in yararı, bunu çok sık çalıştırabilmenizdir. Her on dakikada bir, hatta her işlemde (bir kanca kullanarak). Bunun yararı, son yedekleme ile canlı repo kaybolduğunda karşılaşabileceğiniz potansiyel veri kaybını azaltabilmenizdir.
8DH

12

svnadmin hotcopy

svnadmin hotcopy REPOS_PATH NEW_REPOS_PATH

Bu alt komut, tüm kancalar, yapılandırma dosyaları ve elbette veritabanı dosyaları dahil olmak üzere deponuzun tam bir “sıcak” yedeğini oluşturur.




5

Temel olarak svn sunucusu durdurulmuşsa, depo klasörünü kopyalamak güvenlidir. (kaynak: https://groups.google.com/forum/?fromgroups#!topic/visualsvn/i_55khUBrys%5B1-25%5D )

Sunucuyu durdurma izniniz varsa, bunu yapın ve depoyu bir komut dosyasıyla veya bir yedekleme aracıyla kopyalayın. Cobian Backup, hizmetleri otomatik olarak durdurabildiği ve başlatabildiği için buraya çok iyi uyuyor ve artımlı yedeklemeler yapabiliyor, böylece yalnızca son zamanlarda değişen depo bölümlerini yedekliyorsunuz (depo büyükse ve uzak bir konuma yedekliyorsanız faydalıdır) ).

Misal:

  1. Cobian Backup'ı yükleyin
  2. Bir yedekleme görevi ekleyin:

    • Kaynağı depo klasörüne ayarlayın (ör. C:\Repositories\),

    • Yedekleme öncesi olayı "STOP_SERVICE"VisualSVN ekleyin ,

    • Yedekleme sonrası etkinliği ekle, "START_SERVICE"VisualSVN,

    • Diğer seçenekleri gerektiği gibi ayarlayın. Eskilerin kaldırılması, yedekleme zamanlaması, hedef, sıkıştırma dahil olmak üzere artımlı yedeklemeler kurduk. arşiv bölme vb.

  3. Kar!


4

bir svn sunucusunu yedeklemek için 2 ana yöntem vardır, ilk önce depo dosyalarınızın bir kopyasını oluşturacak hotcopy, bu yaklaşımla ilgili temel sorun, temel dosya sistemi hakkında veri kaydetmesidir, bu yüzden depolamayı denemede bazı zorluklar yaşayabilirsiniz başka bir svn sunucu türünde veya başka bir makinede bu tür bir yedekleme. dökümü adı verilen başka bir yedekleme türü vardır, bu yedekleme altta yatan dosya sistemi ve onun tigiris.org alt sürümüne dayalı herhangi bir SVN sunucusuna içilebilir herhangi bir bilgi kaydetmez.

yedekleme aracı hakkında komut isteminden svnadmin aracını (hotcopy ve dump yapabilir) kullanabilirsiniz, bu konsol svn sunucunuzun yaşadığı aynı dizinde bulunur veya svn yedekleme araçları için google.

benim tavsiyem, her iki yedekleme türünü de yapmanız ve bunları e-posta hesabınıza, amazon s3 hizmetine, ftp veya masmavi hizmetlere göndermenizdir, böylece svn sunucusunu bir yerde barındırmak zorunda kalmadan güvenli bir yedeklemeniz olur senin ofisin.


4

Burada yerel ve uzak yıkım depolarının bir dökümü yapmak için bir GUI Windows aracı:

https://falsinsoft-software.blogspot.com/p/svn-backup-tool.html

Araç açıklaması şunları söylüyor:

Bu basit araç, yerel ve uzak bir çökme deposunun döküm yedeğini almanıza izin verir. Yazılım, "svnadmin" ile aynı şekilde çalışır, ancak üzerinde bir GUI ön ucu değildir. Bunun yerine, başka bir ek araç kullanmadan bağımsız modda döküm oluşturmanıza izin vermek için doğrudan alt sürüm kitaplıklarını kullanın.

Umarım bu yardım ...


Bunu paylaştığınız için teşekkür ederiz, aynen belirtildiği gibi yapar.
Ed DeGagne

3

Tüm repo dizinini yedekleme konumuma kopyalamak istiyorum. Bu şekilde, bir şey olursa, dizini geri kopyalayabilir ve hemen çalışmaya hazır olabilirsiniz.

Gerekirse izinleri koruduğunuzdan emin olun. Genellikle, bu sadece Linux makineleri için bir sorundur.


7
Birisi bir kopyalama işlemi sırasında bir taahhütte bulunursa bu tam olarak güvenli değildir - sadece 4 kişi repoya erişebiliyor ve nadiren kullanıyor olsa bile bana bu oldu. Bkz. Duncan'ın hotcopy kullanımı ile ilgili cevabı.
nickf

Ancak, tamamen yalnız çalışıyorsanız, o zaman bu bir repo yedeklemek için güvenli bir yol olduğunu varsayalım? Yıkımı kişisel projelerim için kullanıyorum ve şu anda yapıyorum.
Andrew Garrison

3

Barındırılan depolar için, svn 1.7 sürümünden beri kullanabilirsiniz svnrdump, bu da svnadmin dumpyerel depolar ile benzerdir . Bu makale , esasen aşağıdakilere dayanan güzel bir gözden geçirme sağlar:

svnrdump dump /URL/to/remote/repository > myRepository.dump

Döküm dosyasını indirdikten sonra yerel olarak içe aktarabilirsiniz

svnadmin load /path/to/local/repository < myRepository.dump

veya seçtiğiniz ana bilgisayara yükleyin.


3

FSFS veri havuzu biçimini (varsayılan) kullanıyorsanız, yedekleme yapmak için veri havuzunun kendisini kopyalayabilirsiniz. Eski BerkleyDB sistemiyle, depo platformdan bağımsız değildir ve genellikle svnadmin dökümü kullanmak istersiniz.

Yedekleme için svnbook dokümantasyon konu önerir svnadmin hotcopykullanımda ve bu tür dosyaların gibi konularda ilgilenir gibi komutu.


2
@echo off
set hour=%time:~0,2%
if "%hour:~0,1%"==" " set hour=0%time:~1,1%
set folder=%date:~6,4%%date:~3,2%%date:~0,2%%hour%%time:~3,2%

echo Performing Backup
md "\\HOME\Development\Backups\SubVersion\%folder%"

svnadmin dump "C:\Users\Yakyb\Desktop\MainRepositary\Jake" | "C:\Program Files\7-Zip\7z.exe" a "\\HOME\Development\Backups\SubVersion\%folder%\Jake.7z" -sibackupname.svn

Bu, Yedeklerimi gerçekleştiren çalıştığım Toplu Dosya



1

Projemin uzak SVN deposunun bir yedeğini almak için izlediğim adımları derledim.

install svk (http://svk.bestpractical.com/view/SVKWin32)

install svn (http://sourceforge.net/projects/win32svn/files/1.6.16/Setup-Subversion-1.6.16.msi/download)

svk mirror //local <remote repository URL>

svk sync //local

Bu zaman alır ve günlükleri depodan aldığını söyler. İçinde bir dosya kümesi oluşturur C:\Documents and Settings\nverma\.svk\local.

Bu yerel havuzu uzaktaki en son değişikliklerle güncellemek için, zaman zaman önceki komutu çalıştırın.

Artık yerel bir deponuzla ( /home/user/.svk/localbu örnekte) normal bir SVN deposu gibi oynayabilirsiniz !

Bu yaklaşımla ilgili tek sorun, yerel deponun uzak depodaki fiili revizyonun revizyon artışlarıyla oluşturulmasıdır. Birisinin yazdığı gibi:

Svk miror komutu, yeni oluşturulan depoda bir taahhüt oluşturur. Bu nedenle, sonraki senkronizasyon tarafından oluşturulan tüm taahhütlerin, halka açık depoya kıyasla revizyon sayıları bir artırılır.

Ancak, sadece uzak depo zaman zaman bazı yedekleme istedim, bu benim için Tamam, başka bir şey.

Doğrulama:

Doğrulamak için SVN istemcisini aşağıdaki gibi yerel havuzla kullanın:

svn checkout "file:///C:/Documents and Settings\nverma/.svk/local/"  <local-dir-path-to-checkout-onto>

Bu komut daha sonra yerel depodaki en son revizyonu kontrol etmeye gider. Sonunda diyor Checked out revision N. Bu N, uzak depoda bulunan gerçek revizyondan biriydi (yukarıda belirtilen sorundan dolayı).

Svk'nin tüm geçmişi de getirdiğini doğrulamak için, SVN kasası -r2, 10, 50 vb. Kullanılarak çeşitli eski revizyonlarla gerçekleştirildi . Daha sonra içindeki dosyaların <local-dir-path-to-checkout-onto>bu revizyondan olduğu doğrulandı.

Sonunda, dizini C:/Documents and Settings\nverma/.svk/local/sıkıştırın ve zip'i bir yerde saklayın. Bunu düzenli olarak yapmaya devam edin.


0

Diğerlerinin söylediği gibi, Subversion ekibinden hot-backup.py sadece düz üzerinde bazı güzel özelliklere sahip svnadmin hotcopy

Makinedeki tüm depolarım için örümcekler içeren bir python betiğinde zamanlanmış bir görev çalıştırıyorum ve birkaç gün değerinde hotcopies (yolsuzluk paranoid) ve svnadmin svndumpuzak bir makinede tutmak için hotbackup kullanıyor . Restorasyon bundan gerçekten kolay - şimdiye kadar.


0

1.1 SVN (Subversion) deposundan Döküm Oluştur

svnadmin dump /path/to/reponame > /path/to/reponame.dump

Gerçek örnek

svnadmin dump /var/www/svn/testrepo > /backups/testrepo.dump

1.2 Gzip Oluşturulan Döküm

gzip -9 /path/to/reponame.dump

Gerçek örnek

gzip -9 /backups/testrepo.dump

1.3 Tek astarlı SVN Dökümü ve Gzip Dökümü

svnadmin dump /path/to/reponame | gzip -9 > /path/to/reponame.dump.gz

Gerçek örnek

svnadmin dump /var/www/svn/testrepo |Â gzip -9 > /backups/testrepo.dump.gz

Linux'ta SVN (Subversion) deposunu yedekleme (döküm) ve geri yükleme (yükleme).
Referans: svn subversion backup andrestore

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.