web-dev-qa-db-ja.com

VisualSVNリポジトリの毎日のバックアップを行うにはどうすればよいですか?

VisualSVNリポジトリの毎日のバックアップを行うにはどうすればよいですか?

VisualSVNServerを搭載したWindowsServer 2003マシンでは、フォルダーのxcopyを実行することを考えていましたC:\ Repoしかし、それが問題を引き起こすかどうかを知るには、svnに精通していません。

ダンプまたはホットコピー、あるいはその両方を使用する必要がありますか?

6
Tyler

他のファイルの束と同じように、それはファイルの束です。システムの残りの部分をバックアップするために使用する方法を使用してください。これはサーバー上にあるので、通常のバックアップスキームにすでに含まれていると思いました。

半ばまともなバックアップソフトウェアを使用している場合は、Windows独自のNTバックアップであっても、ボリュームシャドウコピーサービスを使用する必要があります。これにより、開いているファイルの問題があれば処理されます。

7
John Gardeniers

リポジトリファイルをコピーするだけでは悪い考えです。

...リポジトリへの他のすべてのアクセスを一時的に無効にしない限り、ディレクトリコピーを再帰的に実行するだけで、バックアップに障害が発生するリスクがあります。

svnadmin hotcopyコマンドを使用する必要があります。

リポジトリのメンテナンス>リポジトリのバックアップ

これをスクリプト化して、スケジュールされたタスクとして実行できます。

3
Byran Zaugg

ダンプとホットコピーの両方を行います。それらをバッチファイルに入れ、タスクスケジューラでタスクを作成して毎日実行します。これが私のサンプルバッチファイルです

!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 

バックアップするリポジトリ(プロジェクト)が複数あり、それらが頻繁に変更される場合は、小さなプログラムで上記のバッチファイルを作成する方が簡単です。これが私がこの目的のために書いたものです:

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