Инкрементальный бекап svn

 

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

Однако бесмысленно каждый день делать полные дампы репозитоиев, тем более svn позволяет легко делать инкрементальный бекап. Для себя я это решил двумя скриптами.

Первый: полный бекап - выполняется в моем случае раз в неделю.

#!/bin/sh
BACKUP_DIR=/home/backup/svn/
SVN_DIR=/var/svn # directory where repos located
DATE=`date +%Y_%m_%d-%H_%M`
 
################################
cd $SVN_DIR
 
for repo in *; do
        # skip non-dirs
        if [ -d $repo ]; then
                # preparing
                mkdir -p "$BACKUP_DIR/$repo/weekly/"
                NEWREV=`svn log -r head file://"$SVN_DIR/$repo"/ | egrep "r[0-9]+" | cut -d "r" -f 2 | cut -d " " -f 1`
                FILENAME="$repo-$DATE-$NEWREV.dump"
                FILEPATH="$BACKUP_DIR/$repo/weekly"
                # crearing dump
                svnadmin dump -q -r 0:$NEWREV "$SVN_DIR/$repo" > "$FILEPATH/$FILENAME"
                echo -n $NEWREV > "$BACKUP_DIR/$repo/svnrev"
                # compressing
                bzip2 "$FILEPATH/$FILENAME"
                # cleaning
                rm -f "$BACKUP_DIR/$repo/inc/"* 2> /dev/null
                find "$BACKUP_DIR/$repo/weekly/" -not -name "$FILENAME"* -and -type f | xargs rm -f
        fi
done

Второй - выполняется каждый день и сохраняет только те ревизии, которые были сделаны с момента последнего бекапа:

#!/bin/sh
BACKUP_DIR=/home/backup/svn/
SVN_DIR=/var/svn
DATE=`date +%Y_%m_%d`
 
################################
cd $SVN_DIR
 
for repo in *; do
        if [ -d "$repo" ]; then
                OLDREV=`cat $BACKUP_DIR/$repo/svnrev`
                NEWREV=`svn log -r head file://"$SVN_DIR/$repo"/ | egrep "r[0-9]+" | cut -d "r" -f 2 | cut -d " " -f 1`
                if [ $OLDREV != $NEWREV ]; then
                        OLDREV=$(($OLDREV+1))
                        mkdir -p "$BACKUP_DIR/$repo/inc/"
                        svnadmin dump -q -r $OLDREV:$NEWREV --incremental "$SVN_DIR/$repo" > "$BACKUP_DIR/$repo/inc/$repo-$OLDREV-$NEWREV.dump" || continue
                        bzip2 "$BACKUP_DIR/$repo/inc/$repo-$OLDREV-$NEWREV.dump" || continue
                        echo -n $NEWREV > "$BACKUP_DIR/$repo/svnrev"
                fi
        fi
done

Восстанавливать: сначала svnadmin load полного бекапа, потом - svnadmin load всех инкрементальных.

В инкрементальном скрипте

В инкрементальном скрипте зачем увеличивать старую версию на 1?
OLDREV=$(($OLDREV+1))
в таком случае получаются забавные имена архивов. если за день версия в svn увеличилась только на 1...

p.s. пипец длинная капча... нахуа?

А чтобы не дампить ревизию

А чтобы не дампить ревизию OLDREV, которая уже есть. Ну, имена будут не очень красивые, но тем не менее все еще понятные.

А через капчу и через такую пролезают. :(

Инкрементный бэкап я делаю с

Инкрементный бэкап я делаю с помощью fsbackup:
http://adw0rd.ru/2009/freebsd-fsbackup/

Откройте для себя apt-cache

Откройте для себя apt-cache show subversion-tools.
Велосипедисты блин...

О, [cut]^Wдебианщики

О, [cut]^дебианщики подтянулись. Йуноша, откройте для себя замечательный мир без apt

А вы откройте для себя

А вы откройте для себя замечательный мир с emerge|yum|pkg или даже make или что у вас там в вашем дистрибутиве.
есть уже куча готовых скриптов, зачем изобретать велосипед.

ЗЫ: А вы знаете какой-то менеджер лучше?
Ну в RPM yum неплохой, а в генте и фряхе - порты отстой...

а я вот считаю что именно

а я вот считаю что именно порты удобны и нужны. а всякие rpm-based дистрибутивы -- нет. и, пожалуйста, не нужно мне расказывать про поделия от RH
p.s. изначальный смысл моего коментария - ответы вида apt* признак недалекого ума. и да, я знаю достаточно пакетных менеджеров линуксов.

А мое мнение о портах, что

А мое мнение о портах, что это только для красноглазых фряшников, и пожалуйста не надо мне расказывать про такое поделье как FreeBSD, 2009 год, а у них до сих пор нету нормального разрешения зависимостей.

Изначальный смысл моего комментария, что тут придумали очередной велосипед.

ой. а что такое "нормального

ой. а что такое "нормального разрешения зависимостей" я за ~5лет юзания fbsd видимо не докопался до этого, просветите уж

Ну если вы за 5 лет юзания

Ну если вы за 5 лет юзания фри не докопались...

Начнем с того что зависимости некоторые системы умеют разрешать до, а не в процессе установки.
Просто феерический плюх мне устроила фря, когда на одном сервере я захотел обновить древний php4 на php5
по комманде make install из порта радостно скачав исходник фря принялась все это собирать, собрала, а потом радостно сдохла, так как нашла установленные php4-gd php4-mysql и еще кучку расширений.
Блин, ей видите-ли нужно сначала все ручками удалить, потом обновить и потом все поставить...

Потом еще выяснилось что там стоит mysql такой-же бородатый и пока не обновишь mysql php4-mysql заменяться на php5-mysql не хотел.
И все это руками и узнаешь во время установки. При этом разумеется продакшен лежит в течении получаса блин. Детский сад!

Как обновляются нормальные системы:
ДО установки отмечаются все зависимости, помечаются сломанные пакеты, пакеты которые нужно обновить, какие будут удалены, какие добавлены, какие обновятся, после чего все пакеты скачиваются, и ставятся, прерывая работу сервера на несколько секунд для перезапуска новых версий.

Буквально сегодня оставил на ночь обновление дебиана на работе до тестовой ветки - 1.3 гига обновлений, смена kde3 на kde4, обновление php, апача, мускуля, смена libc, и все на автомате.

А фря ваша - поделка кривая. Почему у нас так любят это г юзать?

ЗЫ: Любезно предлагаю пофлеймить на тему что лучше дебиан или фря, если есть желание (ivan1986@jabber.ru)
ЗЫЫ: И собственно про ядро фри я ничего не говорю, оно нормальное, но вот порты это ужас.

а я ведь не зря написал что

а я ведь не зря написал что не понимаю о чем Вы. Чесно сказать в первый раз вижу такой метод обновления софта;) практически сразу как только я научился его ставить я и узнал о portupgrade. Сейчас есть еще и portmaster. они-то и помогут Вам безболезненно обновить php4->php5 со всеми зависимостями. причем даунтайм будет явно меньше получаса - mysql-server при обновлении будет остановлен и не запущен автоматически. Изучение man страниц на эти тулзы думаю раскажет Вам массу интересного и полезного (если это конечно Вас интересует), кстати, portupgrade умеет обновлять используя пакеты (если они есть) экономя таким образом время на обновление, хотя с современными серверами и сборкой в несколько потоков (по дефолту уже) это врядли особо актуально (речь не о кде\опенофис)
1.3Гб -- с такими темпами дебиан не только догонит но и перегонит osX по потребляемому трафику;)
по поводу ЗЗЫ: чесно сказать я приятно удивлен что среди поклонников "apt-get install/apt-cache search" есть адекватные личности, как-то в первый раз столкнулся :) обычно это недалекие пионеры которые возможно сами (!) смогли поставить убунту (не важно убив ли случайно уже установленную виндовсХР). Особого смысла продолжать дискуссию не вижу, но если есть желание -- tiger@jabber.org.by
p.s. я сам ~год пользовался дебианом, никапли не жалею что "пользовался" а не "пользуюсь"

спасибо

спасибо за идею.

ps. а капча совершенно нормальная.

Спасибо за скрипты, после

Спасибо за скрипты, после некоторой доработки буду пользоваться :)

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.

Post new comment

The content of this field is kept private and will not be shown publicly.
CAPTCHA
This question is for testing whether you are a human visitor and to prevent automated spam submissions.

Navigation

User login

Syndicate

Syndicate content