Cách tốt nhất để sao lưu Subversion?


10

Cách tốt nhất để thực hiện sao lưu Subversion (trên máy chủ dựa trên Debian).

Có phải là để sử dụng svnadmin?

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

Hoặc có thể chỉ để tar các dir nơi các kho lưu trữ?

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

Những ưu và nhược điểm của những điều trên là gì?

Cảm ơn Johan


Cập nhật : Đây là một máy chủ nhỏ chỉ có một số repos. Vì vậy, sao lưu gia tăng có lẽ là không cần thiết, tôi nghĩ tốt hơn là tập trung vào việc giữ cho nó đơn giản.

Cập nhật : Tôi đã sử dụng tập lệnh gói trình bao (lần lượt là trình bao bọc cho svn-hot-backup) để thực hiện sao lưu toàn bộ và sau đó thực hiện khôi phục hoàn toàn trên một máy tính sạch khác. Tuy nhiên, tôi đã xóa phần "SVN_HOTBACKUP_NUM_BACKUPS = 10" vì nó không hoạt động với tôi.

Xin lưu ý rằng tôi cảm thấy nó đơn giản và kết quả rất gần với chỉ tar. Nhưng như Manni đã chỉ ra ở đây để sử dụng svn-hot-backup / "svnadmin hotcopy" là một phương pháp đáng tin cậy hơn, vì tar có thể tạo ra các bản sao lưu bị hỏng theo thời gian nếu bạn không may mắn.

Câu trả lời:


11

Hãy tìm tập lệnh sao lưu svn-hot. Nó sẽ xuất xưởng với lật đổ, và chứa tất cả logic để làm những gì bạn muốn, cộng với tự động lăn ra khỏi các bản sao lưu cũ. Tôi đã viết kịch bản trình bao bọc sau đây sử dụng svn-hot-backup để chạy như một cronjob hàng đêm để sao lưu một máy chủ duy nhất có nhiều kho lưu trữ, được sửa đổi một chút để được khái quát hóa.

#!/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
Và vì đây là một trình bao bọc cho hotcopy svnadmin, tôi đoán để khôi phục, tôi chỉ sao chép các tệp trong / var / subversion / repos /? Tôi có cần phải làm gì khác không?
Johan

'svnadmin xác minh' cũng sẽ là một bổ sung tốt cho tập lệnh để xác minh xem kho lưu trữ bạn vừa sao chép có thực sự hợp lệ hay không.
Andrioid

@Johan - vâng, chỉ cần sao chép chúng. "Bản sao lưu kết quả là một kho lưu trữ Subversion đầy đủ chức năng, có thể được đưa vào để thay thế cho kho lưu trữ trực tiếp của bạn nếu có gì đó không ổn." từ svnbook.red-bean.com/nightly/en/
Jonik

Bạn cũng có thể sử dụng lệnh find để tìm kiếm bất kỳ kho lưu trữ nào chỉ thay đổi trong vòng N ngày trước đó. Chỉ cần tìm kiếm 'db / current' trong đầu ra của lệnh find. Điều này có lợi thế là bạn không cần phải cập nhật liên tục biến REPOLIST đó. Ngoài ra, trong SVN 1.8, bạn sẽ không còn cần phải hotcopy đến một đích trống nữa, mà sẽ có thể nối thêm vào một hotcopy trước đó. Điều này có thể sẽ tăng tốc độ sao lưu hotcopy lên 2-3 bậc độ lớn.
tgharold

9

Bạn đã xem tài liệu về điều này?

Về cơ bản, bạn có hai lựa chọn:

  1. Thực hiện sao lưu gia tăng bằng cách sử dụng svnadmin dump
  2. Sao lưu toàn bộ kho lưu trữ của bạn bằng cách sử dụng svnadmin hotcopy

Đơn giản chỉ cần tạo một bản sao của thư mục không phải là một tùy chọn vì kho lưu trữ của bạn có thể thay đổi trong khi bản sao đang được tạo.

Cho dù bạn đang sao lưu toàn bộ hoặc sao lưu đầy đủ tùy thuộc vào số lượng hoang tưởng, kích thước của kho lưu trữ, nhu cầu của bạn và cơ sở hạ tầng của bạn.


4

Tôi khuyên bạn nên sử dụng SVNBackup do thực tế là nó có khả năng thực hiện sao lưu gia tăng .

Tại sao nó quan trọng? Chà, nếu bạn có một nhóm phát triển lớn và bạn có bản sao lưu Subversion hàng ngày và hệ thống của bạn không thành công trong 12 giờ vào bản sao lưu cũ, toàn bộ công việc trong ngày sẽ bị mất.

Nếu bạn thực hiện sao lưu toàn bộ (đó là bản sao nóng SVN ) nhiều lần trong ngày, bạn sẽ gây ra tải không cần thiết cho máy lưu trữ của mình, điều đó sẽ gây khó chịu cho các nhà phát triển thiếu kiên nhẫn.

Như một phần thưởng; Tôi cũng khuyên dùng Backup-PC như một giải pháp sao lưu. Nó có thể thực hiện sao lưu từ xa gia tăng và có khả năng tiết kiệm nhiều dung lượng nếu bạn sao lưu các tệp giống hệt nhau trên các hệ thống khác nhau.


4

Tôi sử dụng svnsync để sao lưu vào kho lưu trữ chỉ đọc, được sao lưu bằng các bản sao cũ (ngày, tuần, tháng)



Từ hướng dẫn "Và trong khi có một vài cách để làm điều đó, sức mạnh chính của nó là nó có thể hoạt động từ xa".
Johan

+1 để đề cập đến svnsync - thích dumphotcopychắc chắn nó có công dụng của nó. Nó cũng có thể khá tiện dụng cho các bản sao lưu gia tăng cục bộ.
Jonik

Và nếu máy chủ dự phòng ở một địa điểm khác, bạn sẽ giải quyết rất nhiều trường hợp khôi phục trong một bước duy nhất
Zac Thompson

1
Hai điều nếu bạn định đi theo lộ trình svnsync: 1) nếu bạn có một repo lớn bắt đầu với một hotcopy svnadmin, vì nó nhanh hơn nhiều và sao lưu dữ liệu ngoài / db / revs 2) thêm cuộc gọi svnsync vào repo nguồn móc sau cam kết để gương luôn cập nhật. (Nhưng hãy để nó ra khỏi móc của gương để gương không cố gắng tự phản chiếu!)
Robert Calhoun

2

Bạn có thể tạo bản sao lưu gia tăng với svnadmin nếu muốn, bạn nên chạy hot -backup.py trước khi thực hiện lưu trữ tar.

Đây là một bài viết về sao lưu repos svn. Dù sao, đọc sách SVN là một điểm khởi đầu tốt như đã nói trước đây.


0

Tôi sao lưu một số kho lưu trữ 100 GB + svn với rsync cũ. svnadmin dumpsvnadmin hotcopysẽ mất nhiều ngày trên các kho lưu trữ này.

Một điều khác để xem là svnadmin dumpkhông sao lưu khóa và hook script.


-1

Đây là những gì tôi làm với kho lưu trữ của mình: sử dụng dịch vụ sao lưu thư mục như Dropbox (đây là liên kết đến phiên bản Linux của họ ). Bạn chỉ cần đặt Dropbox làm gốc của kho lưu trữ của bạn (hoặc thậm chí ở trên nó) và nó được sao lưu mỗi khi tệp thay đổi. Nó không chỉ có sẵn trên các máy tính, mà bạn sẽ có thể truy cập trực tuyến và có các phiên bản của nó.

Có một số dịch vụ sao lưu trực tuyến như vậy - hầu hết đều miễn phí lên tới 2GB.


1
Điều này tốt cho các repos cá nhân nhỏ, nhưng hầu như không phải là "cách tốt nhất" mà poster đang tìm kiếm. Một vấn đề là bạn không thể đảm bảo tính nhất quán với sự truy cập đồng thời của nhiều nhà phát triển. Các mục tiêu chính của một bản sao lưu phải là độ tin cậy và tính nhất quán, thay vì truy cập trực tuyến và các phiên bản.
Martijn Heemels
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.