Стратегії резервного копіювання репозиторію 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
Я просто дивлюся на це сам і один коментар з docs svnbook.red-bean.com/nightly/en/… полягає в тому, що ви отримаєте дуже великий вихід дампу svnadmin, якщо не скористаєтесь опцією --deltas.
Jason S

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
@Josh Stodola bash :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). IMHO Це найпростіший із варіантів резервного копіювання: у випадку катастрофи мало що робити, крім як розпакувати його назад на місце.


13
Я думаю, що дамп svnadmin є кращим для резервного копіювання з кількох причин. Дивіться svn.haxx.se/users/archive-2005-05/0842.shtml
daremon

4
@daremon: Я пропоную вам прочитати відповіді на посилання, до яких ви посилаєтесь, зокрема на те, що згадує дамп svnadmin, не включає керуючі файли репо.
Powerlord

близька гонка, але я голосую за дамп svnadmin після прочитання відповідей, запропонованих Р.
Бемроуз

Команда гарячої копії не перезаписує та не збільшує створені резервні копії. Тож якщо ви плануєте автоматизувати його у Windows за допомогою планувальника завдань, подивіться на такий пакетний файл: cfchimp.com/wordpress/2008/05/…
Райан Сампсон

1
Слово попередження. Не копіюйте копію дзеркальної копії svnsync'd сховища під час роботи 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 полягає в тому, що ви можете запускати це дуже часто. Кожні десять хвилин або навіть на кожному вчиненні (за допомогою гачка). Перевага в тому, що можна зменшити потенційну втрату даних, яку ви в іншому випадку отримаєте між останньою резервною копією та втратою репо-реального часу.
8DH

12

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

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
  2. Додати завдання резервного копіювання:

    • Встановити джерело для папки сховища (наприклад C:\Repositories\),

    • Додати подію попереднього резервного копіювання "STOP_SERVICE"VisualSVN,

    • Додати події після резервного копіювання, "START_SERVICE"VisualSVN,

    • Встановіть інші параметри за потребою. Ми встановили додаткові резервні копії, включаючи видалення старих, графік резервного копіювання, призначення, стиснення в т.ч. розщеплення архівів тощо.

  3. Прибуток!


4

Є два основні способи резервного копіювання svn-сервера, спочатку - гаряча копія, яка створить копію файлів вашого сховища, головна проблема цього підходу полягає в тому, що він зберігає дані про базовій файловій системі, тому у вас можуть виникнути труднощі при спробі репозиції. такий тип резервного копіювання в іншому виді сервера svn або на іншій машині. є ще один тип резервної копії, який називається дамп, ця резервна копія не зможе зберегти будь-яку інформацію базової файлової системи та її запиту на будь-який тип SVN-сервера, що базується на підриві tigiris.org.

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

моя рекомендація полягає в тому, що ви робите резервні копії обох видів і виводите їх з офісу на адресу електронної пошти, послугу Amazon s3, ftp або azure, таким чином у вас буде захищене резервне копіювання без необхідності розміщення сервера svn десь поза ваш офіс.


4

Ось інструмент для графічного інтерфейсу Windows для створення дампа локальних та віддалених сховищ субверсії:

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

Опис інструменту говорить:

Цей простий інструмент дозволяє зробити резервну копію локального та віддаленого сховища субверсії. Програмне забезпечення працює так само, як і "svnadmin", але це не інтерфейс GUI над ним. Замість цього безпосередньо використовуйте бібліотеки підривної роботи, щоб дозволити створювати дамп в автономному режимі без будь-якого іншого додаткового інструменту.

Сподіваюся, що це допоможе ...


Дякуємо за те, що поділилися цим, робить саме так, як зазначено.
Ed DeGagne

3

Мені подобається просто скопіювати весь каталог репо в моє резервне місцезнаходження. Таким чином, якщо щось трапиться, ви можете просто скопіювати каталог назад і бути готовим до роботи негайно.

Просто не забудьте зберегти дозволи, якщо потрібно. Зазвичай це стосується лише машин Linux.


7
це не зовсім безпечно, якщо хтось бере на себе зобов’язання під час операцій з копіюванням - у мене це траплялося, навіть коли лише 4 людини мають доступ до репо і нечасто користуються ним. Дивіться відповідь Дункана про використання гарячої копії.
nickf

Однак якщо ви працюєте повністю сольно, то я припускаю, що це безпечний спосіб створити резервну копію репо? Я використовую підривну діяльність для своїх особистих проектів, і саме цим я зараз займаюся.
Ендрю Гарнісон

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команду, як він буде дбати про таких питаннях , як файли в використанні і тому подібному.


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

Це запущений у мене пакетний файл, який виконує резервні копії



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було більше, ніж фактична редакція, виявлена ​​у віддаленому сховищі (через проблему, згадану вище).

Для того, щоб переконатися , що СКІ також принесли всю історію, то виписка SVN була запущена з різними старішими версіями , використовуючи -rз 2, 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 СВП Dump і Gzip Dump з однолінійним

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.
Ref: svn subversion backup andrestore

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.