Я новичок в SVN, и я хотел бы знать, какие методы доступны для резервного копирования репозиториев в среде Windows?
Я новичок в SVN, и я хотел бы знать, какие методы доступны для резервного копирования репозиториев в среде Windows?
Ответы:
Вы можете использовать что-то вроде (Linux):
svnadmin dump repositorypath | gzip > backupname.svn.gz
Поскольку Windows не поддерживает GZip, это просто:
svnadmin dump repositorypath > backupname.svn
svnadmin dump repositorypath | "%ProgramFiles%\7-Zip\7z.exe" a backup.7z -sibackupname.svn
это создаст файл с именем 'backup.7z', который содержит один файл 'backupname.svn', который является выходным svnadmin dump
.
for project in *; do svnadmin dump ${project} | gzip > /backuppath/${project}.svn.gz; done;
Мы используем горячую копию svnadmin, например:
svnadmin hotcopy C:\svn\repo D:\backups\svn\repo
Согласно книге :
Вы можете запустить эту команду в любое время и создать безопасную копию хранилища, независимо от того, используют ли другие процессы хранилище.
Вы можете, конечно, ZIP (желательно 7-Zip) резервную копию. ИМХО Это самый простой вариант резервного копирования: в случае аварии мало что можно сделать, кроме как разархивировать его обратно на место.
На веб-сайте Subversion доступен скрипт hotbackup.py, который очень удобен для автоматизации резервного копирования.
http://svn.apache.org/repos/asf/subversion/trunk/tools/backup/hot-backup.py.in
Вот скрипт Perl, который будет:
Сценарий:
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`;
Я использую svnsync , который устанавливает удаленный сервер в качестве зеркала / ведомого. У нас был сервер отключен две недели назад, и я смог довольно легко переключить ведомое устройство в исходное положение (нужно было только сбросить UUID в хранилище ведомого устройства к исходному).
Еще одним преимуществом является то, что синхронизацию может выполнять посредник, а не как задача на любом сервере. У меня был клиент для двух VPN, синхронизирующих репозиторий между ними.
svnadmin hotcopy REPOS_PATH NEW_REPOS_PATH
Эта подкоманда делает полную «горячую» резервную копию вашего репозитория, включая все хуки, файлы конфигурации и, конечно, файлы базы данных.
Вы можете создать резервную копию ( дамп ) с помощью svnadmin dump
.
Затем вы можете импортировать его с помощью svnadmin load
.
Подробная ссылка в SVNBook: «Перенос данных из репозитория с помощью svnadmin»
В принципе, можно безопасно скопировать папку репозитория, если сервер svn остановлен. (источник: https://groups.google.com/forum/?fromgroups#!topic/visualsvn/i_55khUBrys%5B1-25%5D )
Поэтому, если вам разрешено остановить сервер, сделайте это и просто скопируйте репозиторий, либо с помощью какого-либо скрипта, либо с помощью инструмента резервного копирования. Cobian Backup прекрасно подходит для этого, поскольку он может автоматически останавливать и запускать службы, а также выполнять инкрементное резервное копирование, поэтому вы выполняете резервное копирование только тех частей репозитория, которые были недавно изменены (полезно, если репозиторий большой и резервное копирование выполняется в удаленном месте). ).
Пример:
Добавить задачу резервного копирования:
Установить источник в папку хранилища (например C:\Repositories\
),
Добавить событие предварительного резервного копирования "STOP_SERVICE"
VisualSVN,
Добавить событие после резервного копирования, "START_SERVICE"
VisualSVN,
Установите другие параметры по мере необходимости. Мы создали инкрементные резервные копии, включая удаление старых, расписание резервного копирования, назначение, сжатие вкл. расщепление архивов
Прибыль!
Существует два основных способа резервного копирования сервера SVN. Во-первых, это горячая копия, которая создаст копию файлов репозитория. Основная проблема этого подхода заключается в том, что он сохраняет данные о базовой файловой системе, поэтому у вас могут возникнуть трудности с попыткой восстановления. этот вид резервного копирования в другой тип сервера SVN или другой машине. Существует другой тип резервной копии, называемый dump, который не будет сохранять любую информацию о лежащей в основе файловой системе и ее доступную для хранения на любом SVN-сервере, основанном на подрывной деятельности tigiris.org.
Что касается инструмента резервного копирования, вы можете использовать инструмент svnadmin (он может выполнять горячее копирование и создание дампа) из командной строки, эта консоль находится в том же каталоге, где находится ваш сервер SVN, или вы можете использовать Google для инструментов резервного копирования SVN.
Я рекомендую вам создавать резервные копии обоих типов и доставлять их из офиса на свою учетную запись электронной почты, в сервис Amazon 3, FTP или Azure. Таким образом, у вас будет надежное резервное копирование без необходимости размещать сервер SVN где-то вне Ваш офис.
Вот графический инструмент 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\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, который работает для всех моих репозиториев на машине, и использует горячую резервную копию, чтобы сохранить на несколько дней оперативные копии (параноидальные повреждения) и 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 резервного копирования и восстановления