Subversionバックアップを実行する最良の方法?


10

(Debianベースのサーバーで)Subversionバックアップを実行する最良の方法は何ですか。

svnadminを使用するのですか?

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

それとも、リポジトリがあるディレクトリをtarするだけですか?

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

上記の長所と短所は何ですか?

ありがとうヨハン


更新:これは、ほんの一握りのリポジトリを持つ小さなサーバーです。そのため、増分バックアップはおそらく必要ないので、単純に保つことに焦点を当てた方が良いと思います。

更新:パックラッパースクリプト(svn-hot-backupのラッパー)を使用して完全バックアップを実行し、別のクリーンコンピューターで完全回復を行いました。ただし、「SVN_HOTBACKUP_NUM_BACKUPS = 10」の部分は機能しなかったので削除しました。

私はそれが一種の単純であると私が感じたことに注意してください、そして結果はちょうどdir the dirに非常に近いものでした。しかし、Manniがここでsvn-hot-backup / "svnadmin hotcopy"を使用するように指摘したように、運が悪ければtarがときどき破損したバックアップを作成する可能性があるためです。

回答:


11

svn-hot-backupスクリプトを探します。Subversionとともに出荷され、必要なことを実行するためのすべてのロジックに加えて、古いバックアップの自動ロールアウトが含まれています。svn-hot-backupを使用して毎晩cronjobとして実行し、複数のリポジトリーを持つ単一のサーバーをバックアップする、次のラッパースクリプトを作成しました。

#!/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
そして、これはsvnadmin hotcopyのラッパーなので、recoveryでは/ var / subversion / repos /の下にあるファイルをコピーするだけでしょうか?他に何かする必要がありますか?
ヨハン

「svnadmin verify」は、コピーしたリポジトリが実際に有効かどうかを確認するためのスクリプトへの追加としても役立ちます。
Andrioid 09

@ヨハン-はい、それらをコピーします。「結果として得られるバックアップは完全に機能するSubversionリポジトリであり、何かがひどく間違った場合にライブリポジトリの代わりとして使用できます。」svnbook.red-bean.com/nightly/en/…
Jonik

また、findコマンドを使用して、過去N日以内にのみ変更されたリポジトリを検索することもできます。findコマンドの出力で「db / current」を検索するだけです。これには、そのREPOLIST変数を常に更新する必要がないという利点があります。また、SVN 1.8では、空の宛先にホットコピーする必要はありませんが、以前のホットコピーに追加できます。これにより、ホットコピーバックアップが2〜3桁高速化される可能性があります。
tgharold 2013

9

これに関するドキュメントを見ましたか?

基本的に、2つのオプションがあります。

  1. を使用して増分バックアップを実行する svnadmin dump
  2. を使用してリポジトリ全体をバックアップします svnadmin hotcopy

コピーの作成中にリポジトリが変更される可能性があるため、単にディレクトリのコピーを作成することはできません

増分バックアップか完全バックアップかは、偏執狂の量、リポジトリのサイズ、ニーズ、インフラストラクチャによって異なります。


4

増分バックアップを実行できるという事実から、SVNBackupをお勧めします

何でこれが大切ですか?大規模な開発チームがいて、Subversionのバックアップが毎日あり、システムが古いバックアップに12時間失敗すると、その日の作業全体が失われます。

フルバックアップ(SVNホットコピー)を1日に何度も行うと、リポジトリマシンに不要な負荷がかかり、せっかちな開発者を苛立たせます。

ボーナスとして; また、バックアップソリューションとしてBackup-PCをお勧めします。増分リモートバックアップを実行でき、異なるシステムで同一のファイルをバックアップする場合、多くのスペースを節約できます。


4

svnsyncを使用して、それ以外は読み取り専用のリポジトリにバックアップします。これは、それ自体が古いコピー(日、週、月)でバックアップされます。



マニュアルから「そしてそれを行うにはいくつかの方法がありますが、その最大の強みはリモートで操作できることです」。
ヨハン

+1はsvnsyncについて言及している-同様にdumphotcopy確かにその用途があります。ローカルの増分バックアップにも非常に便利です。
ジョニック2009

バックアップサーバーが別の場所にある場合、多くのリカバリケースを1つのステップで解決します
ザックトンプソン、

1
svnsyncルートを使用する場合は、次の2つがあります。1)svnadminホットコピーで大きなリポジトリを開始する場合。これははるかに高速で、/ db / revsを超えてデータをバックアップするため2)svnsync呼び出しをソースリポジトリに追加します。ミラーが常に最新になるように、コミット後フック。(しかし、ミラーが自分自身をミラーリングしようとしないように、ミラーのフックには入れないでください!)
Robert Calhoun '20

2

必要に応じてsvnadminで増分バックアップを作成できます。tarアーカイブを作成する前にhot-backup.pyを実行する必要があります。

ここだ記事のsvnリポジトリのバックアップについては。とにかく、SVNの本を読むことは、前述のように良い出発点です。


0

私はいくつかの100GB + svnリポジトリをプレーンな古いrsyncでバックアップしています。svnadmin dumpそしてsvnadmin hotcopyこれらのリポジトリに日かかるだろう。

注意すべきもう1つのことは、svnadmin dumpロックとフックスクリプトをバックアップしないことです。


-1

これが私のリポジトリで行うことです。Dropboxのようなフォルダバックアップサービスを使用します(ここにLinuxバージョンへリンクがあります)。Dropboxをリポジトリのルート(またはその上)に設定するだけで、ファイルが変更されるたびにバックアップされます。複数のコンピュータで利用できるだけでなく、オンラインでアクセスしてバージョンを確認することができます。

このようなオンラインバックアップサービスはいくつかあります。ほとんどが2GBまで無料です。


1
これは小さな個人的なレポには問題ありませんが、ポスターが求める「最善の方法」はほとんどありません。1つの問題は、複数の開発者による同時アクセスとの一貫性を保証できないことです。バックアップの主な目的は、オンラインアクセスやバージョンではなく、信頼性と一貫性です。
Martijn Heemels 09
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.