Cara terbaik untuk melakukan backup Subversion?


10

Apa cara terbaik untuk melakukan backup Subversion (pada server berbasis Debian).

Apakah ini menggunakan svnadmin?

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

Atau mungkin hanya untuk menempatkan dir di mana repositori berada?

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

Apa pro dan kontra dari hal di atas?

Terima kasih, Johan


Pembaruan : Ini adalah server kecil dengan hanya beberapa repo. Jadi backup inkremental mungkin tidak diperlukan, saya pikir lebih baik fokus untuk menjaganya tetap sederhana.

Pembaruan : Saya menggunakan skrip bungkus bungkus (yang pada gilirannya adalah pembungkus untuk svn-hot-backup) untuk melakukan pencadangan penuh dan kemudian melakukan pemulihan penuh pada komputer lain yang bersih. Namun saya menghapus bagian "SVN_HOTBACKUP_NUM_BACKUPS = 10" karena itu tidak berfungsi untuk saya.

Harap dicatat bahwa saya merasa itu agak sederhana dan hasilnya sangat dekat dengan hanya tar dir. Tetapi seperti yang ditunjukkan Manni di sini untuk menggunakan svn-hot-backup / "svnadmin hotcopy" adalah metode yang lebih andal, karena tar dapat membuat cadangan yang korup dari waktu ke waktu jika Anda kurang beruntung.

Jawaban:


11

Cari skrip svn-hot-backup. Itu harus dikirimkan dengan subversi, dan berisi semua logika untuk melakukan apa yang Anda inginkan, ditambah automagic yang meluncurkan backup lama. Saya telah menulis skrip pembungkus berikut yang menggunakan svn-hot-backup untuk dijalankan sebagai cronjob malam untuk membuat cadangan satu server dengan beberapa repositori, sedikit dimodifikasi untuk digeneralisasi.

#!/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
Dan karena ini adalah pembungkus untuk svnadmin hotcopy, saya kira untuk memulihkan saya hanya menyalin file di bawah / var / subversi / repos /? Apakah saya perlu melakukan sesuatu yang lain?
Johan

'svnadmin memverifikasi' juga akan menjadi tambahan yang baik untuk skrip untuk memverifikasi apakah repositori yang baru saja Anda salin, sebenarnya valid.
Andrioid

@ Johan - ya, salin saja. "Cadangan yang dihasilkan adalah repositori Subversion yang berfungsi penuh, dapat dimasukkan sebagai pengganti repositori langsung Anda seandainya terjadi kesalahan." from svnbook.red-bean.com/nightly/en/…
Jonik

Anda juga dapat menggunakan perintah find untuk mencari repositori yang hanya berubah dalam N hari sebelumnya. Cukup cari 'db / current' di output dari perintah find. Ini memiliki keuntungan bahwa Anda tidak perlu memperbarui variabel REPOLIST secara konstan. Juga, dalam SVN 1.8, Anda tidak perlu lagi melakukan hotcopy ke tujuan kosong, tetapi akan dapat menambahkan ke hotcopy sebelumnya. Ini kemungkinan akan mempercepat cadangan hotcopy sebanyak 2-3 kali lipat.
tgharold

9

Pernahkah Anda melihat dokumentasi tentang ini?

Pada dasarnya, Anda memiliki dua opsi:

  1. Lakukan pencadangan tambahan menggunakan svnadmin dump
  2. Cadangkan seluruh repositori Anda menggunakan svnadmin hotcopy

Cukup membuat salinan direktori bukan pilihan karena repositori Anda mungkin berubah saat salinan sedang dibuat.

Apakah Anda menjadi incremental atau cadangan penuh tergantung pada jumlah paranoia Anda, ukuran repositori Anda, kebutuhan Anda dan infrastruktur Anda.


4

Saya merekomendasikan SVNBackup karena fakta bahwa ia mampu melakukan backup inkremental .

Mengapa ini penting? Nah, jika Anda memiliki tim pengembang besar dan Anda memiliki cadangan Subversion harian dan sistem Anda gagal 12 jam ke dalam cadangan lama, pekerjaan sepanjang hari hilang.

Jika Anda melakukan pencadangan penuh (yang merupakan hotcopy SVN ) berkali-kali sehari Anda menyebabkan pemuatan yang tidak perlu ke mesin repositori Anda, itu akan mengganggu pengembang yang tidak sabar.

Sebagai bonus; Saya juga merekomendasikan Backup-PC sebagai solusi cadangan. Ini dapat melakukan backup jarak jauh secara bertahap dan mampu menghemat banyak ruang jika Anda mencadangkan file yang identik pada sistem yang berbeda.


4

Saya menggunakan svnsync untuk membuat cadangan ke repositori yang hanya bisa dibaca, yang didukung dengan salinan yang sudah tua (hari, minggu, bulan)



Dari manual "Dan sementara ada beberapa cara untuk melakukan itu, kekuatan utamanya adalah bahwa ia dapat beroperasi dari jarak jauh".
Johan

+1 untuk menyebutkan svnsync - like dumpdan hotcopysudah pasti memiliki kegunaannya. Ini bisa sangat berguna juga untuk backup inkremental lokal.
Jonik

Dan jika server cadangan berada di lokasi yang berbeda, Anda menyelesaikan banyak kasus pemulihan dalam satu langkah
Zac Thompson

1
Dua hal jika Anda akan menuju rute svnsync: 1) jika Anda memiliki repo yang besar, mulailah dengan hotcopy svnadmin, karena jauh lebih cepat dan mendukung data di luar / db / revs 2) tambahkan panggilan svnsync ke sumber repo kait pasca-komitmen sehingga cermin selalu terbarui. (Tapi jauhkan itu dari kait cermin agar cermin tidak mencoba untuk mencerminkan dirinya sendiri!)
Robert Calhoun

2

Anda dapat membuat cadangan tambahan dengan svnadmin jika Anda menginginkannya, Anda harus menjalankan hot-backup.py sebelum membuat arsip tar Anda.

Berikut ini artikel tentang mencadangkan repo svn. Bagaimanapun, membaca buku SVN adalah titik awal yang baik seperti yang dikatakan sebelumnya.


0

Saya mencadangkan beberapa repositori 100GB + svn dengan rsync lama. svnadmin dumpdan svnadmin hotcopyakan memakan waktu berhari-hari di repositori ini.

Satu hal yang perlu diperhatikan adalah svnadmin dumptidak mencadangkan kunci dan skrip kait.


-1

Inilah yang saya lakukan dengan repositori saya: gunakan layanan pencadangan folder seperti Dropbox (inilah tautan ke versi Linux mereka ). Anda cukup menjadikan Dropbox sebagai root dari repositori Anda (atau bahkan di atasnya) dan itu akan dicadangkan setiap kali ada perubahan file. Tidak hanya itu akan tersedia di seluruh komputer, tetapi Anda akan dapat mengaksesnya secara online dan memiliki versi itu.

Ada beberapa layanan cadangan online - kebanyakan gratis hingga 2GB.


1
Ini bagus untuk repo pribadi kecil, tetapi bukan "cara terbaik" yang dicari poster tersebut. Satu masalah adalah Anda tidak dapat menjamin konsistensi dengan akses bersamaan oleh banyak pengembang. Tujuan utama cadangan haruslah keandalan dan konsistensi, alih-alih akses dan versi online.
Martijn Heemels
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.