วิธีที่ดีที่สุดในการสำรองข้อมูล Subversion?


10

เป็นวิธีที่ดีที่สุดในการสำรองข้อมูล Subversion (บนเซิร์ฟเวอร์ที่ใช้ Debian) คืออะไร

มันคือการใช้ svnadmin?

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

หรืออาจจะแค่ขุดดินที่ที่เก็บอยู่?

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

อะไรคือข้อดีและข้อเสียของข้างต้น?

ขอบคุณโจฮาน


อัปเดต : นี่เป็นเซิร์ฟเวอร์ขนาดเล็กที่มี repos เพียงหยิบมือเดียว ดังนั้นการสำรองข้อมูลเพิ่มเติมนั้นอาจไม่จำเป็นฉันคิดว่าเป็นการดีกว่าที่จะมุ่งเน้นที่การทำให้เป็นเรื่องง่าย

อัปเดต : ฉันใช้สคริปต์ wrapper ของแพ็ค (ซึ่งเป็น wrapper สำหรับ svn-hot-backup) เพื่อทำการสำรองข้อมูลเต็มรูปแบบจากนั้นทำการกู้คืนเต็มรูปแบบในคอมพิวเตอร์ที่สะอาดเครื่องอื่น อย่างไรก็ตามฉันได้ลบส่วน "SVN_HOTBACKUP_NUM_BACKUPS = 10" ออกเนื่องจากไม่ได้ผลสำหรับฉัน

โปรดทราบว่าฉันรู้สึกว่ามันเป็นเรื่องง่ายและผลลัพธ์ก็ใกล้เคียงกับแค่น้ำมันดิน แต่ดังที่ Manni ชี้ให้เห็นที่นี่เพื่อใช้ svn-hot-backup / "svnadmin hotcopy" เป็นวิธีที่เชื่อถือได้มากขึ้นเนื่องจาก tar สามารถสร้างการสำรองข้อมูลที่เสียหายได้เป็นครั้งคราวหากคุณโชคร้าย

คำตอบ:


11

ค้นหาสคริปต์ svn-hot-backup มันควรมาพร้อมกับการโค่นล้มและมีตรรกะทั้งหมดที่จะทำสิ่งที่คุณต้องการรวมทั้ง automagic สำรองข้อมูลเก่าออกมา ฉันได้เขียนสคริปต์ตัวห่อต่อไปนี้ที่ใช้ 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
และเนื่องจากนี่เป็น wrapper สำหรับ svnadmin hotcopy ฉันเดาว่าจะกู้คืนฉันแค่คัดลอกไฟล์ใน / var / subversion / repos /? ฉันต้องทำอย่างอื่นหรือไม่?
Johan

'svnadmin Verify' จะเป็นส่วนเสริมที่ดีของสคริปต์เพื่อตรวจสอบว่าที่เก็บที่คุณเพิ่งคัดลอกนั้นถูกต้องหรือไม่
Andrioid

@Johan - ใช่เพียงแค่คัดลอก "การสำรองข้อมูลผลลัพธ์เป็นพื้นที่เก็บข้อมูล Subversion ที่ใช้งานได้อย่างสมบูรณ์สามารถทิ้งลงในพื้นที่เก็บข้อมูลของคุณแทนได้หากมีสิ่งผิดปกติเกิดขึ้นอย่างน่ากลัว" จากsvnbook.red-bean.com/nightly/en/…
Jonik

คุณยังสามารถใช้คำสั่ง find เพื่อค้นหาที่เก็บใด ๆ ที่มีการเปลี่ยนแปลงภายใน N วันก่อนหน้า เพียงค้นหา 'db / current' ในผลลัพธ์ของคำสั่ง find นี่เป็นข้อดีที่คุณไม่จำเป็นต้องปรับปรุงตัวแปร REPOLIST นั้น นอกจากนี้ใน SVN 1.8 คุณจะไม่ต้อง hotcopy ไปยังปลายทางที่ว่างอีกต่อไป แต่จะสามารถผนวกกับ hotcopy ก่อนหน้า สิ่งนี้จะทำให้การสำรองข้อมูล hotcopy เร็วขึ้น 2-3 เท่าของขนาดของคำสั่ง
tgharold

9

คุณเคยเห็นเอกสารเกี่ยวกับเรื่องนี้หรือไม่?

โดยทั่วไปคุณมีสองตัวเลือก:

  1. ทำการสำรองข้อมูลเพิ่มเติมโดยใช้ svnadmin dump
  2. สำรองที่เก็บข้อมูลทั้งหมดของคุณโดยใช้ svnadmin hotcopy

การทำสำเนาไดเรกทอรีเพียงอย่างเดียวไม่ใช่ตัวเลือกเนื่องจากพื้นที่เก็บข้อมูลของคุณอาจเปลี่ยนไปในขณะที่กำลังทำการคัดลอก

ไม่ว่าคุณจะทำการสำรองข้อมูลแบบเพิ่มขึ้นหรือเต็มจำนวนขึ้นอยู่กับจำนวนของความหวาดระแวงขนาดของที่เก็บความต้องการและโครงสร้างพื้นฐานของคุณ


4

ผมแนะนำSVNBackupเนื่องจากความจริงที่ว่ามันเป็นความสามารถในการทำสำรองที่เพิ่มขึ้น

ทำไมสิ่งนี้จึงสำคัญ ถ้าคุณมีทีมพัฒนาขนาดใหญ่และคุณมีการสำรองข้อมูลการโค่นล้มรายวันและระบบของคุณล้มเหลวในการสำรองข้อมูลเก่า 12 ชั่วโมงการทำงานทั้งวันจะหายไป

หากคุณทำการสำรองข้อมูลเต็มรูปแบบ (ซึ่งเป็นhotcopy ของ SVN ) วันละหลายครั้งที่คุณทำให้เกิดการโหลดที่ไม่จำเป็นไปยังเครื่องเก็บข้อมูลของคุณ

เป็นโบนัส; ฉันยังแนะนำBackup-PCเป็นโซลูชันสำรอง มันสามารถสำรองข้อมูลระยะไกลที่เพิ่มขึ้นและสามารถประหยัดพื้นที่ได้มากหากคุณสำรองไฟล์ที่เหมือนกันในระบบต่างๆ


4

ฉันใช้ svnsync เพื่อสำรองข้อมูลไปยังที่เก็บแบบอ่านอย่างเดียวซึ่งมีการสำรองข้อมูลด้วยสำเนาที่มีอายุมาก (วัน, สัปดาห์, เดือน)



จากคู่มือ "และในขณะที่มีหลายวิธีที่จะทำเช่นนั้นความแข็งแกร่งหลักของมันคือมันสามารถทำงานจากระยะไกล"
Johan

+1 สำหรับการกล่าวถึง svnsync - like dumpและhotcopyแน่นอนว่ามันมีประโยชน์ มันอาจจะมีประโยชน์มากสำหรับการสำรองข้อมูลที่เพิ่มขึ้นในท้องถิ่น
Jonik

และหากเซิร์ฟเวอร์สำรองอยู่ในตำแหน่งที่แตกต่างกันคุณสามารถแก้ไขกรณีการกู้คืนจำนวนมากได้ในขั้นตอนเดียว
Zac Thompson

1
สองสิ่งถ้าคุณจะไปเส้นทาง svnsync: 1) ถ้าคุณมี repo ขนาดใหญ่เริ่มต้นด้วย svnadmin hotcopy เนื่องจากเร็วกว่ามากและสำรองข้อมูลเกิน / db / revs 2) เพิ่มการเรียก svnsync ไปยัง repo ต้นทาง ตะขอหลังการผูกมัดเพื่อให้มิเรอร์เป็นปัจจุบันอยู่เสมอ (แต่อย่าให้สิ่งนั้นอยู่ในตะขอของกระจกดังนั้นกระจกจะไม่พยายามสะท้อนตัวเอง!)
Robert Calhoun

2

คุณสามารถสำรองข้อมูลส่วนเพิ่มด้วยsvnadminหากคุณต้องการคุณควรเรียกใช้hot-backup.pyก่อนทำการเก็บถาวร tar ของคุณ

นี่คือบทความเกี่ยวกับการสำรองข้อมูล svn repos อย่างไรก็ตามการอ่านหนังสือ SVNเป็นจุดเริ่มต้นที่ดีอย่างที่กล่าวไว้ก่อนหน้านี้


0

ฉันสำรองข้อมูลที่เก็บ 100GB + svn หลายแห่งด้วย rsync แบบเดิมธรรมดา svnadmin dumpและsvnadmin hotcopyจะใช้เวลาหลายวันในที่เก็บเหล่านี้

อีกสิ่งหนึ่งที่ต้องดูคือการsvnadmin dumpไม่สำรองข้อมูลและสคริปต์เบ็ด


-1

นี่คือสิ่งที่ฉันทำกับที่เก็บของฉัน: ใช้บริการสำรองข้อมูลโฟลเดอร์เช่น Dropbox (นี่คือลิงค์ไปยังรุ่น Linux ของพวกเขา ) คุณเพียงแค่ทำให้ Dropbox เป็นรากฐานของพื้นที่เก็บข้อมูลของคุณ (หรือเหนือกว่านั้น) และมันจะสำรองข้อมูลทุกครั้งที่มีการเปลี่ยนแปลงไฟล์ ไม่เพียง แต่จะสามารถใช้ได้กับคอมพิวเตอร์ทุกเครื่อง แต่คุณจะสามารถเข้าถึงออนไลน์และมีเวอร์ชั่นได้

มีบริการสำรองข้อมูลออนไลน์หลายอย่างเช่นส่วนใหญ่ฟรีสูงสุด 2GB


1
นี่เป็นสิ่งที่ดีสำหรับ repos ส่วนบุคคลขนาดเล็ก แต่แทบจะไม่ "วิธีที่ดีที่สุด" โปสเตอร์ที่กำลังมองหา ปัญหาหนึ่งคือคุณไม่สามารถรับประกันความสอดคล้องกับการเข้าถึงพร้อมกันโดยนักพัฒนาหลายคน เป้าหมายหลักของการสำรองข้อมูลควรเป็นความน่าเชื่อถือและความสอดคล้องแทนที่จะเข้าถึงออนไลน์และรุ่น
Martijn Heemels
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.