Chiến lược sao lưu kho SVN


195

Tôi mới sử dụng SVN và tôi muốn biết phương pháp nào có sẵn để sao lưu kho trong môi trường Windows?


1
VisualSVN Server cho Windows bao gồm một tính năng tích hợp để sao lưu và xác minh các kho lưu trữ SVN theo lịch trình: visualsvn.com/server/features/backup
bahrep

Câu trả lời:


179

Bạn có thể sử dụng một cái gì đó như (Linux):

svnadmin dump repositorypath | gzip > backupname.svn.gz

Vì Windows không hỗ trợ GZip, nó chỉ là:

svnadmin dump repositorypath > backupname.svn

11
Tôi không biết chắc chắn, nhưng chắc chắn một số công cụ như 7-zip sẽ có thể nén dữ liệu từ STDIN, nghĩa là bạn cũng có thể sử dụng kiểu đầu tiên trên Windows.
nickf

5
Tôi chỉ nhìn vào bản thân mình và một nhận xét từ tài liệu svnbook.red-bean.com/nightly/en/iêu là bạn sẽ nhận được một lượng lớn svnadmin dump, trừ khi bạn sử dụng tùy chọn --deltas.
Jason S

5
Và Windows không hỗ trợ gzip, chỉ cần lấy nó từ trang web unxutils unxutils.sourceforge.net
Jason S

52
Sử dụng 7Zip: svnadmin dump repositorypath | "%ProgramFiles%\7-Zip\7z.exe" a backup.7z -sibackupname.svn Điều này sẽ tạo một tệp có tên 'backup.7z' chứa một tệp duy nhất, 'backupname.svn', là đầu ra từ svnadmin dump.
Matt

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

107

Chúng tôi sử dụng hotcopy svnadmin, vd:

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

Theo cuốn sách :

Bạn có thể chạy lệnh này bất cứ lúc nào và tạo một bản sao an toàn của kho lưu trữ, bất kể các quy trình khác có đang sử dụng kho lưu trữ hay không.

Tất nhiên bạn có thể ZIP (tốt nhất là 7-Zip) bản sao lưu. IMHO Đây là cách đơn giản nhất trong các tùy chọn sao lưu: trong trường hợp có thảm họa, có rất ít việc phải làm ngoài việc giải nén nó trở lại vị trí.


13
Tôi nghĩ svnadmin dump được ưa thích để sao lưu vì một vài lý do. Xem svn.haxx.se/users/archive-2005-05/0842.shtml
daremon

4
@daremon: Tôi khuyên bạn nên đọc các câu trả lời cho các bài đăng mà bạn đã liên kết, cụ thể là bài viết đề cập đến svnadmin dump không bao gồm các tệp kiểm soát của repo.
Powerlord

cuộc đua gần, nhưng, tôi đang bỏ phiếu cho svnadmin dump sau khi đọc các câu trả lời được đề xuất bởi R. Bemrose
mobibob

Lệnh hotcopy không ghi đè hoặc tăng các bản sao lưu mà nó tạo ra. Vì vậy, nếu bạn đang có kế hoạch để tự động nó trong cửa sổ sử dụng task scheduler nhìn vào các tập tin sau hàng loạt: cfchimp.com/wordpress/2008/05/...
Ryan Sampson

1
Một lời cảnh báo. Không sao chép một bản sao nhân bản của svnsync'd của một kho lưu trữ trong khi svnsync đang chạy! Bản sao kết quả có thể bị hỏng. Xem chủ đề này để biết chi tiết: subversion.open.collab.net/ds/ từ
zvolkov


22

Đây là một kịch bản Perl sẽ:

  1. Sao lưu repo
  2. Sao chép nó sang một máy chủ khác thông qua SCP
  3. Lấy bản sao lưu
  4. Tạo một kho lưu trữ thử nghiệm từ bản sao lưu
  5. Kiểm tra kiểm tra
  6. Gửi email cho bạn với bất kỳ lỗi nào (thông qua cron)

Kịch bản:

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`;

Nguồn script và biết thêm chi tiết về tính hợp lý cho loại sao lưu này.


19

Tôi sử dụng svnsync , thiết lập một máy chủ từ xa làm máy nhân bản / nô lệ. Chúng tôi đã có một máy chủ ngừng hoạt động hai tuần trước và tôi có thể chuyển đổi nô lệ sang vị trí chính khá dễ dàng (chỉ phải đặt lại UUID trên kho lưu trữ nô lệ thành bản gốc).

Một lợi ích khác là đồng bộ hóa có thể được điều hành bởi một người trung gian, chứ không phải là một nhiệm vụ trên một trong hai máy chủ. Tôi đã có một máy khách để hai VPN đồng bộ hóa một kho lưu trữ giữa chúng.


Vì vậy, nó đồng bộ các phiên bản repo mới nhất giữa hai rõ ràng?
positiveGuy

1
Mặc dù trong tiêu đề, tôi không biết rằng tôi gọi nó là "đồng bộ hóa". Nó thực sự là một bản sao lưu, nơi nó sẽ sửa đổi bản gốc và đưa chúng vào nô lệ. Nếu bạn thực hiện sửa đổi trên nô lệ, họ sẽ phá vỡ "đồng bộ hóa" hoặc dẫn đến sự điên rồ. Mục đích sử dụng của công cụ này là tạo các gương ngoài trang web, chỉ đọc, nhưng nó thực hiện một công việc đáng ngưỡng mộ là tạo một máy chủ dự phòng.
Tom Mayfield

1
Lợi ích của svnsync là bạn có thể chạy nó rất thường xuyên. Cứ sau mười phút hoặc thậm chí ở mỗi lần cam kết (sử dụng móc). Lợi ích của việc đó là người ta có thể giảm mất dữ liệu tiềm năng mà bạn có thể nhận được giữa lần sao lưu cuối cùng và khi repo trực tiếp bị mất.
8DH

12

svnadmin hotcopy

svnadmin hotcopy REPOS_PATH NEW_REPOS_PATH

Tiểu ban này tạo ra một bản sao lưu đầy đủ các hot hot của kho lưu trữ của bạn, bao gồm tất cả các hook, các tệp cấu hình và, tất nhiên, các tệp cơ sở dữ liệu.




5

Về cơ bản, an toàn để sao chép thư mục kho lưu trữ nếu máy chủ svn bị dừng. (nguồn: https://groups.google.com/forum/?fromgroups#!topic/visualsvn/i_55khUBrys%5B1-25%5D )

Vì vậy, nếu bạn được phép dừng máy chủ, hãy thực hiện và chỉ sao chép kho lưu trữ, với một số tập lệnh hoặc công cụ sao lưu. Sao lưu Cobian phù hợp ở đây vì nó có thể tự động dừng và khởi động dịch vụ và nó có thể sao lưu gia tăng để bạn chỉ sao lưu các phần của kho lưu trữ đã thay đổi gần đây (hữu ích nếu kho lưu trữ lớn và bạn đang sao lưu vào vị trí từ xa ).

Thí dụ:

  1. Cài đặt sao lưu Cobian
  2. Thêm một nhiệm vụ sao lưu:

    • Đặt nguồn vào thư mục kho lưu trữ (ví dụ C:\Repositories\),

    • Thêm sự kiện dự phòng trước "STOP_SERVICE"VisualSVN,

    • Thêm sự kiện hậu sao lưu, "START_SERVICE"VisualSVN,

    • Đặt các tùy chọn khác khi cần thiết. Chúng tôi đã thiết lập các bản sao lưu gia tăng bao gồm loại bỏ các bản cũ, lịch sao lưu, đích, bao gồm nén. lưu trữ chia tách, vv

  3. Lợi nhuận!


4

Có 2 phương pháp chính để sao lưu máy chủ svn, đầu tiên là hotcopy sẽ tạo một bản sao của tệp lưu trữ của bạn, vấn đề chính với cách tiếp cận này là nó lưu dữ liệu về hệ thống tệp cơ bản, do đó bạn có thể gặp khó khăn khi cố gắng đăng lại loại sao lưu này trong một loại máy chủ svn khác hoặc máy khác. có một loại sao lưu khác gọi là dump, bản sao lưu này sẽ không lưu bất kỳ thông tin nào của hệ thống tệp cơ bản và có thể sử dụng được cho bất kỳ loại máy chủ SVN nào dựa trên lật đổ tigiris.org.

về công cụ sao lưu, bạn có thể sử dụng công cụ svnadmin (nó có thể thực hiện hotcopy và dump) từ dấu nhắc lệnh, bảng điều khiển này nằm trong cùng thư mục nơi máy chủ svn của bạn sống hoặc bạn có thể google cho các công cụ sao lưu svn.

Lời khuyên của tôi là bạn nên thực hiện cả hai loại sao lưu và đưa chúng ra khỏi văn phòng để gửi email, dịch vụ amazon s3, ftp hoặc azure, theo cách đó bạn sẽ có một bản sao lưu bảo mật mà không phải lưu trữ máy chủ svn ở đâu đó văn phòng của bạn.


4

Ở đây một công cụ GUI Windows để tạo một kho lưu trữ lật đổ cục bộ và từ xa:

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

Mô tả công cụ cho biết:

Công cụ đơn giản này cho phép tạo một bản sao lưu kết xuất của kho lưu trữ lật đổ cục bộ và từ xa. Phần mềm hoạt động theo cùng một cách của "svnadmin" nhưng không phải là giao diện GUI trên nó. Thay vào đó, hãy sử dụng trực tiếp các thư viện lật đổ để cho phép tạo kết xuất trong chế độ độc lập mà không cần bất kỳ công cụ bổ sung nào khác.

Hy vọng điều này giúp đỡ...


Cảm ơn đã chia sẻ điều này, làm chính xác như đã nêu.
Ed DeGagne

3

Tôi muốn chỉ sao chép toàn bộ thư mục repo vào vị trí sao lưu của tôi. Bằng cách đó, nếu có điều gì đó xảy ra, bạn có thể sao chép thư mục trở lại và sẵn sàng để đi ngay lập tức.

Chỉ cần đảm bảo duy trì quyền, nếu cần. Thông thường, đây chỉ là mối quan tâm trên các máy Linux.


7
điều này không chính xác an toàn nếu ai đó thực hiện cam kết trong một hoạt động sao chép - Tôi đã xảy ra với tôi ngay cả khi chỉ có 4 người truy cập vào repo và sử dụng nó không thường xuyên. Xem câu trả lời của Duncan về việc sử dụng hotcopy.
nickf

Tuy nhiên, nếu bạn đang làm việc hoàn toàn solo, thì tôi cho rằng đây là cách an toàn để sao lưu repo? Tôi sử dụng lật đổ cho các dự án cá nhân của mình và đây là những gì tôi đang làm.
Andrew Garrison

3

Đối với các kho lưu trữ được lưu trữ, bạn có thể sử dụng phiên bản svn 1.7 svnrdump, tương tự svnadmin dumpvới các kho lưu trữ cục bộ. Bài viết này cung cấp một hướng dẫn tốt đẹp, về cơ bản nắm rõ:

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

Sau khi bạn đã tải xuống tệp kết xuất, bạn có thể nhập tệp cục bộ

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

hoặc tải nó lên máy chủ của sự lựa chọn của bạn.


3

Nếu bạn đang sử dụng định dạng kho lưu trữ FSFS (mặc định), thì bạn có thể sao chép chính kho lưu trữ để tạo bản sao lưu. Với hệ thống BerkleyDB cũ hơn, kho lưu trữ không độc lập với nền tảng và bạn thường muốn sử dụng kết xuất svnadmin.

Các chủ đề tài liệu svnbook để sao lưu đề nghị các svnadmin hotcopylệnh, vì nó sẽ chăm sóc các vấn đề như tập tin trong sử dụng và như vậy.


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

Đây là Batch File tôi đang chạy để thực hiện Sao lưu của mình



1

Tôi đã biên soạn các bước tôi làm theo với mục đích lấy bản sao lưu của kho SVN từ xa trong dự án của tôi.

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

Điều này cần có thời gian và nói rằng nó đang tìm nạp các bản ghi từ kho lưu trữ. Nó tạo ra một tập hợp các tập tin bên trong C:\Documents and Settings\nverma\.svk\local.

Để cập nhật kho lưu trữ cục bộ này với bộ thay đổi mới nhất từ ​​bộ điều khiển từ xa, thỉnh thoảng chỉ cần chạy lệnh trước đó.

Bây giờ bạn có thể chơi với kho lưu trữ cục bộ của bạn (/home/user/.svk/local trong ví dụ này) như thể nó là một kho lưu trữ SVN bình thường!

Vấn đề duy nhất với cách tiếp cận này là kho lưu trữ cục bộ được tạo ra với sự gia tăng sửa đổi bằng cách sửa đổi thực tế trong kho lưu trữ từ xa. Như ai đó đã viết:

Lệnh Svk miror tạo ra một cam kết trong kho lưu trữ vừa tạo. Vì vậy, tất cả các cam kết được tạo bởi đồng bộ hóa tiếp theo sẽ có số sửa đổi tăng lên một so với kho lưu trữ công cộng từ xa.

Nhưng, điều này là ổn đối với tôi vì tôi chỉ muốn một số bản sao lưu của kho lưu trữ từ xa theo thời gian, không có gì khác.

Xác minh:

Để xác minh, sử dụng máy khách SVN với kho lưu trữ cục bộ như thế này:

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

Lệnh này sau đó đi kiểm tra bản sửa đổi mới nhất từ ​​kho lưu trữ cục bộ. Cuối cùng nó nói Checked out revision N. Điều nàyN là một trong nhiều hơn so với sửa đổi thực tế được tìm thấy trong kho lưu trữ từ xa (do vấn đề được đề cập ở trên).

Để xác minh rằng Svk cũng đã mang tất cả lịch sử, thanh toán SVN đã được chạy với nhiều phiên bản cũ hơn sử dụng -rvới 2, 10, 50, v.v. Sau đó, các tệp trong<local-dir-path-to-checkout-onto> được xác nhận là từ bản sửa đổi đó.

Cuối cùng, zip thư mục C:/Documents and Settings\nverma/.svk/local/và lưu trữ zip ở đâu đó. Hãy làm điều này thường xuyên.


0

như những người khác đã nói, hot-backup.py từ nhóm Subversion có một số tính năng hay không chỉ đơn giản svnadmin hotcopy

Tôi chạy một tác vụ theo lịch trình trên một kịch bản python giúp thu thập tất cả các kho lưu trữ của tôi trên máy và sử dụng hotbackup để giữ các bản sao nóng giá trị trong vài ngày (hoang tưởng về tham nhũng) và svnadmin svndumptrên một máy từ xa. Phục hồi thực sự dễ dàng từ đó - cho đến nay.


0

1.1 Tạo kết xuất từ ​​kho SVN (Subversion)

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

Ví dụ thực tế

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

1.2 Gzip đã tạo

gzip -9 /path/to/reponame.dump

Ví dụ thực tế

gzip -9 /backups/testrepo.dump

1.3 SVN Dump và Gzip Dump với One-liner

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

Ví dụ thực tế

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

Cách sao lưu (kết xuất) và khôi phục (tải) kho SVN (Subversion) trên Linux.
Tham chiếu: svn sao lưu dự phòng và thay thế

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.