Strategie tworzenia kopii zapasowych repozytorium SVN

195

Jestem nowy w SVN i chciałbym wiedzieć, jakie metody są dostępne do tworzenia kopii zapasowych repozytoriów w środowisku Windows?

Robert Dean
źródło
1
VisualSVN Server dla Windows zawiera wbudowaną funkcję tworzenia kopii zapasowych i weryfikacji repozytoriów SVN zgodnie z harmonogramem: visualsvn.com/server/features/backup
bahrep

Odpowiedzi:

179

Możesz użyć czegoś takiego jak (Linux):

svnadmin dump repositorypath | gzip > backupname.svn.gz

Ponieważ system Windows nie obsługuje GZip, jest to po prostu:

svnadmin dump repositorypath > backupname.svn
Nicolai Reuschling
źródło
11
nie wiem na pewno, ale na pewno niektóre narzędzia, takie jak 7-zip, byłyby w stanie skompresować dane ze STDIN, co oznacza, że ​​możesz użyć pierwszego stylu również w systemie Windows.
nickf
5
Właśnie patrzę na to sam i jeden komentarz z docs svnbook.red-bean.com/nightly/en/… jest taki, że otrzymasz bardzo dużą wydajność zrzutu svnadmin, chyba że użyjesz opcji --deltas.
Jason S
5
System Windows obsługuje gzip, wystarczy pobrać go ze strony unxutils unxutils.sourceforge.net
Jason S
52
Korzystanie z 7Zip: svnadmin dump repositorypath | "%ProgramFiles%\7-Zip\7z.exe" a backup.7z -sibackupname.svn Spowoduje to utworzenie pliku o nazwie „backup.7z”, który zawiera pojedynczy plik „backupname.svn”, który jest wyjściem svnadmin dump.
Matt
4
@Josh Stodola bash :for project in *; do svnadmin dump ${project} | gzip > /backuppath/${project}.svn.gz; done;
Fedir RYKHTIK
107

Używamy hotvopy svnadmin, np .:

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

Zgodnie z książką :

Możesz uruchomić to polecenie w dowolnym momencie i utworzyć bezpieczną kopię repozytorium, niezależnie od tego, czy inne procesy korzystają z repozytorium.

Możesz oczywiście ZIP (najlepiej 7-Zip) kopię zapasową. IMHO Jest to najprostsza z opcji tworzenia kopii zapasowych: w przypadku katastrofy nie pozostaje nic innego, jak rozpakować ją z powrotem na miejsce.

Duncan Smart
źródło
13
Myślę, że zrzut svnadmin jest preferowany do tworzenia kopii zapasowych z kilku powodów. Zobacz svn.haxx.se/users/archive-2005-05/0842.shtml
śmiem
4
@daremon: Sugeruję przeczytanie odpowiedzi na posty, do których prowadzi link, w szczególności ten, który wspomina zrzut svnadmin, nie zawiera plików kontrolnych repozytorium.
Powerlord,
blisko wyścigu, ale głosuję na zrzut svnadmin po przeczytaniu odpowiedzi zasugerowanych przez R. Bemrose'a
mobibob
Polecenie hotcopy nie zastępuje ani nie zwiększa generowanych przez siebie kopii zapasowych. Więc jeśli planujesz zautomatyzować go w systemie Windows za pomocą harmonogramu zadań, spójrz na następujący plik wsadowy: cfchimp.com/wordpress/2008/05/…
Ryan Sampson
1
Słowo ostrzeżenia. Nie kopiuj kopii lustrzanej repozytorium svnsync'd podczas działania svnsync! Powstała kopia może być uszkodzona. Zobacz ten wątek, aby uzyskać szczegółowe informacje: subversion.open.collab.net/ds/…
zvolkov
22

Oto skrypt Perla, który:

  1. Wykonaj kopię zapasową repozytorium
  2. Skopiuj go na inny serwer za pośrednictwem SCP
  3. Odzyskaj kopię zapasową
  4. Utwórz repozytorium testowe z kopii zapasowej
  5. Zrób test
  6. Wyślij e-mail z wszelkimi błędami (przez cron)

Scenariusz:

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`;

Źródło skryptu i więcej szczegółów na temat uzasadnienia dla tego typu kopii zapasowej.

Mark
źródło
19

Używam svnsync , który konfiguruje serwer zdalny jako serwer lustrzany / podrzędny. Dwa tygodnie temu mieliśmy awarię serwera i mogłem dość łatwo przestawić urządzenie podrzędne na pozycję podstawową (wystarczyło zresetować identyfikator UUID w repozytorium urządzeń podrzędnych do oryginalnego).

Kolejną korzyścią jest to, że synchronizacja może być uruchamiana przez pośrednika, a nie jako zadanie na dowolnym serwerze. Mam klienta z dwiema sieciami VPN synchronizującymi repozytorium między nimi.

Tom Mayfield
źródło
więc oczywiście synchronizuje najnowsze wersje repo między nimi?
PositiveGuy,
1
Mimo że jest w tytule, nie wiem, czy nazwałbym to „synchronizacją”. To naprawdę kopia zapasowa, w której weźmie poprawki do mistrza i umieści je na niewolniku. Jeśli dokonałeś modyfikacji w niewolniku, albo przerwałyby „synchronizację”, albo doprowadziłyby do szaleństwa. Przeznaczeniem tego narzędzia jest tworzenie zewnętrznych serwerów tylko do odczytu, ale robi to godną podziwu pracę polegającą na tworzeniu serwera kopii zapasowych.
Tom Mayfield
1
Zaletą svnsync jest to, że możesz uruchamiać to bardzo często. Co dziesięć minut lub nawet przy każdym zatwierdzeniu (za pomocą haka). Zaletą tego jest to, że można zmniejszyć potencjalną utratę danych, którą można uzyskać między ostatnią kopią zapasową a utratą repozytorium na żywo.
8DH
12

svnadmin hotcopy

svnadmin hotcopy REPOS_PATH NEW_REPOS_PATH

Ta komenda tworzy pełną „gorącą” kopię zapasową repozytorium, w tym wszystkich zaczepów, plików konfiguracyjnych i, oczywiście, plików bazy danych.

Adam
źródło
5

Zasadniczo można bezpiecznie skopiować folder repozytorium, jeśli serwer SVN zostanie zatrzymany. (źródło: https://groups.google.com/forum/?fromgroups#!topic/visualsvn/i_55khUBrys%5B1-25%5D )

Jeśli więc możesz zatrzymać serwer, zrób to i po prostu skopiuj repozytorium za pomocą jakiegoś skryptu lub narzędzia do tworzenia kopii zapasowych. Cobian Backup pasuje tutaj ładnie, ponieważ może automatycznie zatrzymywać i uruchamiać usługi oraz może tworzyć przyrostowe kopie zapasowe, więc tworzysz kopie zapasowe tylko tych części repozytorium, które niedawno się zmieniły (przydatne, jeśli repozytorium jest duże i tworzysz kopię zapasową w zdalnej lokalizacji ).

Przykład:

  1. Zainstaluj Cobian Backup
  2. Dodaj zadanie kopii zapasowej:

    • Ustaw źródło na folder repozytorium (np. C:\Repositories\),

    • Dodaj zdarzenie poprzedzające tworzenie kopii zapasowej "STOP_SERVICE"VisualSVN,

    • Dodaj zdarzenie po utworzeniu kopii zapasowej, "START_SERVICE"VisualSVN,

    • Ustaw inne opcje w razie potrzeby. Utworzyliśmy przyrostowe kopie zapasowe, w tym usuwanie starych, harmonogram tworzenia kopii zapasowych, miejsce docelowe, kompresję włącznie. dzielenie archiwów itp.

  3. Zysk!

atx
źródło
4

istnieją 2 główne metody tworzenia kopii zapasowych serwera svn, pierwszy to hotcopy, które utworzą kopię plików repozytorium, głównym problemem z tym podejściem jest to, że zapisuje dane o bazowym systemie plików, więc możesz mieć pewne trudności z próbą repostore ten rodzaj kopii zapasowej na innym serwerze SVN lub innym komputerze. istnieje inny rodzaj kopii zapasowej zwany zrzutem, ta kopia zapasowa nie zapisuje żadnych informacji na temat bazowego systemu plików i jego możliwości nadawania na dowolnym serwerze SVN opartym na subversion tigiris.org.

o narzędziu do tworzenia kopii zapasowych możesz użyć narzędzia svnadmin (jest w stanie wykonać hotcopy i zrzut) z wiersza polecenia, ta konsola znajduje się w tym samym katalogu, w którym mieszka twój serwer svn, lub możesz znaleźć w Google narzędzia do tworzenia kopii zapasowych svn.

zalecam, aby wykonać oba rodzaje kopii zapasowych i zabrać je z biura na konto e-mail, usługę amazon s3, ftp lub usługi lazurowe, w ten sposób uzyskasz bezpieczną kopię zapasową bez konieczności hostowania serwera svn gdzieś poza Twoje biuro.

Jose Manuel Ojeda
źródło
4

Oto narzędzie GUI dla systemu Windows do zrzucenia lokalnych i zdalnych repozytoriów subversion:

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

Opis narzędzia mówi:

To proste narzędzie pozwala na zrobienie kopii zapasowej zrzutu lokalnego i zdalnego repozytorium subversion. Oprogramowanie działa w taki sam sposób jak „svnadmin”, ale nie jest nakładką graficzną. Zamiast tego użyj bezpośrednio bibliotek subversion, aby umożliwić tworzenie zrzutu w trybie autonomicznym bez żadnego dodatkowego narzędzia.

Mam nadzieję, że to pomoże...

Suppaman
źródło
Dzięki za udostępnienie tego, robi dokładnie tak, jak podano.
Ed DeGagne,
3

Chciałbym po prostu skopiować cały katalog repo do mojej lokalizacji kopii zapasowej. W ten sposób, jeśli coś się stanie, możesz po prostu skopiować katalog z powrotem i być gotowym do pracy od razu.

W razie potrzeby pamiętaj o zachowaniu uprawnień. Zazwyczaj dotyczy to tylko maszyn z systemem Linux.

Misha M.
źródło
7
nie jest to całkowicie bezpieczne, jeśli ktoś dokonuje zatwierdzenia podczas operacji kopiowania - zdarzyło mi się to, nawet gdy tylko 4 osoby miały dostęp do repozytorium i rzadko go używały. Zobacz odpowiedź Duncana na temat korzystania z hotcopy.
nickf
Jeśli jednak pracujesz całkowicie solo, zakładam, że jest to bezpieczny sposób na wykonanie kopii zapasowej repo? Używam subversion do moich osobistych projektów i właśnie to robię.
Andrew Garrison,
3

W przypadku repozytoriów hostowanych można używać svn w wersji 1.7 svnrdump, co jest analogiczne jak w svnadmin dumpprzypadku repozytoriów lokalnych. Ten artykuł zawiera przyjemny przewodnik, który zasadniczo sprowadza się do:

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

Po pobraniu pliku zrzutu możesz go zaimportować lokalnie

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

lub prześlij go do wybranego hosta.

Andreas J.
źródło
3

Jeśli używasz formatu repozytorium FSFS (domyślny), możesz skopiować samo repozytorium, aby wykonać kopię zapasową. W przypadku starszego systemu BerkleyDB repozytorium nie jest niezależne od platformy i zazwyczaj należy użyć zrzutu svnadmin.

Temat dokumentacji svnbook do tworzenia kopii zapasowych zaleca svnadmin hotcopypolecenia, jak to będzie dbać o kwestie jak pliki w użyciu i takie.

crashmstr
źródło
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

To jest plik wsadowy, który mam uruchomiony, który wykonuje moje kopie zapasowe

RoughPlace
źródło
1

Skompilowałem kroki, które wykonałem, aby wykonać kopię zapasową zdalnego repozytorium SVN mojego projektu.

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

To wymaga czasu i mówi, że pobiera dzienniki z repozytorium. Tworzy zestaw plików w środku C:\Documents and Settings\nverma\.svk\local.

Aby zaktualizować to lokalne repozytorium najnowszym zestawem zmian ze zdalnego, wystarczy od czasu do czasu uruchomić poprzednie polecenie.

Teraz możesz grać z lokalnym repozytorium ( /home/user/.svk/localw tym przykładzie) tak, jakby to było normalne repozytorium SVN!

Jedynym problemem związanym z tym podejściem jest to, że lokalne repozytorium jest tworzone z przyrostem wersji przez faktyczną wersję w zdalnym repozytorium. Jak ktoś napisał:

Komenda svk miror generuje zatwierdzenie w właśnie utworzonym repozytorium. Tak więc wszystkie zatwierdzenia utworzone przez kolejną synchronizację będą miały numery wersji zwiększone o jeden w porównaniu do zdalnego publicznego repozytorium.

Ale to było dla mnie OK, ponieważ od czasu do czasu chciałem tylko wykonać kopię zapasową zdalnego repozytorium, nic więcej.

Weryfikacja:

Aby to sprawdzić, użyj klienta SVN z lokalnym repozytorium w następujący sposób:

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

To polecenie przechodzi następnie do pobrania najnowszej wersji z lokalnego repozytorium. Na końcu jest napisane Checked out revision N. To Nbyła jedna więcej niż faktyczna wersja znaleziona w zdalnym repozytorium (z powodu wyżej wspomnianego problemu).

Aby sprawdzić, czy svk przyniósł całą historię, uruchomiono kasę SVN z różnymi starszymi wersjami przy użyciu -r2, 10, 50 itd. Następnie <local-dir-path-to-checkout-onto>potwierdzono, że pliki w tej wersji.

Na koniec C:/Documents and Settings\nverma/.svk/local/spakuj katalog i zapisz go gdzieś. Rób to regularnie.

Nitin Verma
źródło
0

jak powiedzieli inni, hot-backup.py z zespołu Subversion ma kilka fajnych funkcji po prostu svnadmin hotcopy

Uruchamiam zaplanowane zadanie na skrypcie Pythona, który pająki dla wszystkich moich repozytoriów na komputerze, i używa hotbackup do przechowywania hotcopies na kilka dni (paranoja korupcji) i svnadmin svndumpna zdalnej maszynie. Przywrócenie jest naprawdę łatwe - do tej pory.

szybki_susz
źródło
0

1.1 Utwórz zrzut z repozytorium SVN (Subversion)

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

Prawdziwy przykład

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

1.2 Zrzut utworzony przez Gzip

gzip -9 /path/to/reponame.dump

Prawdziwy przykład

gzip -9 /backups/testrepo.dump

1.3 Zrzut SVN i Zrzut Gzip z jedną linią

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

Prawdziwy przykład

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

Jak wykonać kopię zapasową (zrzut) i przywrócić (załadować) repozytorium SVN (Subversion) w systemie Linux.
Ref: svn subversion backup andrestore

Aamir Shahzad
źródło