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

195

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

Роберт Дин
источник
1
VisualSVN Server для Windows включает в себя встроенную функцию для резервного копирования и проверки SVN-репозиториев по расписанию: visualsvn.com/server/features/backup
bahrep

Ответы:

179

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

svnadmin dump repositorypath | gzip > backupname.svn.gz

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

svnadmin dump repositorypath > backupname.svn
Николай Реушлинг
источник
11
я не знаю наверняка, но наверняка некоторые инструменты, такие как 7-zip, смогут сжимать данные из STDIN, а это значит, что вы также можете использовать первый стиль в Windows.
Nickf
5
Я просто смотрю на это сам, и один комментарий из документации svnbook.red-bean.com/nightly/en/… , что вы получите очень большой вывод дампа svnadmin, если вы не используете опцию --deltas.
Джейсон С
5
И Windows поддерживает gzip, просто получите его с веб-страницы unxutils unxutils.sourceforge.net
Jason S,
52
Используя 7Zip: svnadmin dump repositorypath | "%ProgramFiles%\7-Zip\7z.exe" a backup.7z -sibackupname.svn это создаст файл с именем 'backup.7z', который содержит один файл 'backupname.svn', который является выходным svnadmin dump.
Мэтт
4
@ Джош Стодола Баш :for project in *; do svnadmin dump ${project} | gzip > /backuppath/${project}.svn.gz; done;
Федир Рыхтик
107

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

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

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

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

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

Дункан Смарт
источник
13
Я думаю, что дамп svnadmin предпочтителен для резервного копирования по нескольким причинам. См. Svn.haxx.se/users/archive-2005-05/0842.shtml
daremon
4
@daremon: Я предлагаю вам прочитать ответы на посты, на которые вы ссылаетесь, в частности, тот, в котором упоминается дамп svnadmin, не включает контрольные файлы репо.
Powerlord
близкая гонка, но я голосую за свалку svnadmin после прочтения ответов, предложенных Р.
Бемроузом
Команда hotcopy не перезаписывает и не увеличивает создаваемые резервные копии. Поэтому, если вы планируете автоматизировать его в Windows с помощью планировщика задач, посмотрите на следующий пакетный файл: cfchimp.com/wordpress/2008/05/…
Райан Сэмпсон,
1
Слово предупреждения. Не копируйте горячую копию svnsync, отражающую копию хранилища, пока svnsync работает! Полученная копия может быть повреждена. Смотрите эту ветку для деталей: subversion.open.collab.net/ds/...
zvolkov
22

Вот скрипт 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`;

Сценарий источника и более подробная информация о рациональном для этого типа резервного копирования.

отметки
источник
19

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

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

Том Мэйфилд
источник
так что он синхронизирует последние версии репо между двумя, очевидно?
PositiveGuy
1
Хотя это и есть в названии, я не знаю, что я бы назвал это «синхронизацией». Это действительно резервная копия, где она будет принимать ревизии на главном сервере и помещать их на ведомый. Если вы вносите изменения в раба, они либо нарушат «синхронизацию», либо приведут к безумию. Предполагаемое использование инструмента - создавать сторонние зеркала только для чтения, но он выполняет замечательную работу по созданию резервного сервера.
Том Мэйфилд,
1
Преимущество svnsync в том, что вы можете запускать это очень часто. Каждые десять минут или даже при каждом коммите (используя хук). Преимущество этого состоит в том, что можно уменьшить потенциальную потерю данных, которую вы могли бы получить между последней резервной копией и потерянным живым репо.
8
12

свнадмин hotcopy

svnadmin hotcopy REPOS_PATH NEW_REPOS_PATH

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

Адам
источник
5

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

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

Пример:

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

    • Установить источник в папку хранилища (например C:\Repositories\),

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

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

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

  3. Прибыль!

АТХ
источник
4

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

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

Я рекомендую вам создавать резервные копии обоих типов и доставлять их из офиса на свою учетную запись электронной почты, в сервис Amazon 3, FTP или Azure. Таким образом, у вас будет надежное резервное копирование без необходимости размещать сервер SVN где-то вне Ваш офис.

Жозе Мануэль Охеда
источник
4

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

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

Описание инструмента гласит:

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

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

Suppaman
источник
Спасибо, что поделились этим, делайте в точности так, как указано.
Эд ДеГанье
3

Мне нравится просто копировать весь каталог репозитория в папку с резервными копиями. Таким образом, если что-то случится, вы можете просто скопировать каталог обратно и быть готовым к немедленному переходу.

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

Миша М
источник
7
это не совсем безопасно, если кто-то делает коммит во время операции копирования - со мной такое случалось, даже когда только 4 человека имели доступ к репо и использовали его нечасто. См. Ответ Дункана об использовании горячей копии.
Nickf
Однако, если вы работаете в одиночку, то я полагаю, что это безопасный способ сделать резервную копию репо? Я использую Subversion для своих личных проектов, и это то, чем я сейчас занимаюсь.
Эндрю Гаррисон
3

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

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

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

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

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

Андреас Дж.
источник
3

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

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

crashmstr
источник
2
@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

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

RoughPlace
источник
1

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

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

Нитин Верма
источник
0

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

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

быстрая сушка
источник
0

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 резервного копирования и восстановления

Аамир Шахзад
источник