Il modo migliore per eseguire i backup di Subversion?


10

Qual è il modo migliore per eseguire i backup di Subversion (su un server basato su Debian).

Usare svnadmin?

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

O forse solo per tar la directory in cui si trovano i repository?

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

Quali sono i pro e i contro di cui sopra?

Grazie Johan


Aggiornamento : questo è un piccolo server con solo una manciata di repository. Pertanto, probabilmente non sono necessari backup incrementali, penso che sia meglio concentrarsi sul mantenerlo semplice.

Aggiornamento : ho usato lo script wrapper dei pacchetti (che a sua volta era un wrapper per svn-hot-backup) per fare un backup completo e poi ho fatto un ripristino completo su un altro computer pulito. Tuttavia ho rimosso quella parte "SVN_HOTBACKUP_NUM_BACKUPS = 10" poiché non funzionava per me.

Si prega di notare che ritengo che sia stato un po 'semplice e il risultato è stato molto vicino solo a tar la directory. Ma come ha sottolineato Manni qui per usare svn-hot-backup / "svnadmin hotcopy" è un metodo più affidabile, poiché tar potrebbe di volta in volta creare backup corrotti se si è sfortunati.

Risposte:


11

Cerca lo script svn-hot-backup. Dovrebbe essere fornito con sovversione e contiene tutta la logica per fare ciò che desideri, oltre all'installazione automatica di vecchi backup. Ho scritto il seguente script wrapper che utilizza svn-hot-backup per essere eseguito come cronjob notturno per eseguire il backup di un singolo server con più repository, leggermente modificato per essere generalizzato.

#!/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

1
E poiché si tratta di un wrapper per svnadmin hotcopy, immagino che per il recupero copio i file in / var / subversion / repos /? Devo fare qualcos'altro?
Johan

'svnadmin verify' sarebbe anche una buona aggiunta allo script per verificare se il repository che hai appena copiato sia effettivamente valido.
Andrioid,

@Johan - sì, basta copiarli. "Il backup risultante è un repository Subversion completamente funzionale, in grado di essere inserito come sostituto del repository live qualora qualcosa dovesse andare terribilmente storto." da svnbook.red-bean.com/nightly/it/…
Jonik,

È inoltre possibile utilizzare il comando find per cercare eventuali repository che sono stati modificati solo negli N giorni precedenti. Cerca 'db / current' nell'output del comando find. Questo ha il vantaggio di non dover aggiornare costantemente quella variabile REPOLIST. Inoltre, in SVN 1.8, non sarà più necessario eseguire la hotcopy in una destinazione vuota, ma sarà possibile accodare a una hotcopy precedente. Questo probabilmente accelererà i backup hotcopy di 2-3 ordini di grandezza.
martedì

9

Hai visto la documentazione su questo?

Fondamentalmente, hai due opzioni:

  1. Eseguire backup incrementali utilizzando svnadmin dump
  2. Eseguire il backup dell'intero repository utilizzando svnadmin hotcopy

Fare semplicemente una copia della directory non è un'opzione perché il tuo repository potrebbe cambiare mentre la copia è in corso.

Il fatto che tu sia o meno in backup incrementali o completi dipende dalla tua quantità di paranoia, dalle dimensioni del tuo repository, dalle tue esigenze e dalla tua infrastruttura.


4

Raccomando SVNBackup per il fatto che è in grado di eseguire backup incrementali .

Perché questo è importante? Bene, se hai un grande team di sviluppo e hai un backup Subversion giornaliero e il tuo sistema fallisce 12 ore nel vecchio backup, l'intero lavoro della giornata è perso.

Se esegui backup completi ( qual è la hotcopy SVN ) più volte al giorno stai causando un carico non necessario sul tuo computer repository, questo irrita gli sviluppatori impazienti.

Come bonus; Raccomando anche Backup-PC come soluzione di backup. Può eseguire backup remoti incrementali ed è in grado di risparmiare molto spazio se si esegue il backup di file identici su sistemi diversi.


4

Uso svnsync per eseguire il backup su un repository di sola lettura, di cui viene eseguito il backup con copie obsolete (giorno, settimana, mese)



Dal manuale "E mentre ci sono alcuni modi per farlo, il suo punto di forza è che può operare in remoto".
Johan,

+1 per menzionare svnsync-like dumpe hotcopycertamente ha i suoi usi. Può essere abbastanza utile anche per backup incrementali locali.
Jonik,

E se il server di backup si trova in una posizione diversa, risolvi molti casi di recupero in un solo passaggio
Zac Thompson,

1
Due cose se stai andando sulla rotta svnsync: 1) se hai un repository di grandi dimensioni inizia con una hotcopy svnadmin, poiché è molto più veloce e esegue il backup dei dati oltre / db / revs 2) aggiungi la chiamata svnsync al repository di origine hook post-commit in modo che il mirror sia sempre aggiornato. (Ma tienilo fuori dai ganci dello specchio in modo che lo specchio non cerchi di rispecchiarsi da solo!)
Robert Calhoun,

2

Puoi effettuare backup incrementali con svnadmin se lo desideri, dovresti eseguire hot-backup.py prima di creare il tuo archivio tar.

Ecco un articolo sul backup dei repository svn. Ad ogni modo, leggere il libro SVN è un buon punto di partenza, come detto prima.


0

Eseguo il backup di diversi repository svn da 100 GB + con il semplice vecchio rsync. svnadmin dumpe svnadmin hotcopyrichiederebbe giorni su questi repository.

Un'altra cosa da guardare è svnadmin dumpche non sono presenti blocchi di backup e hook hook.


-1

Ecco cosa faccio con i miei repository: uso un servizio di backup di cartelle come Dropbox (ecco un link alla loro versione di Linux ). Devi semplicemente rendere Dropbox la radice del tuo repository (o anche sopra di esso) e viene eseguito il backup ogni volta che un file cambia. Non solo sarà disponibile su tutti i computer, ma sarai in grado di accedervi online e di avere versioni di esso.

Esistono diversi servizi di backup online, la maggior parte sono gratuiti fino a 2 GB.


1
Questo va bene per piccoli repository personali, ma difficilmente il "modo migliore" che il poster sta cercando. Un problema è che non puoi garantire la coerenza con l'accesso simultaneo di più sviluppatori. Gli obiettivi primari di un backup dovrebbero essere l'affidabilità e la coerenza, anziché l'accesso online e le versioni.
Martijn Heemels,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.