Najlepszy sposób na tworzenie kopii zapasowych Subversion?

10

Jaki jest najlepszy sposób wykonywania kopii zapasowych Subversion (na serwerze opartym na Debianie).

Czy to użyć svnadmin?

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

A może po prostu wykasować katalog, w którym znajdują się repozytoria?

tar -cvzf svn.backup.tar.gz /var/subversion/

Jakie są zalety i wady powyższych?

Dzięki, Johan


Aktualizacja : Jest to mały serwer z tylko kilkoma repozytoriami. Tak więc przyrostowe kopie zapasowe prawdopodobnie nie są potrzebne, myślę, że lepiej skupić się na prostocie.

Aktualizacja : Użyłem skryptu opakowania paczek (który z kolei był opakowaniem dla svn-hot-backup), aby wykonać pełną kopię zapasową, a następnie wykonałem pełne odzyskiwanie na innym czystym komputerze. Jednak usunąłem tę część „SVN_HOTBACKUP_NUM_BACKUPS = 10”, ponieważ nie działała ona dla mnie.

Należy pamiętać, że uważam, że było to dość proste, a wynik był bardzo bliski, aby po prostu splądrować reż. Ale jak wskazał tutaj Manni, użycie svn-hot-backup / „svnadmin hotcopy” jest bardziej niezawodną metodą, ponieważ tar może od czasu do czasu tworzyć uszkodzone kopie zapasowe, jeśli masz pecha.

Johan
źródło

Odpowiedzi:

11

Poszukaj skryptu svn-hot-backup. Powinien być dostarczany z subwersją i zawiera całą logikę do robienia tego, co chcesz, a także automagiczne wdrażanie starych kopii zapasowych. Napisałem następujący skrypt otoki, który używa svn-hot-backup do działania jako cronjob w nocy, aby wykonać kopię zapasową jednego serwera z wieloma repozytoriami, nieco zmodyfikowanymi w celu uogólnienia.

#!/bin/bash

#
# Dumps the svn repos to a file and backs it up
# to a local directory.

#Keeps the last 10 revisions
REPODIR="/var/repos"
BAKDIR="/data/backup/svn"
PROG="/usr/local/sbin/svn-hot-backup"
REPOLIST='repo1 repo2 repo3'

if [ ! -x "${PROG}" ]
then
        echo "svnbak: Could not execute \`${PROG}\`"
        exit 1
fi

for repo in ${REPOLIST}
do
    # Dump the database to a backup file
    echo "svnbak: Dumping subversion repository:  ${repo}"
    SVN_HOTBACKUP_NUM_BACKUPS=10 nice ${PROG} --archive-type=gz ${REPODIR}/${repo} ${BAKDIR}/${repo} &> /tmp/svnbak.$$

    if [ "$?" -eq "1" ]
    then
        echo "svnbak: Hot backup on '${repo}' failed with message:"
        /bin/cat /tmp/svnbak.$$
    fi

    /bin/rm /tmp/svnbak.$$
done

exit 0
Scott Pack
źródło
1
A ponieważ jest to opakowanie dla hotvopy svnadmin, myślę, że do odzyskania po prostu kopiuję pliki w / var / subversion / repos /? Czy muszę zrobić coś innego?
Johan
Polecenie „svnadmin Verse” byłoby dobrym dodatkiem do skryptu, aby sprawdzić, czy właśnie skopiowane repozytorium jest w rzeczywistości prawidłowe.
Andrioid,
@Johan - tak, po prostu je skopiuj. „Powstała kopia zapasowa jest w pełni funkcjonalnym repozytorium Subversion, które może zostać umieszczone jako zamiennik twojego repozytorium na żywo, jeśli coś pójdzie strasznie nie tak”. from svnbook.red-bean.com/nightly/en/…
Jonik
Możesz także użyć polecenia find, aby wyszukać repozytoria, które zmieniły się tylko w ciągu ostatnich N dni. Po prostu wyszukaj „db / current” w danych wyjściowych polecenia find. Ma to tę zaletę, że nie trzeba ciągle aktualizować tej zmiennej REPOLIST. Ponadto w wersji SVN 1.8 nie będzie już konieczne tworzenie kopii zapasowej w pustym miejscu docelowym, ale będzie można dołączyć ją do poprzedniej wersji. Prawdopodobnie przyspieszy to tworzenie kopii zapasowych o 2-3 rzędy wielkości.
tgharold
9

Czy widziałeś dokumentację na ten temat?

Zasadniczo masz dwie opcje:

  1. Wykonuj przyrostowe kopie zapasowe za pomocą svnadmin dump
  2. Wykonaj kopię zapasową całego repozytorium za pomocą svnadmin hotcopy

Po prostu wykonanie kopii katalogu nie jest opcją, ponieważ Twoje repozytorium może się zmienić podczas tworzenia kopii.

To, czy chcesz tworzyć kopie przyrostowe, czy pełne, zależy od ilości paranoi, wielkości repozytorium, potrzeb i infrastruktury.

innaM
źródło
4

Polecam SVNBackup ze względu na fakt, że jest on w stanie wykonywać przyrostowe kopie zapasowe .

Dlaczego to jest ważne? Cóż, jeśli masz duży zespół programistów i masz codzienną kopię zapasową Subversion, a twój system zawiedzie 12 godzin od starej kopii zapasowej, cały dzień pracy zostanie utracony.

Jeśli wykonujesz pełne kopie zapasowe (którym jest skrót SVN ) wiele razy dziennie, powodujesz niepotrzebne ładowanie maszyny repozytorium, co zirytuje niecierpliwych programistów.

Jako bonus; Polecam również Backup-PC jako rozwiązanie do tworzenia kopii zapasowych. Może wykonywać przyrostowe zdalne kopie zapasowe i jest w stanie zaoszczędzić dużo miejsca, jeśli tworzysz kopie zapasowe identycznych plików w różnych systemach.

Andrioid
źródło
4

Używam svnsync do tworzenia kopii zapasowych w repozytorium przeznaczonym tylko do odczytu, które samo w sobie jest archiwizowane z przestarzałymi kopiami (dzień, tydzień, miesiąc)

Steven R. Loomis
źródło
Z podręcznika „I choć jest na to kilka sposobów, jego podstawową siłą jest to, że może działać zdalnie”.
Johan
+1 za wzmiankę o svnsync - like dumpi na hotcopypewno ma swoje zastosowania. Może to być bardzo przydatne również w przypadku lokalnych przyrostowych kopii zapasowych.
Jonik,
A jeśli serwer zapasowy znajduje się w innej lokalizacji, w jednym kroku rozwiązujesz wiele przypadków odzyskiwania
Zac Thompson
1
Dwie rzeczy, jeśli zamierzasz wybrać trasę svnsync: 1) jeśli masz duże repozytorium, zacznij od hotvopy svnadmin, ponieważ jest ono znacznie szybsze i tworzy kopie zapasowe danych poza / db / revs 2) dodaj wywołanie svnsync do repozytorium źródłowego hak po zatwierdzeniu, dzięki czemu lustro jest zawsze aktualne. (Ale trzymaj to z daleka od haków lustra, aby lustro nie próbowało sam siebie odzwierciedlać!)
Robert Calhoun,
2

Możesz wykonać przyrostową kopię zapasową za pomocą svnadmin, jeśli chcesz, powinieneś uruchomić hot-backup.py przed utworzeniem archiwum tar.

Oto artykuł na temat tworzenia kopii zapasowych repozytoriów SVN. Tak czy inaczej, czytanie książki SVN jest dobrym punktem wyjścia, jak powiedziano wcześniej.

Maxwell
źródło
0

Tworzę kopie zapasowe kilku repozytoriów SVN 100GB + zwykłym starym rsync. svnadmin dumpi svnadmin hotcopyzajmie to dni w tych repozytoriach.

Inną rzeczą do obejrzenia jest svnadmin dumpbrak kopii zapasowych blokad i skryptów przechwytujących.

kband
źródło
-1

Oto, co robię z moimi repozytoriami: skorzystaj z usługi tworzenia kopii zapasowych folderów, takiej jak Dropbox (tutaj jest link do ich wersji dla systemu Linux ). Po prostu ustawiasz Dropbox jako katalog główny swojego repozytorium (lub nawet nad nim), a kopia zapasowa jest tworzona przy każdej zmianie pliku. Będzie nie tylko dostępny na różnych komputerach, ale będziesz mógł uzyskać do niego dostęp online i mieć jego wersje.

Istnieje kilka takich usług tworzenia kopii zapasowych online - większość z nich jest bezpłatna do 2 GB.

Podróżujący facet techniczny
źródło
1
Jest to dobre w przypadku małych osobistych repozytoriów, ale nie jest to „najlepszy sposób”, którego szuka plakat. Jednym z problemów jest to, że nie można zagwarantować spójności z równoczesnym dostępem wielu programistów. Podstawowymi celami tworzenia kopii zapasowych powinna być niezawodność i spójność, a nie dostęp i wersje online.
Martijn Heemels,