Стратегии резервного копирования SVN-репозитория
Я новичок в SVN, и я хотел бы знать, какие методы доступны для резервного копирования репозиториев в среде Windows?
19 ответов
Вы можете использовать что-то вроде (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
Согласно книге:
Вы можете запустить эту команду в любое время и сделать безопасную копию хранилища, независимо от того, используют ли другие процессы хранилище.
Вы можете, конечно, ZIP (желательно 7-Zip) резервную копию. ИМХО Это самый простой вариант резервного копирования: в случае аварии мало что можно сделать, кроме как разархивировать его обратно на место.
На веб-сайте Subversion есть скрипт hotbackup.py, который очень удобен для автоматизации резервного копирования.
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`;
Сценарий источника и более подробная информация о рациональном для этого типа резервного копирования.
Я использую svnsync, который устанавливает удаленный сервер в качестве зеркала / ведомого. У нас был сервер отключен две недели назад, и я смог довольно легко переключить ведомое устройство в исходное положение (нужно было только сбросить UUID в хранилище ведомого устройства к исходному).
Другое преимущество заключается в том, что синхронизацию может выполнять посредник, а не как задача на любом сервере. У меня был клиент для двух VPN, синхронизирующих репозиторий между ними.
svnadmin hotcopy REPOS_PATH NEW_REPOS_PATH
Эта подкоманда делает полную "горячую" резервную копию вашего репозитория, включая все хуки, файлы конфигурации и, конечно, файлы базы данных.
Вы можете создать резервную копию (дамп) с помощью
svnadmin dump
,Затем вы можете импортировать его с помощью
svnadmin load
,
Подробная ссылка в SVNBook: "Перенос данных из репозитория с помощью svnadmin"
В принципе, можно безопасно скопировать папку хранилища, если сервер SVN остановлен. (источник: https://groups.google.com/forum/?fromgroups)
Поэтому, если вам разрешено остановить сервер, сделайте это и просто скопируйте репозиторий, либо с помощью какого-либо скрипта, либо с помощью инструмента резервного копирования. Cobian Backup прекрасно подходит для этого, поскольку он может автоматически останавливать и запускать службы, а также выполнять инкрементное резервное копирование, поэтому вы выполняете резервное копирование только тех частей репозитория, которые были недавно изменены (полезно, если репозиторий велик, а резервное копирование выполняется в удаленном месте).).
Пример:
- Установите Cobian Backup
Добавить задачу резервного копирования:
Установить источник в папку репозитория (например,
C:\Repositories\
),Добавить событие перед резервным копированием
"STOP_SERVICE"
VisualSVN,Добавить событие после резервного копирования,
"START_SERVICE"
VisualSVN,Установите другие параметры по мере необходимости. Мы создали инкрементные резервные копии, включая удаление старых, расписание резервного копирования, место назначения, сжатие вкл. разделение архива и т. д.
Прибыль!
Вот графический инструмент Windows для создания дампов локальных и удаленных репозиториев Subversion:
https://falsinsoft-software.blogspot.com/p/svn-backup-tool.html
Описание инструмента гласит:
Этот простой инструмент позволяет сделать резервную копию локального и удаленного хранилища Subversion. Программное обеспечение работает так же, как и "svnadmin", но не является интерфейсом GUI. Вместо этого используйте непосредственно библиотеки subversion, чтобы позволить создавать дамп в автономном режиме без каких-либо дополнительных инструментов.
Надеюсь, это поможет...
Существует два основных способа резервного копирования сервера SVN. Во-первых, это горячая копия, которая создаст копию файлов репозитория. Основная проблема этого подхода заключается в том, что он сохраняет данные о базовой файловой системе, поэтому у вас могут возникнуть трудности при попытке восстановить данные. этот вид резервного копирования в другой вид сервера SVN или другой машине. Существует другой тип резервной копии, называемый dump, который не будет сохранять любую информацию о лежащей в основе файловой системе и о том, что она доступна, на любой SVN-сервер, основанный на подрывной деятельности tigiris.org.
Что касается инструмента резервного копирования, вы можете использовать инструмент svnadmin (он может выполнять горячее копирование и создание дампа) из командной строки, эта консоль находится в том же каталоге, где живет ваш сервер SVN, или вы можете использовать Google для инструментов резервного копирования SVN.
Я рекомендую вам создавать резервные копии обоих типов и доставлять их из офиса на свою учетную запись электронной почты, в сервис Amazon 3, FTP или Azure. Таким образом, у вас будет надежная резервная копия без необходимости размещать сервер SVN где-то вне Ваш офис.
Для размещенных репозиториев вы можете использовать SVN версии 1.7 svnrdump
что аналогично svnadmin dump
для локальных репозиториев. Эта статья предоставляет хороший обзор, который по сути сводится к:
svnrdump dump /URL/to/remote/repository > myRepository.dump
После того, как вы загрузили файл дампа, вы можете импортировать его локально
svnadmin load /path/to/local/repository < myRepository.dump
или загрузить его на хост по вашему выбору.
Мне нравится просто копировать весь каталог репозитория в папку с резервными копиями. Таким образом, если что-то случится, вы можете просто скопировать каталог обратно и быть готовым к немедленному использованию.
Просто убедитесь, что сохранили разрешения, если это необходимо. Обычно это касается только машин Linux.
Если вы используете формат репозитория 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 резервного копирования и восстановления