Найкращий спосіб зробити резервне копіювання Subversion?


10

Який найкращий спосіб зробити резервне копіювання Subversion (на сервері на базі Debian).

Це використовувати svnadmin?

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

Чи, можливо, просто націлити на дір, де сховища?

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

Які плюси і мінуси вищезазначеного?

Дякую Йохану


Оновлення : Це невеликий сервер, який містить лише кілька репостів. Тож додаткові резервні копії, ймовірно, не потрібні, я думаю, що краще зосередитись на простоті.

Оновлення : я використав сценарій обгортки пакунків (що, в свою чергу, був обгорткою для svn-hot-backup), щоб зробити повну резервну копію, а потім здійснив повне відновлення на іншому чистому комп'ютері. Однак я видалив цю частину "SVN_HOTBACKUP_NUM_BACKUPS = 10", оскільки вона не працювала для мене.

Зверніть увагу, що я вважаю, що це було просто, і результат був дуже близький до того, щоб просто заплямувати дір. Але, як Манні зазначав, тут використовувати svn-hot-backup / "svnadmin hotcopy" - більш надійний метод, оскільки tar може час від часу створювати корумповані резервні копії, якщо вам не пощастить.

Відповіді:


11

Шукайте скрипт svn-hot-backup. Він повинен поставлятися з підривною роботою і містить всю логіку робити те, що ви хочете, плюс автоматичне розгортання старих резервних копій. Я написав наступний скрипт обгортки, який використовує 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
А оскільки це обгортка для гарячої копії svnadmin, я думаю, що для відновлення я просто копіюю файли в / var / subversion / repos /? Чи потрібно робити щось інше?
Йоган

"svnadmin verify" також буде хорошим доповненням до сценарію, щоб перевірити, чи сховище, яке ви тільки що скопіювали, справді дійсне.
Андріоїд

@Johan - так, просто скопіюйте їх. "Отримане резервне копіювання - це повністю функціональне сховище Subversion, яке може бути залишене в якості заміни вашого живого сховища, якщо щось стане жахливо неправильним." від svnbook.red-bean.com/nightly/en / ...
Jonik

Ви також можете скористатися командою find для пошуку будь-яких сховищ, які змінилися лише протягом попередніх N днів. Просто шукайте "db / current" у висновку команди find. Це має ту перевагу, що вам не потрібно постійно оновлювати цю змінну REPOLIST. Крім того, у SVN 1.8 вам більше не потрібно буде копіювати в порожнє місце призначення, але ви зможете додавати до попередньої гарячої копії. Це, ймовірно, прискорить резервне копіювання гарячої копії на 2-3 порядки.
tgharold

9

Ви бачили документацію на це?

В основному у вас є два варіанти:

  1. Виконайте додаткові резервні копії, використовуючи svnadmin dump
  2. Створіть резервну копію всього сховища за допомогою svnadmin hotcopy

Просто зробити копію каталогу не є можливим, оскільки ваш сховище може змінюватися під час створення копії.

Незалежно від того, чи будете ви робити додаткові чи повні резервні копії, залежить від вашої кількості параної, розміру вашого сховища, ваших потреб та інфраструктури.


4

Я рекомендую SVNBackup через те, що він здатний робити додаткові резервні копії .

Чому це важливо? Добре, якщо у вас є велика команда розробників і у вас є щоденне резервне копіювання Subversion, і ваша система виходить з ладу 12 годин на стару резервну копію, робота цілого дня втрачається.

Якщо ви робите резервні копії (які є гарячими копіями SVN ) багато разів на день, ви спричиняєте зайве навантаження на вашу сховище, це буде дратувати нетерплячих розробників.

Як бонус; Я також рекомендую Backup-PC як резервне рішення. Він може робити додаткові віддалені резервні копії та дозволяє економити багато місця, якщо ви створюєте резервну копію однакових файлів у різних системах.


4

Я використовую svnsync для створення резервного копіювання у сховищі, доступному лише для читання, яке є резервним копієм у вікових копіях (день, тиждень, місяць)



З посібника "І хоча існує декілька способів зробити це, його основна сила полягає в тому, що він може працювати віддалено".
Йоган

+1 для згадування svnsync - подібного, dumpі hotcopyвін, безумовно, має своє використання. Це може бути досить зручно і для локальних додаткових резервних копій.
Джонік

А якщо сервер резервного копіювання знаходиться в іншому місці, ви вирішите безліч випадків відновлення за один крок
Зак Томпсон,

1
Дві речі, якщо ви збираєтесь піти по маршруту svnsync: 1) якщо у вас є великий репо-початок із гарячої копії svnadmin, оскільки це набагато швидше і резервне копіювання даних за межі / db / revs 2) додайте виклик svnsync до вихідного репо гачок після фіксації, щоб дзеркало було завжди в курсі. (Але тримайте це від гачків дзеркала, щоб дзеркало не намагалося віддзеркалити себе!)
Роберт Калхун

2

Ви можете зробити резервну копію інкременталів за допомогою svnadmin, якщо вам захочеться, слід запустити hot-backup.py перед тим, як зробити свій архів tar.

Ось стаття про резервне копіювання svn repos. Як би там не було, читання книги SVN - це хороший вихідний пункт, як говорилося раніше.


0

Я створюю резервні копії декількох сховищ 100 ГБ + svn звичайним старим rsync. svnadmin dumpі svnadmin hotcopyтриватиме дні в цих сховищах.

Ще одна річ, на яку слід дивитися, - svnadmin dumpце не резервні копії замків та сценарії гаків.


-1

Ось що я роблю зі своїми сховищами: використовую сервіс резервного копіювання папок типу Dropbox (ось посилання на їх версію для Linux ). Ви просто зробите Dropbox корінь вашого сховища (або навіть вище), і він створюється резервним копієм щоразу, коли файл змінюється. Він не тільки буде доступний на комп’ютерах, але ви зможете отримати доступ до нього в Інтернеті та мати його версії.

Є кілька таких онлайн-сервісів резервного копіювання - більшість безкоштовних до 2 Гб.


1
Це добре для невеликих особистих репостів, але навряд чи "найкращий спосіб" шукають плакати. Одна проблема полягає в тому, що ви не можете гарантувати послідовність одночасного доступу декількома розробниками. Основними цілями резервного копіювання повинні бути надійність та послідовність, а не доступ в Інтернет та версії.
Martijn Heemels
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.