ฉันยังใหม่กับ SVN และฉันต้องการทราบว่ามีวิธีการใดบ้างในการสำรองที่เก็บข้อมูลในระบบ Windows
ฉันยังใหม่กับ SVN และฉันต้องการทราบว่ามีวิธีการใดบ้างในการสำรองที่เก็บข้อมูลในระบบ Windows
คำตอบ:
คุณสามารถใช้สิ่งที่ต้องการ (Linux):
svnadmin dump repositorypath | gzip > backupname.svn.gz
เนื่องจาก Windows ไม่รองรับ GZip จึงเป็นเพียง:
svnadmin dump repositorypath > backupname.svn
svnadmin dump repositorypath | "%ProgramFiles%\7-Zip\7z.exe" a backup.7z -sibackupname.svn
นี้จะสร้างไฟล์ชื่อ 'backup.7z' ที่มีไฟล์เดียว 'backupname.svn' svnadmin dump
ซึ่งเป็นผลผลิตจาก
for project in *; do svnadmin dump ${project} | gzip > /backuppath/${project}.svn.gz; done;
เราใช้ svnadmin hotcopy เช่น:
svnadmin hotcopy C:\svn\repo D:\backups\svn\repo
ตามหนังสือ :
คุณสามารถรันคำสั่งนี้ได้ตลอดเวลาและสร้างสำเนาของที่เก็บอย่างปลอดภัยโดยไม่คำนึงว่ากระบวนการอื่นกำลังใช้ที่เก็บข้อมูลหรือไม่
คุณสามารถ ZIP แน่นอน (ควรเป็น 7-Zip) สำเนาสำรอง IMHO มันเป็นตัวเลือกการสำรองที่ตรงไปตรงมาที่สุด: ในกรณีที่เกิดภัยพิบัติมีน้อยที่จะทำนอกเหนือจากการแตกไฟล์ซิปกลับสู่ตำแหน่ง
มีสคริปต์ hotbackup.py อยู่ในเว็บไซต์ Subversion ซึ่งค่อนข้างมีประโยชน์สำหรับการสำรองข้อมูลอัตโนมัติ
http://svn.apache.org/repos/asf/subversion/trunk/tools/backup/hot-backup.py.in
นี่คือสคริปต์ Perl ที่จะ:
สคริปต์:
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`;
แหล่งสคริปต์และรายละเอียดเพิ่มเติมเกี่ยวกับเหตุผลสำหรับการสำรองข้อมูลประเภทนี้
ฉันใช้svnsyncซึ่งตั้งค่าเซิร์ฟเวอร์ระยะไกลเป็นมิเรอร์ / ทาส เรามีเซิร์ฟเวอร์ลดลงสองสัปดาห์ที่ผ่านมาและฉันสามารถเปลี่ยนทาสให้อยู่ในตำแหน่งหลักได้อย่างง่ายดาย (ต้องรีเซ็ต UUID บนที่เก็บข้อมูลทาสเป็นต้นฉบับ)
ข้อดีอีกอย่างคือการซิงค์สามารถเรียกใช้โดยคนกลางแทนที่จะเป็นงานบนเซิร์ฟเวอร์ใดเครื่องหนึ่ง ฉันมีไคลเอนต์ถึงสอง VPN ที่ซิงค์ที่เก็บข้อมูลระหว่างพวกเขา
svnadmin hotcopy REPOS_PATH NEW_REPOS_PATH
คำสั่งย่อยนี้ทำให้การสำรองข้อมูล "ร้อน" เต็มรูปแบบของที่เก็บข้อมูลของคุณรวมถึง hooks ไฟล์กำหนดค่าและไฟล์ฐานข้อมูลทั้งหมด
svnbackupไปที่ Google Code ซึ่งเป็นแอปพลิเคชันคอนโซล NET
คุณสามารถสร้างการสำรองข้อมูลเก็บข้อมูล ( การถ่ายโอนข้อมูล ) svnadmin dump
ด้วย
svnadmin load
จากนั้นคุณสามารถนำเข้าในการใช้
การอ้างอิงโดยละเอียดใน SVNBook: "การย้ายข้อมูลที่เก็บโดยใช้ svnadmin"
โดยทั่วไปจะปลอดภัยในการคัดลอกโฟลเดอร์ที่เก็บหากเซิร์ฟเวอร์ svn หยุดทำงาน (ที่มา: https://groups.google.com/forum/?fromgroups#!topic/visualsvn/i_55khUBrys%5B1-25%5D )
ดังนั้นหากคุณได้รับอนุญาตให้หยุดเซิร์ฟเวอร์ให้ทำและคัดลอกที่เก็บข้อมูลด้วยสคริปต์หรือเครื่องมือสำรองข้อมูล Cobian Backup เหมาะสมอย่างยิ่งกับที่นี่เพราะมันสามารถหยุดและเริ่มบริการโดยอัตโนมัติและสามารถสำรองข้อมูลเพิ่มเติมได้ดังนั้นคุณจะสำรองข้อมูลในส่วนของพื้นที่เก็บข้อมูลที่มีการเปลี่ยนแปลงเมื่อเร็ว ๆ นี้เท่านั้น (มีประโยชน์ถ้าพื้นที่เก็บข้อมูลมีขนาดใหญ่ )
ตัวอย่าง:
เพิ่มงานสำรอง:
ตั้งค่าซอร์สเป็นโฟลเดอร์ที่เก็บ (เช่นC:\Repositories\
),
เพิ่มเหตุการณ์ก่อนสำรอง"STOP_SERVICE"
VisualSVN
เพิ่มเหตุการณ์หลังการสำรองข้อมูล"START_SERVICE"
VisualSVN
ตั้งค่าตัวเลือกอื่น ๆ ตามต้องการ เราได้ตั้งค่าการสำรองข้อมูลเพิ่มเติมรวมถึงการลบรายการเก่ากำหนดการสำรองปลายทางปลายทางรวมถึงการบีบอัด แยกเก็บ ฯลฯ
กำไร!
มี 2 วิธีหลักในการสำรองข้อมูลเซิร์ฟเวอร์ svn อันดับแรกคือ hotcopy ที่จะสร้างสำเนาของไฟล์ที่เก็บของคุณปัญหาหลักของวิธีนี้คือการบันทึกข้อมูลเกี่ยวกับระบบไฟล์พื้นฐานดังนั้นคุณอาจมีปัญหาในการพยายามกู้คืนข้อมูล การสำรองข้อมูลชนิดนี้ในเซิร์ฟเวอร์ svn ชนิดอื่นหรือเครื่องอื่น มีการสำรองข้อมูลอีกประเภทหนึ่งที่เรียกว่าการถ่ายโอนข้อมูลสำรองนี้จะไม่บันทึกข้อมูลใด ๆ ของระบบไฟล์พื้นฐานและสามารถใช้กับเซิร์ฟเวอร์ SVN ชนิดใดก็ได้ที่อยู่ในการโค่นล้มของ tigiris.org
เกี่ยวกับเครื่องมือสำรองข้อมูลที่คุณสามารถใช้เครื่องมือ svnadmin (สามารถทำ hotcopy และ dump) จากพรอมต์คำสั่งคอนโซลนี้จะอยู่ในไดเรกทอรีเดียวกันกับเซิร์ฟเวอร์ svn ของคุณหรือคุณสามารถ google สำหรับเครื่องมือสำรอง svn
คำแนะนำของฉันคือคุณทำการสำรองข้อมูลทั้งสองประเภทและนำออกจากสำนักงานไปยังบัญชีอีเมลของคุณบริการ amazon s3, ftp หรือบริการสีฟ้าด้วยวิธีนี้คุณจะมีการสำรองข้อมูลที่ปลอดภัยโดยไม่ต้องโฮสต์เซิร์ฟเวอร์ svn ที่ไหนสักแห่ง สำนักงานของคุณ
นี่คือเครื่องมือ GUI Windows สำหรับสร้างดัมพ์ของที่เก็บข้อมูลการโค่นล้มภายในและระยะไกล:
https://falsinsoft-software.blogspot.com/p/svn-backup-tool.html
คำอธิบายเครื่องมือบอกว่า:
เครื่องมือนี้อนุญาตให้ทำการสำรองข้อมูลดัมพ์ของที่เก็บข้อมูลการโค่นล้มภายในและระยะไกล ซอฟต์แวร์ทำงานในลักษณะเดียวกันกับ "svnadmin" แต่ไม่ใช่ GUI ส่วนหน้า แทนที่จะใช้ไลบรารีการโค่นล้มโดยตรงเพื่ออนุญาตให้สร้างการถ่ายโอนข้อมูลในโหมดสแตนด์อโลนโดยไม่มีเครื่องมือเพิ่มเติมอื่น ๆ
หวังว่าความช่วยเหลือนี้ ...
ฉันต้องการคัดลอกไดเรกทอรี repo ทั้งหมดไปยังตำแหน่งสำรองของฉัน ด้วยวิธีนี้หากมีสิ่งใดเกิดขึ้นคุณสามารถคัดลอกไดเรกทอรีกลับมาและพร้อมที่จะไปทันที
เพียงให้แน่ใจว่าจะรักษาสิทธิ์หากจำเป็น โดยปกตินี่เป็นเพียงข้อกังวลของเครื่อง Linux เท่านั้น
สำหรับที่เก็บที่โฮสต์คุณสามารถใช้ svn เวอร์ชัน 1.7 ได้svnrdump
ซึ่งคล้ายกับที่svnadmin dump
เก็บข้อมูลโลคัล นี้บทความให้ดีเดินผ่านซึ่งเป็นหลักเดือดลงไป:
svnrdump dump /URL/to/remote/repository > myRepository.dump
หลังจากคุณดาวน์โหลดไฟล์ดัมพ์แล้วคุณสามารถอิมพอร์ตไฟล์แบบโลคัล
svnadmin load /path/to/local/repository < myRepository.dump
หรืออัปโหลดไปยังโฮสต์ที่คุณเลือก
หากคุณใช้รูปแบบพื้นที่เก็บข้อมูล FSFS (ค่าเริ่มต้น) จากนั้นคุณสามารถคัดลอกพื้นที่เก็บข้อมูลของตัวเองเพื่อทำการสำรองข้อมูล ด้วยระบบ BerkleyDB ที่เก่ากว่านั้นที่เก็บไม่ได้เป็นแพลตฟอร์มที่เป็นอิสระและโดยทั่วไปคุณต้องการใช้การถ่ายโอนข้อมูล svnadmin
หัวข้อเอกสาร svnbook สำหรับการสำรองข้อมูลแนะนำsvnadmin hotcopy
คำสั่งที่จะดูแลปัญหาเช่นไฟล์ในการใช้งานและเช่น
@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
นี่คือไฟล์แบตช์ที่ฉันใช้ซึ่งทำหน้าที่สำรองข้อมูลอยู่
สำหรับโซลูชั่นการสำรองข้อมูลทุกวันและเต็มรูปแบบเพียงแค่ใช้สคริปต์สำรอง SVN ที่นี่
ฉันได้รวบรวมขั้นตอนที่ฉันติดตามเพื่อวัตถุประสงค์ในการสำรองข้อมูลของที่เก็บ 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/
และจัดเก็บซิปไว้ที่ใดที่หนึ่ง ทำสิ่งนี้อย่างสม่ำเสมอ
อย่างที่คนอื่น ๆ บอกกัน hot-backup.py จากทีม Subversion มีคุณสมบัติที่ดีกว่าธรรมดา svnadmin hotcopy
ฉันใช้งานที่กำหนดเวลาไว้ในสคริปต์ไพ ธ อนซึ่งเป็นสไปเดอร์สำหรับที่เก็บข้อมูลทั้งหมดของฉันบนเครื่องและใช้การแบ็คอัพเพื่อเก็บฮอตสปอตหลายวัน (หวาดระแวงความเสียหาย) และsvnadmin svndump
บนเครื่องระยะไกล การฟื้นฟูนั้นง่ายมากจากตอนนี้
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