fragen stichworte

Wie kann ich tägliche Sicherungen für meine VisualSVN-Repos erstellen?

Wie kann ich tägliche Sicherungen für meine VisualSVN-Repos erstellen?

Es ist auf einem Windows Server 2003-Computer mit VisualSVN Server. Ich habe gerade darüber nachgedacht, eine Xcopy des Ordners C: \ Repo durchzuführen, aber ich bin mit svn nicht genug vertraut, um zu wissen, ob dies der Fall ist Probleme verursachen.

Soll ich Dump oder Hotcopy oder beides verwenden?

antworten

Es ist eine Reihe von Dateien, wie jede andere Reihe von Dateien. Verwenden Sie eine beliebige Methode, um den Rest des Systems zu sichern. Da dies auf einem Server ist, hätte ich gedacht, dass es bereits im regulären Backup-Schema enthalten wäre.

Wenn Sie eine halbwegs anständige Sicherungssoftware verwenden, auch Windows-eigenes NT-Backup, sollte der Volume Shadow Copy-Dienst verwendet werden, der sich um eventuell offene Dateien kümmert.

Das Kopieren der Repo-Dateien ist keine gute Idee:

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

Sie sollten den Befehl svnadmin hotcopy verwenden.

Repository-Wartung> Repository-Sicherung

Sie können dies als Skript ausführen und als geplante Aufgabe ausführen.

Ich mache sowohl Dump als auch Hotcopy. Legen Sie sie in eine Batchdatei und erstellen Sie eine Aufgabe mit Taskplaner, um sie täglich auszuführen. Hier ist meine Beispielstapeldatei

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

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

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

Wenn Sie mehrere Repositorys (Projekte) sichern möchten, die häufig geändert werden, ist es einfacher, ein kleines Programm erstellen zu lassen, das die obige Batchdatei für Sie erstellt. Folgendes habe ich zu diesem Zweck geschrieben:

   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);
            }
        }
    }