Стратегии резервного копирования хранилища 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, который будет:
- резервное копирование репозитория
- скопируйте его на другой сервер через SCP
- восстановить резервную копию
- создайте тестовый репозиторий из резервной копии
- сделать тестовую проверку
- напишите вам с любыми ошибками (через 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 REPOS_PATH NEW_REPOS_PATH
эта подкоманда делает полную" горячую " резервную копию вашего репозитория, включая все крючки, файлы конфигурации и, конечно же, файлы базы данных.
вы можете создать резервную копию репозитория (dump) С
svnadmin dump
.затем вы можете импортировать его с помощью
svnadmin load
.
подробная ссылка в SVNBook: "миграция данных репозитория с помощью svnadmin"
В основном безопасно копировать папку репозитория, если сервер svn остановлен. (источник:https://groups.google.com/forum/?fromgroups#!тема/visualsvn / i_55khUBrys%5B1-25%5D)
поэтому, если вам разрешено остановить сервер, сделайте это и просто скопируйте репозиторий с помощью скрипта или инструмента резервного копирования. Cobian Backup подходит здесь хорошо, так как он может автоматически останавливать и запускать службы, и он может выполнять инкрементное резервное копирование, поэтому вы только резервное копирование частей репозитория которые недавно изменились (полезно, если репозиторий большой, и вы создаете резервную копию в удаленном месте).
пример:
- Установить Cobian Backup
-
Добавить задачу резервного копирования:
установить источник в папку репозитория (например,
C:\Repositories\
),добавить событие предварительного резервного копирования
"STOP_SERVICE"
VisualSVN,добавить событие после резервного копирования,
"START_SERVICE"
Клиента VisualSVN,при необходимости установите другие параметры. мы создали инкрементные резервные копии, включая удаление старых, расписание резервного копирования, назначение, сжатие ВКЛ. деление архива на части и т. д.
профит!
существует 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