Инкрементальный бекап 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. а капча совершенно нормальная.

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

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

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
CAPTCHA
КАПЧА