Como posso fazer backups diários do meu VisualSVN Repos? [duplicado]

6

Como posso fazer backups diários dos meus repositórios do VisualSVN?

É em uma máquina Windows Server 2003 com VisualSVN Server, eu estava pensando em apenas fazer um xcopy da pasta C: \ Repo mas eu não estou familiarizado o suficiente com svn para saber se isso vai causar problemas.

Devo usar dump ou hotcopy ou ambos?

    
por Tyler 26.05.2010 / 23:24

3 respostas

7

É um monte de arquivos, como qualquer outro grupo de arquivos. Use o método que você usa para fazer backup do resto do sistema. Como isso está em um servidor, eu teria pensado que já estaria incluído no esquema de backup regular.

Se você estiver usando software de backup meio decente, até mesmo o próprio Windows NT Backup, ele deve estar usando o serviço de Cópia de Sombra de Volume, que cuidará dos problemas de arquivos abertos, se houver algum.

    
por 27.05.2010 / 02:39
3

Apenas copiar os arquivos de reporte é uma má ideia:

...unless you temporarily disable all other access to your repository, simply doing a recursive directory copy runs the risk of generating a faulty backup.

Você deve usar o comando svnadmin hotcopy .

Manutenção de repositório > Backup do repositório

Você pode criar scripts e executá-los como uma tarefa agendada.

    
por 31.05.2010 / 06:02
2

Eu faço dump e hotcopy. Coloque-os em um arquivo de lote e crie uma tarefa com o Agendador de Tarefas para executá-lo diariamente. Aqui está o meu arquivo de lote de amostra

!backing up credentials
copy H:\Repositories\authz G:\Repo-Backups-22-2013\backup
copy H:\Repositories\authz-windows G:\Repo-Backups-22-2013\backup
copy H:\Repositories\htpasswd G:\Repo-Backups-22-2013\backup

!full dump
svnadmin dump H:\Repositories\Proj1 > G:\Repo-Backups-22-2013\dump\Proj1
svnadmin dump H:\Repositories\Proj2 > G:\Repo-Backups-22-2013\dump\Proj2 

!hard copy
svnadmin hotcopy H:\Repositories\Proj1 G:\Repo-Backups-22-2013\backup\Proj1
svnadmin hotcopy H:\Repositories\Proj2 G:\Repo-Backups-22-2013\backup\Proj2 

Se você tem vários repositórios (projetos) para backup e eles mudam com freqüência, seria mais fácil ter um pequeno programa para criar o arquivo de lote acima para você. Aqui está o que eu escrevi para esse propósito:

    public static void CreateBackupScript(string srcFolder, string desFolder, bool fullDump)
        { 
if (string.IsNullOrEmpty(srcFolder) || string.IsNullOrEmpty(desFolder))
            return;

        var dateString = DateTime.Now.ToShortDateString().Replace('/', '-');
        var destination = System.IO.Path.Combine(desFolder, dateString, "backup");

        if (!Directory.Exists(destination))
            Directory.CreateDirectory(destination);

        var source = srcFolder + "\";
        var outputScript = "backup.cmd";
        using (StreamWriter sw = new StreamWriter(outputScript))
        {
            sw.WriteLine("!backing up credentials");
            sw.WriteLine("copy {0}authz {1}", source, destination);
            sw.WriteLine("copy {0}authz-windows {1}", source, destination);
            sw.WriteLine("copy {0}htpasswd {1}", source, destination);

            // dump
            if (fullDump == true)
            {
                sw.WriteLine("!full dump");

                var dumpFolder = System.IO.Path.Combine(desFolder, dateString, "dump");

                if (!Directory.Exists(dumpFolder))
                    Directory.CreateDirectory(dumpFolder);

                foreach (var dir in new DirectoryInfo(source).GetDirectories("*.*", SearchOption.TopDirectoryOnly))
                {
                    sw.WriteLine(@"svnadmin dump {0} > {1}\{2}", dir.FullName, dumpFolder, dir.Name);
                }
            }

            //hot copy
            sw.WriteLine("!hard copy");
            foreach (var dir in new DirectoryInfo(source).GetDirectories("*.*", SearchOption.TopDirectoryOnly))
            {
                sw.WriteLine(@"svnadmin hotcopy {0} {1}\{2}", dir.FullName, destination, dir.Name);
            }
        }
    }
    
por 23.07.2013 / 06:27