Melhor maneira de fazer backups do Subversion?


10

Qual é a melhor maneira de fazer backups do Subversion (em um servidor baseado no Debian).

É para usar svnadmin?

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

Ou talvez apenas para tar o diretório onde estão os repositórios?

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

Quais são os prós e os contras dos itens acima?

Obrigado Johan


Atualização : este é um servidor pequeno, com apenas um punhado de repositórios. Portanto, provavelmente não são necessários backups incrementais, acho melhor focar em mantê-lo simples.

Atualização : usei o script do empacotador de pacotes (que por sua vez era um invólucro do svn-hot-backup) para fazer um backup completo e, em seguida, fiz uma recuperação completa em outro computador limpo. No entanto, removi a parte "SVN_HOTBACKUP_NUM_BACKUPS = 10", pois não estava funcionando para mim.

Por favor, note que eu acho que foi meio simples e o resultado foi muito próximo de apenas tar o diretório. Mas como Manni apontou aqui para usar o svn-hot-backup / "svnadmin hotcopy" é um método mais confiável, pois o tar pode criar backups corrompidos de tempos em tempos, se você não tiver sorte.

Respostas:


11

Procure o script svn-hot-backup. Ele deve ser enviado com o subversion e contém toda a lógica para fazer o que você deseja, além da implementação de automagic em backups antigos. Eu escrevi o seguinte script de wrapper que usa svn-hot-backup para executar como um cronjob noturno para fazer backup de um único servidor com vários repositórios, ligeiramente modificado para ser generalizado.

#!/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 como esse é um wrapper para o svnadmin hotcopy, acho que para recuperar, basta copiar os arquivos em / var / subversion / repos /? Preciso fazer outra coisa?
Johan

'svnadmin Checker' também seria uma boa adição ao script para verificar se o repositório que você acabou de copiar é de fato válido.
Andrioid

@ John - sim, basta copiá-los. "O backup resultante é um repositório Subversion totalmente funcional, capaz de ser descartado como um substituto para o seu repositório ativo, se algo der terrivelmente errado." de svnbook.red-bean.com/nightly/en/...
Jonik

Você também pode usar o comando find para procurar por repositórios que foram alterados apenas nos N dias anteriores. Basta procurar por 'db / current' na saída do comando find. Isso tem a vantagem de que você não precisa atualizar constantemente a variável REPOLIST. Além disso, no SVN 1.8, você não precisará mais hotcopy para um destino vazio, mas poderá anexar a um hotcopy anterior. Provavelmente, isso acelerará os backups de cópia em cópia em 2-3 ordens de grandeza.
Tgharold 09/04

9

Você já viu a documentação sobre isso?

Basicamente, você tem duas opções:

  1. Execute backups incrementais usando svnadmin dump
  2. Faça backup de todo o seu repositório usando svnadmin hotcopy

Simplesmente fazer uma cópia do diretório não é uma opção, pois seu repositório pode mudar enquanto a cópia está sendo feita.

Se você gosta de backups incrementais ou completos, depende da sua quantidade de paranóia, do tamanho do seu repositório, das suas necessidades e da sua infraestrutura.


4

Eu estou recomendando o SVNBackup devido ao fato de ele ser capaz de fazer backups incrementais .

Por que isso é importante? Bem, se você tem uma grande equipe de desenvolvimento e possui um backup diário do Subversion e seu sistema falha 12 horas no backup antigo, o trabalho do dia inteiro é perdido.

Se você fizer backups completos (o que é o SVN hotcopy ) muitas vezes por dia, estará causando um carregamento desnecessário na sua máquina de repositório, o que irritará desenvolvedores impacientes.

Como um bônus; Eu também recomendo o Backup-PC como uma solução de backup. Ele pode fazer backups remotos incrementais e é capaz de economizar muito espaço se você estiver fazendo backup de arquivos idênticos em sistemas diferentes.


4

Eu uso o svnsync para fazer backup em um repositório somente leitura, que é copiado com cópias antigas (dia, semana, mês)



Do manual "E embora existam poucas maneiras de fazer isso, sua principal força é que ele pode operar remotamente".
Johan

+1 por mencionar o svnsync - like dumpe hotcopycertamente tem seus usos. Pode ser bastante útil também para backups incrementais locais.
Jonik

E se o servidor de backup é em um local diferente, você resolver um monte de casos de recuperação em uma única etapa
Zac Thompson

1
Duas coisas se você seguir a rota svnsync: 1) se você tiver um repositório grande, inicie com um svnadmin hotcopy, pois ele é muito mais rápido e faz o backup de dados além de / db / revs 2) adicione a chamada svnsync ao repositório de origem gancho pós-confirmação, para que o espelho esteja sempre atualizado. (Mas manter isso fora do gancho do espelho assim que a tentativa espelho does't para espelhar em si!)
Robert Calhoun

2

Você pode fazer backup incremental com svnadmin, se desejar, deve executar o hot-backup.py antes de criar seu arquivo tar.

Aqui está um artigo sobre como fazer backup de repositórios svn. De qualquer forma, ler o livro SVN é um bom ponto de partida, como dito anteriormente.


0

Eu faço backup de vários repositórios svn de 100 GB + com o rsync antigo simples. svnadmin dumpe svnadmin hotcopylevaria dias nesses repositórios.

Outra coisa a observar é svnadmin dumpnão fazer backup de bloqueios e scripts de gancho.


-1

Aqui está o que faço com meus repositórios: use um serviço de backup de pastas como o Dropbox (aqui está um link para a versão do Linux ). Você simplesmente torna o Dropbox a raiz do seu repositório (ou mesmo acima dele) e o backup é feito toda vez que um arquivo é alterado. Ele não só estará disponível em computadores, mas você poderá acessá-lo on-line e ter versões dele.

Existem vários serviços de backup online - a maioria é gratuita até 2 GB.


1
Isso é bom para pequenos repositórios pessoais, mas dificilmente a "melhor maneira" que o pôster está procurando. Um problema é que você não pode garantir consistência com o acesso simultâneo de vários desenvolvedores. Os principais objetivos de um backup devem ser confiabilidade e consistência, em vez de acesso e versões online.
Martijn Heemels
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.