Стратегии резервного копирования хранилища SVN

Я новичок в SVN и я хотел бы знать, какие методы доступны для резервного копирования репозиториев в среде Windows?

19 ответов


Вы можете использовать что-то вроде (Linux):

svnadmin dump repositorypath | gzip > backupname.svn.gz

поскольку Windows не поддерживает GZip, это просто:

svnadmin dump repositorypath > backupname.svn

мы используем svnadmin hotcopy, например:

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

по состоянию на книги:

вы можете запустить эту команду в любое время и сделать безопасную копию репозитория, независимо от того, используют ли другие процессы репозиторий.

вы можете, конечно, ZIP (желательно 7-Zip) резервную копию. IMHO это самый простой из вариантов резервного копирования: в случае катастрофы мало что можно сделать, кроме как распаковать его обратно в позиция.


есть hotbackup.py скрипт доступен на веб-сайте Subversion, что довольно удобно для автоматизации резервного копирования.

http://svn.apache.org/repos/asf/subversion/trunk/tools/backup/hot-backup.py.in


вот скрипт Perl, который будет:

  1. резервное копирование репозитория
  2. скопируйте его на другой сервер через SCP
  3. восстановить резервную копию
  4. создайте тестовый репозиторий из резервной копии
  5. сделать тестовую проверку
  6. напишите вам с любыми ошибками (через cron)

сценарий:

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

источник сценария и дополнительные сведения о rational для этого типа резервного копирования.


Я использую svnsync, которая настраивает удаленный сервер как зеркало/раб. У нас был сервер, спустившийся две недели назад, и я смог переключить ведомое устройство в основное положение довольно легко (только должен был сбросить UUID в репозитории slave на оригинал).

еще одно преимущество заключается в том, что синхронизация может выполняться посредником, а не как задача на любом сервере. У меня был клиент, чтобы два VPN синхронизировали репозиторий между ними.


svnadmin hotcopy

svnadmin hotcopy REPOS_PATH NEW_REPOS_PATH

эта подкоманда делает полную" горячую " резервную копию вашего репозитория, включая все крючки, файлы конфигурации и, конечно же, файлы базы данных.


svnbackup в Google Code, консольное приложение .NET.


  • вы можете создать резервную копию репозитория (dump) С svnadmin dump.

  • затем вы можете импортировать его с помощью svnadmin load.

подробная ссылка в SVNBook: "миграция данных репозитория с помощью svnadmin"


В основном безопасно копировать папку репозитория, если сервер svn остановлен. (источник:https://groups.google.com/forum/?fromgroups#!тема/visualsvn / i_55khUBrys%5B1-25%5D)

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

пример:

  1. Установить Cobian Backup
  2. Добавить задачу резервного копирования:

    • установить источник в папку репозитория (например,C:\Repositories\),

    • добавить событие предварительного резервного копирования "STOP_SERVICE" VisualSVN,

    • добавить событие после резервного копирования,"START_SERVICE" Клиента VisualSVN,

    • при необходимости установите другие параметры. мы создали инкрементные резервные копии, включая удаление старых, расписание резервного копирования, назначение, сжатие ВКЛ. деление архива на части и т. д.

  3. профит!


существует 2 основных метода резервного копирования svn-сервера, во-первых, hotcopy, который создаст копию ваших файлов репозитория, основная проблема с этим подходом заключается в том, что он сохраняет данные о базовой файловой системе, поэтому у вас могут возникнуть некоторые трудности с повторным хранением этого вида резервной копии в другом виде svn-сервера или другой машине. существует другой тип резервной копии под названием dump, эта резервная копия не будет сохранять любую информацию о базовой файловой системе и ее питьевой на любой сервер SVN основанный внутри tigiris.org подрывная деятельность.

об инструменте резервного копирования вы можете использовать инструмент svnadmin (он может делать hotcopy и дамп) из командной строки, эта консоль находится в том же каталоге, где живет ваш сервер svn, или вы можете google для инструментов резервного копирования svn.

моя рекомендация заключается в том, что вы делаете оба вида резервных копий и получаете их из офиса на свой адрес электронной почты, сервис amazon s3, ftp или службы azure, таким образом, у вас будет резервная копия securityy без разместить сервер svn где-нибудь вне вашего офиса.


ЗДЕСЬ Инструмент GUI Windows для создания дампа локальных и удаленных репозиториев subversion:

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

описание инструмента говорит:

этот простой инструмент позволяет сделать резервную копию дампа локального и удаленного репозитория subversion. Программное обеспечение работает таким же образом" svnadmin", но не является интерфейсом GUI над ним. Вместо этого используйте непосредственно библиотеки subversion для разрешения создать дамп в автономном режиме без каких-либо дополнительных инструментов.

надеюсь, что это поможет...


Мне нравится просто копировать весь каталог РЕПО в мое местоположение резервной копии. Таким образом, если что-то произойдет, вы можете просто скопировать каталог обратно и быть готовым немедленно.

просто убедитесь, чтобы сохранить разрешения, если это необходимо. Обычно это касается только машин Linux.


для размещенных репозиториев вы можете использовать svn версии 1.7 svnrdump, что аналогично svnadmin dump для локальных хранилищ. Это статьи обеспечивает приятную прогулку, которая по существу сводится к:

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

после загрузки файла дампа вы можете импортировать его локально

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

или загрузить его на хост по вашему выбору.


Если вы используете формат репозитория FSFS (по умолчанию), вы можете скопировать сам репозиторий для создания резервной копии. С более старой системой BerkleyDB репозиторий не является независимым от платформы, и вы обычно хотите использовать дамп svnadmin.

на svnbook раздел документации для резервного копирования рекомендует svnadmin hotcopy команда, так как она будет заботиться о таких проблемах, как файлы в использовании и такие.


@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-Zipz.exe" a "\HOME\Development\Backups\SubVersion\%folder%\Jake.7z" -sibackupname.svn

это пакетный файл, который я запускаю, который выполняет мои резервные копии


для ежедневного и полного резервного копирования просто используйте сценарии резервного копирования SVN здесь.


Я составлял сам для резервного копирования удаленного СВН репозиторий моего проекта.

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

это занимает время и говорит, что он извлекает журналы из репозитория. Он создает набор файлов внутри C:\Documents and Settings\nverma\.svk\local.

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

теперь вы можете играть с вашим локальным репозиторием (/home/user/.svk/local в этом пример), как если бы это был обычный репозиторий SVN!

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

команда svk miror генерирует фиксацию в только что созданном репозитории. Таким образом, все коммиты, созданные последующей синхронизацией, будут иметь номера ревизий, увеличенные на единицу по сравнению с удаленной публикой хранилище.

но это было нормально для меня, так как я хотел только резервную копию удаленного репозитория время от времени, ничего больше.

проверка:

чтобы проверить, используйте SVN-клиент с локальным репозиторием следующим образом:

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

эта команда затем переходит к проверке последней версии из локального репозитория. В конце он говорит:Checked out revision N. Это N был на один больше, чем фактическая ревизия, найденная в удаленном репозитории (из-за проблема, упомянутая выше).

чтобы убедиться, что svk также принесла всю историю, проверка SVN была запущена с различными старыми версиями, используя -r С 2, 10, 50 etc. Тогда файлы в <local-dir-path-to-checkout-onto> были подтверждены, что из этой редакции.

в конце, zip каталог C:/Documents and Settings\nverma/.svk/local/ и хранить zip где-то. Продолжайте делать это регулярно.


как говорили другие, hot-backup.py из команды Subversion есть некоторые приятные функции над простоsvnadmin hotcopy

Я запускаю запланированную задачу на скрипте python, который пауки для всех моих репозиториев на машине, и использует hotbackup, чтобы сохранить несколько дней hotcopies (параноик коррупции) и svnadmin svndump на удаленной машине. Восстановление действительно легко из этого - пока.


1.1 создать дамп из репозитория SVN (Subversion)

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

реальный пример

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

1.2 Gzip Создал Дамп

gzip -9 /path/to/reponame.dump

реальный пример

gzip -9 /backups/testrepo.dump

1.3 SVN дамп и gzip дамп с одним лайнером

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

реальный пример

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

как создать резервную копию (дамп) и восстановить (загрузить) SVN (Subversion) репозиторий на Линукс.
Ref: svn subversion backup andrestore