Estratégias de backup do repositório SVN

195

Eu sou novo no SVN e gostaria de saber quais métodos estão disponíveis para fazer backup de repositórios em um ambiente Windows?

Robert Dean
fonte
1
VisualSVN Server para Windows inclui um repositórios SVN built-in recurso para backup e verificar na programação: visualsvn.com/server/features/backup
bahrep

Respostas:

179

Você pode usar algo como (Linux):

svnadmin dump repositorypath | gzip > backupname.svn.gz

Como o Windows não suporta o GZip, é apenas:

svnadmin dump repositorypath > backupname.svn
Nicolai Reuschling
fonte
11
não sei ao certo, mas certamente algumas ferramentas como o 7-zip seriam capazes de compactar dados do STDIN, o que significa que você também poderia usar o primeiro estilo no Windows.
nickf
5
Eu mesmo estou olhando isso e um comentário dos documentos svnbook.red-bean.com/nightly/en/… é que você obterá uma saída muito grande do svnadmin dump, a menos que você use a opção --deltas.
21713 Jason S
5
E Windows suporta gzip, basta obtê-lo a partir dos UnxUtils webpage unxutils.sourceforge.net
Jason S
52
Usando 7Zip: svnadmin dump repositorypath | "%ProgramFiles%\7-Zip\7z.exe" a backup.7z -sibackupname.svn Isso criará um arquivo chamado 'backup.7z' que contém um único arquivo, 'backupname.svn', que é a saída svnadmin dump.
Matt
4
@ Josh Stodola bash :for project in *; do svnadmin dump ${project} | gzip > /backuppath/${project}.svn.gz; done;
Fedir RYKHTIK
107

Usamos svnadmin hotcopy, por exemplo:

svnadmin hotcopy C:\svn\repo D:\backups\svn\repo

Conforme o livro :

Você pode executar este comando a qualquer momento e fazer uma cópia segura do repositório, independentemente de outros processos estarem usando o repositório.

É claro que você pode ZIP (de preferência 7-Zip) a cópia de backup. IMHO É a mais simples das opções de backup: em caso de desastre, há pouco a fazer além de descompactá-lo de volta à posição.

Duncan Smart
fonte
13
Eu acho que o svnadmin dump é preferido para backups por alguns motivos. Veja svn.haxx.se/users/archive-2005-05/0842.shtml
daremon
4
@ Daremon: Eu sugiro que você leia as respostas às postagens às quais você vinculou, especificamente aquela que menciona o svnadmin dump não inclui os arquivos de controle do repositório.
Powerlord
perto corrida, mas, eu estou votando para o svnadmin dump depois de ler as respostas sugeridas por R. Bemrose
mobibob
O comando hotcopy não substitui nem incrementa os backups gerados. Então, se você está planejando para automatizá-lo no Windows usando agendador de tarefas olhada no seguinte arquivo de lote: cfchimp.com/wordpress/2008/05/...
Ryan Sampson
1
Uma palavra de alerta. Não copie a cópia espelhada de um repositório svnsync enquanto o svnsync estiver em execução! A cópia resultante pode estar corrompida. Veja este tópico para detalhes: subversion.open.collab.net/ds/…
zvolkov
22

Aqui está um script Perl que irá:

  1. Fazer backup do repositório
  2. Copie-o para outro servidor via SCP
  3. Recuperar o backup
  4. Crie um repositório de teste a partir do backup
  5. Faça um teste de verificação
  6. Enviar um e-mail com todos os erros (via cron)

O script:

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`;

Origem do script e mais detalhes sobre o racional para esse tipo de backup.

Mark
fonte
19

Eu uso svnsync , que configura um servidor remoto como um espelho / escravo. Tivemos um servidor inoperante há duas semanas e eu pude mudar o escravo para a posição principal com bastante facilidade (só foi necessário redefinir o UUID no repositório escravo para o original).

Outro benefício é que a sincronização pode ser executada por um intermediário, e não como uma tarefa em qualquer servidor. Eu tive um cliente para duas VPNs sincronizar um repositório entre eles.

Tom Mayfield
fonte
então sincroniza as versões repo mais recentes entre os dois, obviamente?
PositiveGuy
1
Mesmo estando no título, não sei se chamaria de "sincronização". É realmente um backup, onde ele faz revisões no mestre e as coloca no escravo. Se você fizesse modificações no escravo, elas quebrariam a "sincronização" ou resultariam em loucura. O uso pretendido da ferramenta é criar espelhos externos, somente leitura, mas ele faz um trabalho admirável ao criar um servidor de backup.
18119 Tom Mayfield
1
O benefício do svnsync é que você pode executar isso com muita frequência. A cada dez minutos ou mesmo a cada confirmação (usando um gancho). O benefício disso é que é possível reduzir a possível perda de dados que você obteria entre o último backup e a perda do repositório ativo.
8DH
12

svnadmin hotcopy

svnadmin hotcopy REPOS_PATH NEW_REPOS_PATH

Esse subcomando faz um backup "quente" completo do seu repositório, incluindo todos os ganchos, arquivos de configuração e, é claro, arquivos de banco de dados.

Adão
fonte
10

svnbackup no Google Code, um aplicativo de console .NET.

Uwe Keim
fonte
5

Basicamente, é seguro copiar a pasta do repositório se o servidor svn estiver parado. (fonte: https://groups.google.com/forum/?fromgroups#!topic/visualsvn/i_55khUBrys%5B1-25%5D )

Portanto, se você tiver permissão para parar o servidor, faça-o e apenas copie o repositório, com algum script ou uma ferramenta de backup. O Cobian Backup se encaixa bem aqui, pois pode parar e iniciar serviços automaticamente, e pode fazer backups incrementais, para que você faça backup apenas de partes do repositório que foram alteradas recentemente (útil se o repositório for grande e você estiver fazendo backup em local remoto) )

Exemplo:

  1. Instale o Cobian Backup
  2. Adicione uma tarefa de backup:

    • Defina a origem para a pasta do repositório (por exemplo C:\Repositories\),

    • Adicionar evento de pré-backup "STOP_SERVICE" VisualSVN,

    • Adicionar evento pós-backup, "START_SERVICE" VisualSVN,

    • Defina outras opções conforme necessário. Criamos backups incrementais, incluindo remoção de antigos, agendamento de backup, destino, compactação incl. divisão de arquivos etc.

  3. Lucro!

atx
fonte
4

existem 2 métodos principais para fazer backup de um servidor svn, primeiro é o hotcopy que criará uma cópia dos arquivos do seu repositório, o principal problema com esta abordagem é que ele salva dados sobre o sistema de arquivos subjacente, para que você possa ter algumas dificuldades ao tentar repostore esse tipo de backup em outro tipo de servidor svn ou em outra máquina. existe outro tipo de backup chamado dump, esse backup não salva nenhuma informação do sistema de arquivos subjacente e é potável em qualquer tipo de servidor SVN baseado no subversion tigiris.org.

sobre a ferramenta de backup, você pode usar a ferramenta svnadmin (é possível fazer hotcopy e dump) no prompt de comando, esse console reside no mesmo diretório em que o servidor svn mora ou você pode pesquisar no google por ferramentas de backup svn.

minha recomendação é que você faça os dois tipos de backup e os tire do escritório para sua conta de e-mail, serviço amazon s3, ftp ou azure services, dessa forma você terá um backup seguro sem ter que hospedar o servidor svn em algum lugar fora seu escritório.

Jose Manuel Ojeda
fonte
4

Aqui uma ferramenta GUI do Windows para fazer um despejo de repositórios de subversão locais e remotos:

https://falsinsoft-software.blogspot.com/p/svn-backup-tool.html

A descrição da ferramenta diz:

Esta ferramenta simples permite fazer um backup de despejo de um repositório de subversão local e remoto. O software funciona da mesma maneira que o "svnadmin", mas não é uma interface gráfica sobre ele. Em vez disso, use diretamente as bibliotecas do subversion para permitir criar dump no modo autônomo sem nenhuma outra ferramenta adicional.

Espero que esta ajuda ...

Suppaman
fonte
Obrigado por compartilhar isso, faz exatamente como indicado.
Ed DeGagne 11/03/16
3

Gosto de copiar todo o diretório repo para o meu local de backup. Dessa forma, se algo acontecer, você pode simplesmente copiar o diretório de volta e estar pronto para ir imediatamente.

Apenas certifique-se de preservar as permissões, se necessário. Normalmente, isso é apenas uma preocupação em máquinas Linux.

Misha M
fonte
7
isso não é exatamente seguro se alguém fizer um commit durante uma operação de cópia - isso aconteceu comigo mesmo com apenas 4 pessoas tendo acesso ao repositório e usando-o com pouca frequência. Veja a resposta de Duncan sobre o uso de hotcopy.
nickf
No entanto, se você estiver trabalhando completamente sozinho, presumo que essa seja uma maneira segura de fazer backup de um repositório? Eu uso o subversion para meus projetos pessoais, e é isso que estou fazendo atualmente.
Andrew Garrison
3

Para repositórios hospedados, você pode usar o svn versão 1.7 svnrdump, que é análogo aos svnadmin dumprepositórios locais. Este artigo fornece uma boa explicação, que se resume basicamente a:

svnrdump dump /URL/to/remote/repository > myRepository.dump

Depois de baixar o arquivo de despejo, você pode importá-lo localmente

svnadmin load /path/to/local/repository < myRepository.dump

ou faça o upload para o host de sua escolha.

Andreas J.
fonte
3

Se você estiver usando o formato do repositório FSFS (o padrão), poderá copiar o próprio repositório para fazer um backup. Com o sistema BerkleyDB mais antigo, o repositório não é independente de plataforma e você geralmente deseja usar o dump svnadmin.

O tópico de documentação do svnbook para backup recomenda o svnadmin hotcopycomando, pois ele resolverá problemas como arquivos em uso e outros.

crashmstr
fonte
2
@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

Este é o arquivo em lotes que eu tenho executando que executa meus backups

RoughPlace
fonte
1

Eu compilei as etapas que segui com o objetivo de fazer um backup do repositório SVN remoto do meu projeto.

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

Isso leva tempo e diz que está buscando os logs do repositório. Ele cria um conjunto de arquivos dentro C:\Documents and Settings\nverma\.svk\local.

Para atualizar este repositório local com o último conjunto de alterações do remoto, basta executar o comando anterior periodicamente.

Agora você pode jogar com seu repositório local (/home/user/.svk/local neste exemplo) como se fosse um repositório SVN normal!

O único problema com essa abordagem é que o repositório local é criado com uma revisão incremental pela revisão real no repositório remoto. Como alguém escreveu:

O comando svk miror gera uma confirmação no repositório recém-criado. Portanto, todas as confirmações criadas pela sincronização subsequente terão números de revisão incrementados em um em comparação com o repositório público remoto.

Mas isso foi bom para mim, pois eu só queria um backup do repositório remoto de tempos em tempos, nada mais.

Verificação:

Para verificar, use o cliente SVN com o repositório local como este:

svn checkout "file:///C:/Documents and Settings\nverma/.svk/local/"  <local-dir-path-to-checkout-onto>

Este comando então faz check-out da revisão mais recente do repositório local. No final, diz Checked out revision N. Essa Nfoi mais uma que a revisão real encontrada no repositório remoto (devido ao problema mencionado acima).

Para verificar se o svk também trouxe todo o histórico, o check-out do SVN foi executado com várias revisões mais antigas usando -r2, 10, 50 etc. Em seguida, os arquivos <local-dir-path-to-checkout-onto>foram confirmados como sendo dessa revisão.

No final, zip o diretório C:/Documents and Settings\nverma/.svk/local/e armazene o zip em algum lugar. Continue fazendo isso regularmente.

Nitin Verma
fonte
0

como já foi dito, o hot-backup.py da equipe do Subversion possui alguns recursos interessantes svnadmin hotcopy

Eu executo uma tarefa agendada em um script python que se aplica a todos os meus repositórios na máquina e usa o hotbackup para manter vários dias de hotcopies (paranóico de corrupção) e svnadmin svndumpem uma máquina remota. A restauração é realmente fácil a partir disso - até agora.

secagem rápida
fonte
0

1.1 Criar despejo a partir do repositório SVN (Subversion)

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

Exemplo real

svnadmin dump /var/www/svn/testrepo > /backups/testrepo.dump

1.2 Despejo criado por Gzip

gzip -9 /path/to/reponame.dump

Exemplo real

gzip -9 /backups/testrepo.dump

1.3 Dump SVN e Dump Gzip com um liner

svnadmin dump /path/to/reponame | gzip -9 > /path/to/reponame.dump.gz

Exemplo real

svnadmin dump /var/www/svn/testrepo |Â gzip -9 > /backups/testrepo.dump.gz

Como fazer backup (despejo) e restaurar (carregar) o repositório SVN (Subversion) no Linux.
Ref: svn subversion backup andrestore

Aamir Shahzad
fonte