Subversion yedeklemelerini yapmanın en iyi yolu?


10

Subversion yedeklemeleri yapmanın en iyi yolu nedir (Debian tabanlı bir sunucuda).

Svnadmin kullanmak mı?

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

Ya da belki de sadece depoların bulunduğu direkleri katlamak için?

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

Yukarıdakilerin artıları ve eksileri nelerdir?

Teşekkürler Johan


Güncelleme : Bu, sadece bir avuç depoya sahip küçük bir sunucudur. Bu nedenle, artımlı yedeklemelere muhtemelen gerek yoktur, bence bunu basit tutmaya odaklanmak daha iyidir.

Güncelleme : Tam bir yedekleme yapmak için paketleri sarmalayıcı komut dosyası (sırayla svn-hot-backup için bir sarmalayıcı) kullandım ve sonra başka bir temiz bilgisayarda tam bir kurtarma yaptım. Ancak benim için çalışmadığı için "SVN_HOTBACKUP_NUM_BACKUPS = 10" bölümünü kaldırdım.

Bunun basit olduğunu ve sonucun direk katlanmasına çok yakın olduğunu düşündüğümü lütfen unutmayın. Ancak Manni'nin burada svn-hot-backup / "svnadmin hotcopy" kullanmak için işaret ettiği gibi, tar, şanssızsanız zaman zaman bozuk yedekler oluşturabileceğinden daha güvenilir bir yöntemdir.

Yanıtlar:


11

Svn-hot-backup komut dosyasını arayın. Yıkım ile gönderilmeli ve istediğinizi yapmak için tüm mantığı ve eski yedeklemelerin otomatik olarak yuvarlanmasını sağlamalıdır. Ben genelleştirmek için biraz değiştirilmiş birden çok depo ile tek bir sunucu yedeklemek için bir gece cronjob olarak çalıştırmak için svn-hot-backup kullanan aşağıdaki sarmalayıcı komut dosyası yazdım.

#!/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
Ve bu svnadmin hotcopy için bir sarıcı olduğundan, kurtarmak için sanırım sadece / var / subversion / repos /? Başka bir şey yapmam gerekiyor mu?
Johan

'svnadmin verify', kopyaladığınız deponun aslında geçerli olup olmadığını doğrulamak için betiğe iyi bir ek olacaktır.
Andrioid

@Johan - evet, sadece kopyala. "Sonuçta elde edilen yedekleme tamamen işlevsel bir Subversion deposudur, bir şey korkunç bir şekilde yanlış giderse canlı deponuzun yerine geçebilir." dan svnbook.red-bean.com/nightly/en/...
Jonik

Yalnızca önceki N gün içinde değişen havuzları aramak için find komutunu da kullanabilirsiniz. Sadece find komutunun çıktısında 'db / current' ifadesini arayın. Bunun avantajı, bu REPOLIST değişkenini sürekli olarak güncellemenize gerek olmamasıdır. Ayrıca, SVN 1.8'de, artık boş bir hedefe kopyalamak zorunda kalmayacaksınız, ancak önceki bir kopyaya ekleyebileceksiniz. Bu, hotcopy yedeklemelerini 2-3 büyüklükte hızlandıracaktır.
tgharold

9

Bununla ilgili belgeleri gördünüz mü ?

Temel olarak, iki seçeneğiniz vardır:

  1. Kullanarak artımlı yedeklemeler gerçekleştirin svnadmin dump
  2. Kullanarak tüm deponuzu yedekleyin svnadmin hotcopy

Sadece dizinin bir kopyasını oluşturmak bir seçenek değildir , çünkü kopya yapılırken havuzunuz değişebilir.

Artımlı veya tam yedeklemede olmanız, paranoya miktarınıza, deponuzun büyüklüğüne, gereksinimlerinize ve altyapınıza bağlıdır.


4

Artımlı yedeklemeler yapabilmesi nedeniyle SVNBackup'ı öneriyorum .

Bu neden önemli? Büyük bir geliştirme ekibiniz varsa ve günlük Subversion yedeklemeniz varsa ve sisteminiz eski yedeklemede 12 saat başarısız olursa, tüm gün çalışmanız kaybolur.

Tam yedeklemeler yaparsanız (ki bu SVN hotcopy ) depo makinenize gereksiz yükler getirir , bu da sabırsız geliştiricileri tahriş eder.

Bonus olarak; Yedekleme çözümü olarak Backup-PC'yi de öneririm . Artımlı uzaktan yedeklemeler yapabilir ve farklı sistemlerde aynı dosyaları yedekliyorsanız çok fazla yer tasarrufu sağlayabilir.


4

Svnsync'i, kendisinin yaşlı kopyalarla (gün, hafta, ay) yedeklenmiş olan salt okunur bir depoya yedekleme yapmak için kullanıyorum



El kitabından "Ve bunu yapmanın birkaç yolu olsa da, birincil gücü uzaktan çalışabilmesidir".
Johan

Svnsync --'den bahsettiği için +1 dumpve hotcopykesinlikle kullanımları var. Yerel artımlı yedeklemeler için de oldukça kullanışlı olabilir.
Jonik

Ve yedekleme sunucusu farklı bir konumdaysa, tek bir adımda çok sayıda kurtarma vakasını
çözersiniz

1
Svnsync yoluna gidecekseniz iki şey: 1) svnadmin hotcopy ile büyük bir repo başlangıcı varsa, çok daha hızlı olduğu ve / db / revs ötesinde verileri yedeklediği için 2) svnsync çağrısını kaynak repoya ekleyin aynanın her zaman güncel olması için askı sonrası kanca. (Ama aynanın kancalarından uzak dur, böylece ayna kendini yansıtmaya çalışmaz!)
Robert Calhoun

2

İsterseniz svnadmin ile artımlı yedekleme yapabilirsiniz , tar arşivinizi yapmadan önce hot-backup.py dosyasını çalıştırmalısınız .

İşte svn depolarını yedekleme hakkında bir makale . Her neyse, SVN kitabını okumak, daha önce de belirtildiği gibi iyi bir başlangıç ​​noktasıdır.


0

Düz eski rsync ile birkaç 100GB + svn deposunu yedekliyorum. svnadmin dumpve svnadmin hotcopybu depolarda günler sürecekti.

İzlenecek başka bir şey de svnadmin dumpkilitleri ve kanca komut dosyalarını yedeklememek.


-1

Depolarımla yaptığım şey: Dropbox gibi bir klasör yedekleme hizmeti kullanın (burada Linux sürümlerine bir bağlantı var ). Dropbox'ı deponuzun kökü (veya hatta üstünde) yaparsınız ve her dosya değiştiğinde yedeklenir. Sadece bilgisayarlar arasında mevcut olmayacak, aynı zamanda çevrimiçi olarak erişebilecek ve sürümlerine sahip olacaksınız.

Böyle birkaç çevrimiçi yedekleme hizmeti vardır - çoğu 2GB'a kadar ücretsizdir.


1
Bu, küçük kişisel depolar için iyidir, ancak posterin aradığı "en iyi yol" değildir. Bir sorun, birden çok geliştiricinin eşzamanlı erişimiyle tutarlılığı garanti edememenizdir. Bir yedeklemenin birincil hedefleri, çevrimiçi erişim ve sürümler yerine güvenilirlik ve tutarlılık olmalıdır.
Martijn Heemels
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.