La meilleure façon de faire des sauvegardes Subversion?

10

Quelle est la meilleure façon de faire des sauvegardes Subversion (sur un serveur basé sur Debian).

Est-ce pour utiliser svnadmin?

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

Ou peut-être juste pour tarer le répertoire où se trouvent les référentiels?

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

Quels sont les avantages et les inconvénients de ce qui précède?

Merci Johan


Mise à jour : il s'agit d'un petit serveur avec seulement une poignée de dépôts. Donc, les sauvegardes incrémentielles ne sont probablement pas nécessaires, je pense qu'il vaut mieux se concentrer sur la simplicité.

Mise à jour : j'ai utilisé le script de wrapper de packs (qui était à son tour un wrapper pour svn-hot-backup) pour effectuer une sauvegarde complète, puis j'ai effectué une récupération complète sur un autre ordinateur propre. Cependant, j'ai supprimé cette partie "SVN_HOTBACKUP_NUM_BACKUPS = 10" car cela ne fonctionnait pas pour moi.

Veuillez noter que je pense que c'était assez simple et que le résultat était très proche de simplement tarer le dir. Mais comme Manni l'a souligné ici, utiliser svn-hot-backup / "svnadmin hotcopy" est une méthode plus fiable, car tar pourrait créer des sauvegardes corrompues de temps en temps si vous n'avez pas de chance.

Johan
la source

Réponses:

11

Recherchez le script svn-hot-backup. Il devrait être livré avec subversion et contient toute la logique pour faire ce que vous voulez, ainsi que le déploiement automatique des anciennes sauvegardes. J'ai écrit le script wrapper suivant qui utilise svn-hot-backup pour fonctionner comme un cronjob nocturne pour sauvegarder un seul serveur avec plusieurs référentiels, légèrement modifié pour être généralisé.

#!/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
la source
1
Et puisque c'est un wrapper pour svnadmin hotcopy, je suppose que pour récupérer je copie les fichiers dans / var / subversion / repos /? Dois-je faire autre chose?
Johan
'svnadmin verify' serait également un bon ajout au script afin de vérifier si le référentiel que vous venez de copier est en fait valide.
Andrioid
@Johan - oui, il suffit de les copier. "La sauvegarde résultante est un référentiel Subversion entièrement fonctionnel, pouvant être déposé en remplacement de votre référentiel en direct en cas de problème horrible." de svnbook.red-bean.com/nightly/en/…
Jonik
Vous pouvez également utiliser la commande find pour rechercher les référentiels qui n'ont changé qu'au cours des N jours précédents. Recherchez simplement 'db / current' dans la sortie de la commande find. Cela a l'avantage que vous n'avez pas besoin de mettre à jour constamment cette variable REPOLIST. De plus, dans SVN 1.8, vous n'aurez plus besoin de copier à chaud vers une destination vide, mais vous pourrez l'ajouter à une copie à chaud précédente. Cela accélérera probablement les sauvegardes à chaud de 2 à 3 ordres de grandeur.
tgharold
9

Avez-vous vu la documentation à ce sujet?

Fondamentalement, vous avez deux options:

  1. Effectuer des sauvegardes incrémentielles à l'aide svnadmin dump
  2. Sauvegardez l'intégralité de votre référentiel à l'aide de svnadmin hotcopy

Faire simplement une copie du répertoire n'est pas une option car votre référentiel peut changer pendant la copie.

Que vous soyez dans des sauvegardes incrémentielles ou complètes dépend de votre quantité de paranoïa, de la taille de votre référentiel, de vos besoins et de votre infrastructure.

innaM
la source
4

Je recommande SVNBackup car il est capable de faire des sauvegardes incrémentielles .

Pourquoi est-ce important? Eh bien, si vous avez une grande équipe de développement et que vous avez une sauvegarde Subversion quotidienne et que votre système échoue 12 heures après l'ancienne sauvegarde, la journée entière est perdue.

Si vous effectuez des sauvegardes complètes (comme la copie à chaud SVN ) plusieurs fois par jour, vous causez une charge inutile sur votre machine de référentiel, cela irritera les développeurs impatients.

En prime; Je recommande également Backup-PC comme solution de sauvegarde. Il peut effectuer des sauvegardes incrémentielles à distance et est capable d'économiser beaucoup d'espace si vous sauvegardez des fichiers identiques sur différents systèmes.

Andrioid
la source
4

J'utilise svnsync pour sauvegarder dans un référentiel autrement en lecture seule, qui est lui-même sauvegardé avec des copies anciennes (jour, semaine, mois)

Steven R. Loomis
la source
D'après le manuel "Et bien qu'il existe peu de façons de le faire, sa principale force est qu'il peut fonctionner à distance".
Johan
+1 pour mentionner svnsync - like dumpet hotcopyil a certainement ses utilisations. Il peut également être très pratique pour les sauvegardes incrémentielles locales.
Jonik
Et si le serveur de sauvegarde se trouve à un emplacement différent, vous résolvez de nombreux cas de récupération en une seule étape
Zac Thompson
1
Deux choses si vous allez suivre la route svnsync: 1) si vous avez un grand dépôt avec un hotcopy svnadmin, car il est beaucoup plus rapide et sauvegarde les données au-delà de / db / revs 2) ajoutez l'appel svnsync au dépôt source hook post-commit pour que le miroir soit toujours à jour. (Mais gardez cela hors des crochets du miroir pour que le miroir n'essaye pas de se refléter!)
Robert Calhoun
2

Vous pouvez faire une sauvegarde incrémentielle avec svnadmin si vous le souhaitez, vous devez exécuter le hot-backup.py avant de faire votre archive tar.

Voici un article sur la sauvegarde des dépôts svn. Quoi qu'il en soit, la lecture du livre SVN est un bon point de départ comme dit précédemment.

Maxwell
la source
0

Je sauvegarde plusieurs référentiels de 100 Go + svn avec un vieux rsync simple. svnadmin dumpet svnadmin hotcopyprendrait des jours sur ces référentiels.

Une autre chose à surveiller est de svnadmin dumpne pas sauvegarder les verrous et les scripts de hook.

kband
la source
-1

Voici ce que je fais avec mes référentiels: utilisez un service de sauvegarde de dossiers comme Dropbox (voici un lien vers leur version Linux ). Vous faites simplement de Dropbox la racine de votre référentiel (ou même au-dessus) et il est sauvegardé à chaque fois qu'un fichier change. Non seulement il sera disponible sur tous les ordinateurs, mais vous pourrez y accéder en ligne et en avoir des versions.

Il existe plusieurs de ces services de sauvegarde en ligne - la plupart sont gratuits jusqu'à 2 Go.

Voyager Tech Guy
la source
1
C'est très bien pour les petites pensions personnelles, mais ce n'est pas la "meilleure façon" que l'affiche recherche. Un problème est que vous ne pouvez pas garantir la cohérence avec un accès simultané par plusieurs développeurs. Les objectifs principaux d'une sauvegarde doivent être la fiabilité et la cohérence, plutôt que l'accès en ligne et les versions.
Martijn Heemels