กลยุทธ์การสำรองข้อมูลที่เก็บ SVN


195

ฉันยังใหม่กับ SVN และฉันต้องการทราบว่ามีวิธีการใดบ้างในการสำรองที่เก็บข้อมูลในระบบ Windows


1
เซิร์ฟเวอร์ VisualSVN สำหรับ Windows มีคุณสมบัติการสำรองข้อมูลและตรวจสอบที่เก็บข้อมูล SVN ตามกำหนดเวลา: visualsvn.com/server/features/backup
bahrep

คำตอบ:


179

คุณสามารถใช้สิ่งที่ต้องการ (Linux):

svnadmin dump repositorypath | gzip > backupname.svn.gz

เนื่องจาก Windows ไม่รองรับ GZip จึงเป็นเพียง:

svnadmin dump repositorypath > backupname.svn

11
ฉันไม่รู้แน่นอน แต่เครื่องมือบางอย่างเช่น 7-zip จะสามารถบีบอัดข้อมูลจาก STDIN ซึ่งหมายความว่าคุณสามารถใช้สไตล์แรกบน Windows ได้เช่นกัน
nickf

5
ฉันแค่ดูที่ตัวเองนี้และหนึ่งความคิดเห็นจาก docs svnbook.red-bean.com/nightly/en/…คือคุณจะได้รับเอาต์พุตขนาดใหญ่มากของการถ่ายโอนข้อมูล svnadmin เว้นแต่คุณจะใช้ตัวเลือก --deltas
เจสัน S

5
และ Windows ไม่สนับสนุน gzip เพียงแค่ได้รับจาก UnxUtils เว็บเพจunxutils.sourceforge.net
เจสัน S

52
ใช้ 7Zip: svnadmin dump repositorypath | "%ProgramFiles%\7-Zip\7z.exe" a backup.7z -sibackupname.svn นี้จะสร้างไฟล์ชื่อ 'backup.7z' ที่มีไฟล์เดียว 'backupname.svn' svnadmin dumpซึ่งเป็นผลผลิตจาก
Matt

4
@Josh Stodola ทุบตี :for project in *; do svnadmin dump ${project} | gzip > /backuppath/${project}.svn.gz; done;
Fedir RYKHTIK

107

เราใช้ svnadmin hotcopy เช่น:

svnadmin hotcopy C:\svn\repo D:\backups\svn\repo

ตามหนังสือ :

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

คุณสามารถ ZIP แน่นอน (ควรเป็น 7-Zip) สำเนาสำรอง IMHO มันเป็นตัวเลือกการสำรองที่ตรงไปตรงมาที่สุด: ในกรณีที่เกิดภัยพิบัติมีน้อยที่จะทำนอกเหนือจากการแตกไฟล์ซิปกลับสู่ตำแหน่ง


13
ฉันคิดว่าการถ่ายโอนข้อมูล svnadmin เป็นที่ต้องการสำหรับการสำรองข้อมูลด้วยเหตุผลสองประการ ดูsvn.haxx.se/users/archive-2005-05/0842.shtml
daremon

4
@daremon: ฉันขอแนะนำให้คุณอ่านการตอบกลับไปยังโพสต์ที่คุณเชื่อมโยงโดยเฉพาะอย่างยิ่งข้อความที่กล่าวถึงการถ่ายโอนข้อมูล svnadmin ไม่รวมไฟล์ควบคุมของ repo
Powerlord

ปิดการแข่งขัน แต่ฉันลงคะแนนสำหรับการถ่ายโอนข้อมูล svnadmin หลังจากอ่านคำตอบที่แนะนำโดย R. Bemrose
mobibob

คำสั่ง hotcopy ไม่ได้เขียนทับหรือเพิ่มการสำรองข้อมูลที่สร้างขึ้น ดังนั้นหากคุณวางแผนที่จะทำให้เป็นอัตโนมัติใน windows โดยใช้ task scheduler ดูไฟล์ batch ต่อไปนี้: cfchimp.com/wordpress/2008/05/…
Ryan Sampson

1
คำเตือน ห้ามคัดลอกมิเรอร์ svnsync'd ของที่เก็บในขณะที่ svnsync กำลังทำงาน! สำเนาที่เป็นผลลัพธ์อาจเสียหาย ดูกระทู้นี้สำหรับรายละเอียด: subversion.open.collab.net/ds/…
zvolkov

24

มีสคริปต์ hotbackup.py อยู่ในเว็บไซต์ Subversion ซึ่งค่อนข้างมีประโยชน์สำหรับการสำรองข้อมูลอัตโนมัติ

http://svn.apache.org/repos/asf/subversion/trunk/tools/backup/hot-backup.py.in


7
ฉันเชื่อว่านี่เป็นลิงก์ที่ใช้งานได้กับสคริปต์แบ็คอัพ: svn.apache.org/repos/asf/subversion/trunk/tools/backup/…
Carvell Fenton

22

นี่คือสคริปต์ Perl ที่จะ:

  1. สำรองข้อมูล repo
  2. คัดลอกไปยังเซิร์ฟเวอร์อื่นผ่าน SCP
  3. ดึงข้อมูลสำรอง
  4. สร้างที่เก็บข้อมูลทดสอบจากข้อมูลสำรอง
  5. ทำการชำระเงินทดสอบ
  6. ส่งอีเมลถึงคุณด้วยข้อผิดพลาด (ผ่าน cron)

สคริปต์:

my $svn_repo = "/var/svn";  
my $bkup_dir = "/home/backup_user/backups";
my $bkup_file = "my_backup-";
my $tmp_dir = "/home/backup_user/tmp";   
my $bkup_svr = "my.backup.com";
my $bkup_svr_login = "backup";

$bkup_file = $bkup_file . `date +%Y%m%d-%H%M`;
chomp $bkup_file;
my $youngest = `svnlook youngest $svn_repo`;
chomp $youngest;

my $dump_command = "svnadmin  -q dump $svn_repo > $bkup_dir/$bkup_file ";
print "\nDumping Subversion repo $svn_repo to $bkup_file...\n";
print `$dump_command`;
print "Backing up through revision $youngest... \n";
print "\nCompressing dump file...\n";
print `gzip -9 $bkup_dir/$bkup_file\n`;
chomp $bkup_file;
my $zipped_file = $bkup_dir . "/" . $bkup_file . ".gz";
print "\nCreated $zipped_file\n";
print `scp $zipped_file $bkup_svr_login\@$bkup_svr:/home/backup/`;
print "\n$bkup_file.gz transfered to $bkup_svr\n";

#Test Backup
print "\n---------------------------------------\n";
print "Testing Backup";
print "\n---------------------------------------\n";
print "Downloading $bkup_file.gz from $bkup_svr\n";
print `scp $bkup_svr_login\@$bkup_svr:/home/backup/$bkup_file.gz $tmp_dir/`;
print "Unzipping $bkup_file.gz\n";
print `gunzip $tmp_dir/$bkup_file.gz`;
print "Creating test repository\n";
print `svnadmin create $tmp_dir/test_repo`;
print "Loading repository\n";
print `svnadmin -q load $tmp_dir/test_repo < $tmp_dir/$bkup_file`;
print "Checking out repository\n";
print `svn -q co file://$tmp_dir/test_repo $tmp_dir/test_checkout`;
print "Cleaning up\n";
print `rm -f $tmp_dir/$bkup_file`;
print `rm -rf $tmp_dir/test_checkout`;
print `rm -rf $tmp_dir/test_repo`;

แหล่งสคริปต์และรายละเอียดเพิ่มเติมเกี่ยวกับเหตุผลสำหรับการสำรองข้อมูลประเภทนี้


19

ฉันใช้svnsyncซึ่งตั้งค่าเซิร์ฟเวอร์ระยะไกลเป็นมิเรอร์ / ทาส เรามีเซิร์ฟเวอร์ลดลงสองสัปดาห์ที่ผ่านมาและฉันสามารถเปลี่ยนทาสให้อยู่ในตำแหน่งหลักได้อย่างง่ายดาย (ต้องรีเซ็ต UUID บนที่เก็บข้อมูลทาสเป็นต้นฉบับ)

ข้อดีอีกอย่างคือการซิงค์สามารถเรียกใช้โดยคนกลางแทนที่จะเป็นงานบนเซิร์ฟเวอร์ใดเครื่องหนึ่ง ฉันมีไคลเอนต์ถึงสอง VPN ที่ซิงค์ที่เก็บข้อมูลระหว่างพวกเขา


ดังนั้นจึงซิงค์รุ่น repo ล่าสุดระหว่างสองอย่างชัดเจน?
PositiveGuy

1
แม้ว่ามันจะอยู่ในชื่อ แต่ฉันก็ไม่รู้ว่าฉันจะเรียกมันว่า "ซิงค์" มันคือการสำรองข้อมูลซึ่งมันจะทำการแก้ไขเจ้านายและวางลงบนทาส หากคุณทำการดัดแปลงทาสพวกมันอาจจะ "sync" หรือทำให้เกิดความบ้าคลั่ง การใช้เครื่องมืออย่างตั้งใจคือสร้างมิร์เรอร์นอกสถานที่อ่านอย่างเดียว แต่ทำงานได้อย่างน่าชื่นชมในการสร้างเซิร์ฟเวอร์สำรอง
Tom Mayfield

1
ประโยชน์ของ svnsync คือคุณสามารถเรียกใช้งานได้บ่อยครั้งมาก ทุก ๆ สิบนาทีหรือทุก ๆ การกระทำ (ใช้ตะขอ) ประโยชน์ที่ได้รับคือสามารถลดการสูญเสียข้อมูลที่อาจเกิดขึ้นซึ่งคุณจะได้รับระหว่างการสำรองข้อมูลครั้งล่าสุดและเมื่อการสูญเสียธุรกรรมซื้อคืนสด
8DH

12

svnadmin hotcopy

svnadmin hotcopy REPOS_PATH NEW_REPOS_PATH

คำสั่งย่อยนี้ทำให้การสำรองข้อมูล "ร้อน" เต็มรูปแบบของที่เก็บข้อมูลของคุณรวมถึง hooks ไฟล์กำหนดค่าและไฟล์ฐานข้อมูลทั้งหมด



10
  • คุณสามารถสร้างการสำรองข้อมูลเก็บข้อมูล ( การถ่ายโอนข้อมูล ) svnadmin dumpด้วย

  • svnadmin loadจากนั้นคุณสามารถนำเข้าในการใช้

การอ้างอิงโดยละเอียดใน SVNBook: "การย้ายข้อมูลที่เก็บโดยใช้ svnadmin"


5

โดยทั่วไปจะปลอดภัยในการคัดลอกโฟลเดอร์ที่เก็บหากเซิร์ฟเวอร์ svn หยุดทำงาน (ที่มา: https://groups.google.com/forum/?fromgroups#!topic/visualsvn/i_55khUBrys%5B1-25%5D )

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

ตัวอย่าง:

  1. ติดตั้ง Cobian Backup
  2. เพิ่มงานสำรอง:

    • ตั้งค่าซอร์สเป็นโฟลเดอร์ที่เก็บ (เช่นC:\Repositories\),

    • เพิ่มเหตุการณ์ก่อนสำรอง"STOP_SERVICE"VisualSVN

    • เพิ่มเหตุการณ์หลังการสำรองข้อมูล"START_SERVICE"VisualSVN

    • ตั้งค่าตัวเลือกอื่น ๆ ตามต้องการ เราได้ตั้งค่าการสำรองข้อมูลเพิ่มเติมรวมถึงการลบรายการเก่ากำหนดการสำรองปลายทางปลายทางรวมถึงการบีบอัด แยกเก็บ ฯลฯ

  3. กำไร!


4

มี 2 ​​วิธีหลักในการสำรองข้อมูลเซิร์ฟเวอร์ svn อันดับแรกคือ hotcopy ที่จะสร้างสำเนาของไฟล์ที่เก็บของคุณปัญหาหลักของวิธีนี้คือการบันทึกข้อมูลเกี่ยวกับระบบไฟล์พื้นฐานดังนั้นคุณอาจมีปัญหาในการพยายามกู้คืนข้อมูล การสำรองข้อมูลชนิดนี้ในเซิร์ฟเวอร์ svn ชนิดอื่นหรือเครื่องอื่น มีการสำรองข้อมูลอีกประเภทหนึ่งที่เรียกว่าการถ่ายโอนข้อมูลสำรองนี้จะไม่บันทึกข้อมูลใด ๆ ของระบบไฟล์พื้นฐานและสามารถใช้กับเซิร์ฟเวอร์ SVN ชนิดใดก็ได้ที่อยู่ในการโค่นล้มของ tigiris.org

เกี่ยวกับเครื่องมือสำรองข้อมูลที่คุณสามารถใช้เครื่องมือ svnadmin (สามารถทำ hotcopy และ dump) จากพรอมต์คำสั่งคอนโซลนี้จะอยู่ในไดเรกทอรีเดียวกันกับเซิร์ฟเวอร์ svn ของคุณหรือคุณสามารถ google สำหรับเครื่องมือสำรอง svn

คำแนะนำของฉันคือคุณทำการสำรองข้อมูลทั้งสองประเภทและนำออกจากสำนักงานไปยังบัญชีอีเมลของคุณบริการ amazon s3, ftp หรือบริการสีฟ้าด้วยวิธีนี้คุณจะมีการสำรองข้อมูลที่ปลอดภัยโดยไม่ต้องโฮสต์เซิร์ฟเวอร์ svn ที่ไหนสักแห่ง สำนักงานของคุณ


4

นี่คือเครื่องมือ GUI Windows สำหรับสร้างดัมพ์ของที่เก็บข้อมูลการโค่นล้มภายในและระยะไกล:

https://falsinsoft-software.blogspot.com/p/svn-backup-tool.html

คำอธิบายเครื่องมือบอกว่า:

เครื่องมือนี้อนุญาตให้ทำการสำรองข้อมูลดัมพ์ของที่เก็บข้อมูลการโค่นล้มภายในและระยะไกล ซอฟต์แวร์ทำงานในลักษณะเดียวกันกับ "svnadmin" แต่ไม่ใช่ GUI ส่วนหน้า แทนที่จะใช้ไลบรารีการโค่นล้มโดยตรงเพื่ออนุญาตให้สร้างการถ่ายโอนข้อมูลในโหมดสแตนด์อโลนโดยไม่มีเครื่องมือเพิ่มเติมอื่น ๆ

หวังว่าความช่วยเหลือนี้ ...


ขอบคุณที่แบ่งปันสิ่งนี้ทำตามที่ระบุไว้อย่างแน่นอน
Ed DeGagne

3

ฉันต้องการคัดลอกไดเรกทอรี repo ทั้งหมดไปยังตำแหน่งสำรองของฉัน ด้วยวิธีนี้หากมีสิ่งใดเกิดขึ้นคุณสามารถคัดลอกไดเรกทอรีกลับมาและพร้อมที่จะไปทันที

เพียงให้แน่ใจว่าจะรักษาสิทธิ์หากจำเป็น โดยปกตินี่เป็นเพียงข้อกังวลของเครื่อง Linux เท่านั้น


7
นี่ไม่ปลอดภัยแน่ ๆ ถ้ามีคนทำคอมมิชชันในระหว่างการทำสำเนา - ฉันเคยทำสิ่งนี้เกิดขึ้นกับฉันแม้จะมีเพียง 4 คนเท่านั้นที่เข้าถึง repo และใช้งานได้ไม่บ่อยนัก ดูคำตอบของ Duncan เกี่ยวกับการใช้ hotcopy
nickf

อย่างไรก็ตามถ้าคุณทำงานเดี่ยวอย่างสมบูรณ์ฉันคิดว่านี่เป็นวิธีที่ปลอดภัยในการสำรอง repo หรือไม่ ฉันใช้การโค่นล้มสำหรับโครงการส่วนตัวของฉันและนี่คือสิ่งที่ฉันกำลังทำอยู่
Andrew Garrison

3

สำหรับที่เก็บที่โฮสต์คุณสามารถใช้ svn เวอร์ชัน 1.7 ได้svnrdumpซึ่งคล้ายกับที่svnadmin dumpเก็บข้อมูลโลคัล นี้บทความให้ดีเดินผ่านซึ่งเป็นหลักเดือดลงไป:

svnrdump dump /URL/to/remote/repository > myRepository.dump

หลังจากคุณดาวน์โหลดไฟล์ดัมพ์แล้วคุณสามารถอิมพอร์ตไฟล์แบบโลคัล

svnadmin load /path/to/local/repository < myRepository.dump

หรืออัปโหลดไปยังโฮสต์ที่คุณเลือก


3

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

หัวข้อเอกสาร svnbook สำหรับการสำรองข้อมูลแนะนำsvnadmin hotcopyคำสั่งที่จะดูแลปัญหาเช่นไฟล์ในการใช้งานและเช่น


2
@echo off
set hour=%time:~0,2%
if "%hour:~0,1%"==" " set hour=0%time:~1,1%
set folder=%date:~6,4%%date:~3,2%%date:~0,2%%hour%%time:~3,2%

echo Performing Backup
md "\\HOME\Development\Backups\SubVersion\%folder%"

svnadmin dump "C:\Users\Yakyb\Desktop\MainRepositary\Jake" | "C:\Program Files\7-Zip\7z.exe" a "\\HOME\Development\Backups\SubVersion\%folder%\Jake.7z" -sibackupname.svn

นี่คือไฟล์แบตช์ที่ฉันใช้ซึ่งทำหน้าที่สำรองข้อมูลอยู่



1

ฉันได้รวบรวมขั้นตอนที่ฉันติดตามเพื่อวัตถุประสงค์ในการสำรองข้อมูลของที่เก็บ SVN ระยะไกลของโครงการของฉัน

install svk (http://svk.bestpractical.com/view/SVKWin32)

install svn (http://sourceforge.net/projects/win32svn/files/1.6.16/Setup-Subversion-1.6.16.msi/download)

svk mirror //local <remote repository URL>

svk sync //local

ต้องใช้เวลาและบอกว่ากำลังดึงบันทึกจากที่เก็บ มันสร้างชุดของไฟล์ภายในC:\Documents and Settings\nverma\.svk\localมันจะสร้างชุดของแฟ้มภายใน

หากต้องการอัพเดตที่เก็บโลคัลนี้ด้วยชุดการเปลี่ยนแปลงล่าสุดจากรีโมตหนึ่งเพียงรันคำสั่งก่อนหน้านี้เป็นครั้งคราว

ตอนนี้คุณสามารถเล่นกับพื้นที่เก็บข้อมูลในเครื่องของคุณ (/home/user/.svk/localในตัวอย่างนี้) ราวกับว่ามันเป็นพื้นที่เก็บข้อมูล SVN ปกติ!

ปัญหาเดียวของวิธีการนี้คือที่เก็บในตัวเครื่องถูกสร้างขึ้นพร้อมการเพิ่มจำนวนการแก้ไขโดยการแก้ไขจริงในที่เก็บระยะไกล ตามที่มีคนเขียน:

คำสั่ง svk miror สร้างการคอมมิตในที่เก็บที่เพิ่งสร้าง ดังนั้นการกระทำทั้งหมดที่สร้างโดยการซิงค์ครั้งต่อไปจะมีจำนวนการแก้ไขเพิ่มขึ้นหนึ่งเมื่อเปรียบเทียบกับที่เก็บสาธารณะระยะไกล

แต่นี่ก็โอเคสำหรับฉันเพราะฉันต้องการสำรองข้อมูลของที่เก็บระยะไกลบางครั้งเท่านั้นไม่มีอะไรอื่น

ยืนยัน:

ในการตรวจสอบให้ใช้ไคลเอนต์ SVN กับที่เก็บในเครื่องดังนี้:

svn checkout "file:///C:/Documents and Settings\nverma/.svk/local/"  <local-dir-path-to-checkout-onto>

คำสั่งนี้จะไปเช็คเอาต์การแก้ไขล่าสุดจากพื้นที่เก็บข้อมูลท้องถิ่น Checked out revision Nในตอนท้ายก็กล่าวว่า นี้Nเป็นมากกว่าการแก้ไขตามจริงที่พบในที่เก็บระยะไกล (เนื่องจากปัญหาที่กล่าวถึงข้างต้น)

ในการตรวจสอบว่า svk ได้นำประวัติทั้งหมดมาใช้การชำระเงินแบบ SVN ก็ดำเนินการโดยใช้การแก้ไขรุ่นเก่าที่หลากหลาย-rด้วย 2, 10, 50 เป็นต้นจากนั้นไฟล์ใน<local-dir-path-to-checkout-onto>ได้รับการยืนยันจะมาจากการแก้ไขนั้น

ในตอนท้ายให้ซิปไดเรกทอรีC:/Documents and Settings\nverma/.svk/local/และจัดเก็บซิปไว้ที่ใดที่หนึ่ง ทำสิ่งนี้อย่างสม่ำเสมอ


0

อย่างที่คนอื่น ๆ บอกกัน hot-backup.py จากทีม Subversion มีคุณสมบัติที่ดีกว่าธรรมดา svnadmin hotcopy

ฉันใช้งานที่กำหนดเวลาไว้ในสคริปต์ไพ ธ อนซึ่งเป็นสไปเดอร์สำหรับที่เก็บข้อมูลทั้งหมดของฉันบนเครื่องและใช้การแบ็คอัพเพื่อเก็บฮอตสปอตหลายวัน (หวาดระแวงความเสียหาย) และsvnadmin svndumpบนเครื่องระยะไกล การฟื้นฟูนั้นง่ายมากจากตอนนี้


0

1.1 สร้างการถ่ายโอนข้อมูลจากพื้นที่เก็บข้อมูล SVN (การโค่นล้ม)

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

ตัวอย่างจริง

svnadmin dump /var/www/svn/testrepo > /backups/testrepo.dump

1.2 Gzip สร้างการถ่ายโอนข้อมูล

gzip -9 /path/to/reponame.dump

ตัวอย่างจริง

gzip -9 /backups/testrepo.dump

1.3 SVN Dump และ Gzip Dump ด้วย One-liner

svnadmin dump /path/to/reponame | gzip -9 > /path/to/reponame.dump.gz

ตัวอย่างจริง

svnadmin dump /var/www/svn/testrepo |Â gzip -9 > /backups/testrepo.dump.gz

วิธีการสำรองข้อมูล (การถ่ายโอนข้อมูล) และที่เก็บข้อมูล SVN (การโค่นล้ม) บน Linux
Ref: การ สำรองข้อมูลการโค่นล้ม svn andrestore

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.