Я новачок у 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). IMHO Це найпростіший із варіантів резервного копіювання: у випадку катастрофи мало що робити, крім як розпакувати його назад на місце.
На веб-сайті 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 або на іншій машині. є ще один тип резервної копії, який називається дамп, ця резервна копія не зможе зберегти будь-яку інформацію базової файлової системи та її запиту на будь-який тип SVN-сервера, що базується на підриві tigiris.org.
про інструмент резервного копіювання ви можете використовувати інструмент svnadmin (він здатний робити гарячу копію та скидати) з командного рядка, ця консоль розташована в тому самому каталозі, де живе ваш сервер svn, або ви можете шукати Google для інструментів резервного копіювання svn.
моя рекомендація полягає в тому, що ви робите резервні копії обох видів і виводите їх з офісу на адресу електронної пошти, послугу Amazon s3, ftp або azure, таким чином у вас буде захищене резервне копіювання без необхідності розміщення сервера svn десь поза ваш офіс.
Ось інструмент для графічного інтерфейсу Windows для створення дампа локальних та віддалених сховищ субверсії:
https://falsinsoft-software.blogspot.com/p/svn-backup-tool.html
Опис інструменту говорить:
Цей простий інструмент дозволяє зробити резервну копію локального та віддаленого сховища субверсії. Програмне забезпечення працює так само, як і "svnadmin", але це не інтерфейс GUI над ним. Замість цього безпосередньо використовуйте бібліотеки підривної роботи, щоб дозволити створювати дамп в автономному режимі без будь-якого іншого додаткового інструменту.
Сподіваюся, що це допоможе ...
Мені подобається просто скопіювати весь каталог репо в моє резервне місцезнаходження. Таким чином, якщо щось трапиться, ви можете просто скопіювати каталог назад і бути готовим до роботи негайно.
Просто не забудьте зберегти дозволи, якщо потрібно. Зазвичай це стосується лише машин 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
було більше, ніж фактична редакція, виявлена у віддаленому сховищі (через проблему, згадану вище).
Для того, щоб переконатися , що СКІ також принесли всю історію, то виписка 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 СВП 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