Лучший способ сделать резервные копии 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 может время от времени создавать поврежденные резервные копии, если вам не повезло.

Johan
источник

Ответы:

11

Ищите скрипт svn-hot-backup. Он должен поставляться с Subversion и содержать всю логику, чтобы делать то, что вы хотите, плюс автоматическое развертывание старых резервных копий. Я написал следующий скрипт-обертку, который использует svn-hot-backup для выполнения в качестве ночного задания для резервного копирования одного сервера с несколькими репозиториями, слегка измененными для обобщения.

#!/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' также будет хорошим дополнением к сценарию, чтобы проверить, действительно ли только что скопированный репозиторий действителен.
Андриоид
@ Джохан - да, просто скопируйте их. «Результирующая резервная копия - это полнофункциональный репозиторий Subversion, который можно заместить в качестве замены вашего живого репозитория, если что-то пойдет не так». от svnbook.red-bean.com/nightly/en/…
Джоник
Вы также можете использовать команду find для поиска любых репозиториев, которые изменились только за предыдущие N дней. Просто найдите 'db / current' в выходных данных команды find. Это имеет то преимущество, что вам не нужно постоянно обновлять эту переменную REPOLIST. Кроме того, в SVN 1.8 вам больше не нужно будет делать горячую копию пустого места назначения, но вы сможете добавить к предыдущей горячей копии. Это, вероятно, ускорит горячее копирование резервных копий на 2-3 порядка.
Тгарольд
9

Вы видели документацию по этому поводу ?

По сути, у вас есть два варианта:

  1. Выполнять добавочное резервное копирование, используя svnadmin dump
  2. Резервное копирование всего хранилища с помощью svnadmin hotcopy

Простое создание копии каталога не вариант, потому что ваш репозиторий может измениться во время создания копии.

Независимо от того, используете ли вы инкрементное или полное резервное копирование, это зависит от количества паранойи, размера вашего хранилища, ваших потребностей и вашей инфраструктуры.

InnaM
источник
4

Я рекомендую SVNBackup из-за того, что он способен делать инкрементные резервные копии .

Почему это важно? Что ж, если у вас большая команда разработчиков и у вас есть ежедневная резервная копия Subversion, и ваша система отказывает 12 часов в старой резервной копии, весь рабочий день теряется.

Если вы выполняете полное резервное копирование ( то есть горячее копирование SVN ) много раз в день, то это приводит к ненужной загрузке вашего компьютера хранилища, что раздражает нетерпеливых разработчиков.

В качестве бонуса; Я также рекомендую Backup-PC в качестве решения для резервного копирования. Он может делать инкрементные удаленные резервные копии и способен сэкономить много места, если вы создаете резервные копии одинаковых файлов в разных системах.

Andrioid
источник
4

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

Стивен Р. Лумис
источник
Из руководства «И хотя есть несколько способов сделать это, его основная сила в том, что он может работать удаленно».
Йохан
+1 за упоминание svnsync - like dumpи hotcopyон, безусловно, имеет свое применение. Это может быть очень удобно также для локальных инкрементных резервных копий.
Джоник
И если сервер резервного копирования находится в другом месте, вы решаете множество случаев восстановления за один шаг
Zac Thompson
1
Две вещи, если вы собираетесь пойти по пути svnsync: 1) если у вас большой репо, начните с горячей копии svnadmin, так как это намного быстрее и создает резервные копии данных за пределами / db / revs 2) добавьте вызов svnsync к репо-источнику хук post-commit, чтобы зеркало всегда было в курсе. (Но держите это подальше от крючков зеркала, чтобы зеркало не пыталось отражать себя!)
Роберт Калхун
2

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

Вот статья о резервном копировании SVN-репозиториев. В любом случае, чтение книги SVN является хорошей отправной точкой, как уже было сказано.

максвелл
источник
0

Я делаю резервные копии нескольких репозиториев 100GB + SVN с помощью простого старого rsync. svnadmin dumpи svnadmin hotcopyзаймет дни на этих репозиториях.

Еще одна вещь, на которую стоит обратить внимание, - svnadmin dumpэто не резервное копирование блокировок и скриптов хуков.

kband
источник
-1

Вот что я делаю с моими репозиториями: используйте службу резервного копирования папок, такую ​​как Dropbox (вот ссылка на их версию для Linux ). Вы просто делаете Dropbox корневым каталогом вашего хранилища (или даже над ним), и он будет сохраняться при каждом изменении файла. Мало того, что это будет доступно через компьютеры, но вы сможете получить доступ к нему онлайн и иметь его версии.

Существует несколько таких онлайн-сервисов резервного копирования - большинство из них бесплатны до 2 ГБ.

Путешествующий техник
источник
1
Это хорошо для небольших личных репозиториев, но вряд ли "лучший способ", который ищет плакат. Одна из проблем заключается в том, что вы не можете гарантировать согласованность с одновременным доступом нескольких разработчиков. Основными целями резервного копирования должны быть надежность и согласованность, а не онлайн-доступ и версии.
Мартин Хеемельс