Jestem nowy w SVN i chciałbym wiedzieć, jakie metody są dostępne do tworzenia kopii zapasowych repozytoriów w środowisku Windows?
Jestem nowy w SVN i chciałbym wiedzieć, jakie metody są dostępne do tworzenia kopii zapasowych repozytoriów w środowisku Windows?
Odpowiedzi:
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
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
.
for project in *; do svnadmin dump ${project} | gzip > /backuppath/${project}.svn.gz; done;
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.
Na stronie Subversion dostępny jest skrypt hotbackup.py, który jest całkiem przydatny do automatyzacji tworzenia kopii zapasowych.
http://svn.apache.org/repos/asf/subversion/trunk/tools/backup/hot-backup.py.in
Oto skrypt Perla, który:
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.
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.
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.
Możesz utworzyć kopię zapasową repozytorium ( zrzut ) za pomocą svnadmin dump
.
Następnie możesz go zaimportować za pomocą svnadmin load
.
Szczegółowe informacje w SVNBook: „Migracja danych repozytorium za pomocą svnadmin”
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:
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.
Zysk!
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.
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...
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.
W przypadku repozytoriów hostowanych można używać svn w wersji 1.7 svnrdump
, co jest analogiczne jak w svnadmin dump
przypadku 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.
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 hotcopy
polecenia, jak to będzie dbać o kwestie jak pliki w użyciu i takie.
@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
Do codziennego i pełnego rozwiązania do tworzenia kopii zapasowych wystarczy użyć tutaj skryptów kopii zapasowych SVN .
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/local
w 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 N
był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 -r
2, 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.
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 svndump
na zdalnej maszynie. Przywrócenie jest naprawdę łatwe - do tej pory.
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