Инкрементальный бекап svn
Опубликовано vladimir в Пнд, 05/25/2009 - 00:23
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. а капча совершенно нормальная.
Спасибо за скрипты, после
Спасибо за скрипты, после некоторой доработки буду пользоваться :)
Отправить комментарий