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

StackOverflow https://stackoverflow.com/questions/33055

  •  09-06-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

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

svnadmin dump repositorypath | gzip > backupname.svn.gz

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

svnadmin dump repositorypath > backupname.svn

Другие советы

Мы используем горячую копию svnadmin, например:

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

Согласно книга:

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

Вы, конечно, можете заархивировать (предпочтительно 7-Zip) резервную копию.ИМХО, это самый простой из вариантов резервного копирования:в случае катастрофы мало что можно сделать, кроме как распаковать его обратно на место.

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

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 в подчиненном репозитории на исходный).

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

горячая копия svnadmin

svnadmin hotcopy REPOS_PATH NEW_REPOS_PATH

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

svnbackup ( резервная копия svn) смотрите в Google Code, консольном приложении .NET.

  • Вы можете создать резервную копию репозитория (свалка) с 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-сервере или на другой машине.есть еще один тип резервного копирования под названием свалка эта резервная копия не будет сохранять информацию о файловой системе и ее питьевой любой SVN-сервер, базирующейся в tigiris.org диверсия.

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

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

Вот инструмент Windows с графическим интерфейсом для создания дампа локальных и удаленных репозиториев subversion:

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

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

Этот простой инструмент позволяет создать резервную копию дампа локального и удаленного репозитория subversion.Программное обеспечение работает так же, как и "svnadmin", но не является графическим интерфейсом поверх него.Вместо этого используйте непосредственно библиотеки 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 dump.

Тот Самый раздел документации 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\7-Zip\7z.exe" a "\\HOME\Development\Backups\SubVersion\%folder%\Jake.7z" -sibackupname.svn

Это запущенный мной пакетный файл, который выполняет мои резервные копии

Для ежедневного и полного резервного копирования просто используйте Сценарии резервного копирования 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 и т.д.Затем файлы в <local-dir-path-to-checkout-onto> было подтверждено, что они взяты из этой редакции.

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

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

Я запускаю запланированную задачу в скрипте Python, который работает со всеми моими репозиториями на компьютере, и использует hotbackup для хранения горячих копий на несколько дней (параноидально из-за коррупции) и 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) в Linux.
Ссылка: резервное копирование и хранение svn subversion

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top