Назад | Перейти на главную страницу

Лучший способ делать резервные копии Subversion?

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

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

#!/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 dump
  2. Сделайте резервную копию всего репозитория, используя svnadmin hotcopy

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

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

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

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

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

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

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

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

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

Я делаю резервную копию нескольких репозиториев svn размером 100 ГБ + с помощью простого старого rsync. svnadmin dump и svnadmin hotcopy на эти репозитории потребуется несколько дней.

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

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

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