Простой и эффективный - Backup -

Проблемы с установкой, настройкой и работой системных и сетевых программ.

Модераторы: GRooVE, alexco

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
Neteru
мл. сержант
Сообщения: 77
Зарегистрирован: 2007-08-08 18:52:53
Контактная информация:

Простой и эффективный - Backup -

Непрочитанное сообщение Neteru » 2007-08-27 14:54:30

Я думаю многие встречались с проблемой восстановления данных. Многие начинали рыскать по Интернету в поисках чего то просто и понятного и я не исключение. И вот кое что получилось найти я его совсем чуточку подправил, больше для своих нужд, чем для Вас =), но это не как не сказалось на его работоспособности.

Делает полный (full backup) архив раз в неделю и периодические каждый день, потом затирает старые и пишет на них новые.
Каждый архив заливается на ftp.

Код: Выделить всё


#! /bin/sh
# скрипт полного и добавочного резервного копирования
# создан 07 февраля 2000
# Базируется на скрипте Daniel O'Callaghan <danny@freebsd.org>
# и модифицирован Gerhard Mourani <gmourani@videotron.ca>
# и еще под модифицирован Igor Znamensky <5000700@mail.ru>
# Измените следующие пять переменных под вашу систему

COMPUTER=`hostname`                       # имя этого компьютера

DIRECTORIES_1="/usr/local/etc"            # каталог резервного копирования
DIRECTORIES_2="/var/db/"                  # каталог резервного копирования

BACKUPDIR_1=/files/backups/1              # где храним резервные копии
BACKUPDIR_2=/files/backups/2              # где храним резервные копии

TIMEDIR=/files/backups/last-full          # где сохраняем время полной резервной копии

TAR=/usr/bin/tar                                # имя и расположение tar

#Вы не должны менять то, что написано ниже
#Но, если Вы уверенны в своих силах, то можно!

PATH=/usr/local/bin:/usr/bin:/bin
DOW=`date +%a`                      # День недели, например Mon
DOM=`date +%d`                      # Дата, например 27
DM=`date +%d%b`                     # Дата и месяц, например 27Sep

# 1-го числа каждого месяца постоянно делаем полную резервную копию
# Каждое воскресенье делаем полную копию - переписываем копию от
# последнего воскресенья
# В остальное время делаем добавочную резервную копию. Каждая добавочная
# резервная копия переписывает добавочную копию с предыдущей недели, с
# тем же именем.
#
# если NEWER = "", тогда tar создает резервные копии всех файлов в каталог,
# иначе только новее чем дата в NEWER. NEWER берет дату из файла
# записываемого каждое воскресенье.
# Ежемесячная полная резервная копия

################################
#Первый архив на основную папку#
################################

if [ $DOM = "01" ]; then
  NEWER=""
    $TAR $NEWER -cf $BACKUPDIR_1/$COMPUTER-$DM.tar $DIRECTORIES_1
    fi
    
# Еженедельная полная резервная копия
    if [ $DOW = "Sun" ]; then
      NEWER=""
      NOW=`date +%d-%b`
	
# Обновление даты еженедельной полной резервной копии
      echo $NOW > $TIMEDIR/$COMPUTER-full-date
      $TAR $NEWER -cf $BACKUPDIR_1/$COMPUTER-$DOW-1.tar $DIRECTORIES_1
	      
# Создание добавочной резервной копии - переписывание аналогичной с
# последней недели
      else
		  
# Берем дату последней полной резервной копии
		      NEWER="--newer `cat $TIMEDIR/$COMPUTER-full-date`"
		        $TAR $NEWER -cf $BACKUPDIR_1/$COMPUTER-$DOW-1.tar $DIRECTORIES_1
			fi
			
# Маленькая утилита которая заливает созданные архивы на FTP; для ее установки наберите pkg_add –r ncftp
# У меня по мимо локальной папки куда все это складывается еще заливается на спецовый ftp для архивов.
      ncftpput -u TEST -p TEST 192.168.0.50 /upload/backups/1 /files/backups/1/$COMPUTER-$DOW-1.tar
			
##############################			
#Второй архив на другую папку#
##############################			

if [ $DOM = "01" ]; then
      NEWER=""
      $TAR $NEWER -cf $BACKUPDIR_2/$COMPUTER-$DM-2.tar $DIRECTORIES_2
      fi
    
# Еженедельная полная резервная копия
    if [ $DOW = "Sun" ]; then
      NEWER=""
      NOW=`date +%d-%b`
	
# Обновление даты еженедельной полной резервной копии
      echo $NOW > $TIMEDIR/$COMPUTER-full-date
      $TAR $NEWER -cf $BACKUPDIR_2/$COMPUTER-$DOW-2.tar $DIRECTORIES_2
	      
# Создание добавочной резервной копии - переписывание аналогичной с
# последней недели
      else
		  
# Берем дату последней полной резервной копии
	NEWER="--newer `cat $TIMEDIR/$COMPUTER-full-date`"
	$TAR $NEWER -cf $BACKUPDIR_2/$COMPUTER-$DOW-2.tar $DIRECTORIES_2
	fi
			
# Маленькая утилита которая заливает созданные архивы на FTP; для ее установки наберите pkg_add –r ncftp
# У меня по мимо локальной папки куда все это складывается еще заливается на спецовый ftp для архивов.
      ncftpput -u TEST -p TEST 192.168.0.50 /upload/backups/1 /files/backups/2/$COMPUTER-$DOW-2.tar


Сразу хочу сказать, что это не мое творчество я просто его показываю тут чутка видоизмененным и все!
Оригинал http://www.opennet.ru/docs/RUS/linuxsos/ch22_1.html


Кстати, если начальство сочтет возможным разместить это пост как скромную статейку, буду очень признателен! ;)
- Простите, так чья грудинка? Ваша или гос. Кирая?
- Кирая!
- Так вот пусть он ее и готовит!

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35200
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: Простой и эффективный - Backup -

Непрочитанное сообщение Alex Keda » 2007-08-31 9:57:08

думаю - у всех по пачке таких скриптов :)
однако - мож кому и полезно будет, хотя я предпочитаю писать сам.
Убей их всех! Бог потом рассортирует...

Аватара пользователя
Neteru
мл. сержант
Сообщения: 77
Зарегистрирован: 2007-08-08 18:52:53
Контактная информация:

Re: Простой и эффективный - Backup -

Непрочитанное сообщение Neteru » 2007-08-31 12:14:41

ну тогда, пусть висит тут, а кому надо найдут! :)
- Простите, так чья грудинка? Ваша или гос. Кирая?
- Кирая!
- Так вот пусть он ее и готовит!

Аватара пользователя
Daywalker
ст. сержант
Сообщения: 326
Зарегистрирован: 2007-03-11 22:28:45
Откуда: г. Котельники, МО
Контактная информация:

Re: Простой и эффективный - Backup -

Непрочитанное сообщение Daywalker » 2007-08-31 12:52:51

Да, да оставьте. Не все же гуру, некоторым на примерах надо учиться :wink:
http://blog.volobuev.su - Блог о системном и сетевом администрировании.

Аватара пользователя
Pattern
сержант
Сообщения: 180
Зарегистрирован: 2007-08-30 23:45:54
Откуда: Санкт-Петербург
Контактная информация:

Re: Простой и эффективный - Backup -

Непрочитанное сообщение Pattern » 2007-08-31 14:39:42

Лис прав, у многих таких скриптов - вагон и маленькая тележка. И тем не менее решил поделиться своим творением. Особой оригинальностью он не светит, где то даже вижны топора и рубанка, но работает исправно. Однако основное отличие от скрипта выше в том, что акцент, на который был поставлен бэкап - это был срез дампа MySQL таблиц. Да, знаю, что лучше бэкапить физические файлы и потом их просто заменять. Однако не всегда такие случаи помогают. В общем кому интересно - вот листинг:

Код: Выделить всё

#!/bin/sh

#################### НАЧАЛО НАЙСТРОЕК ####################
#Формирование даты
date_time=`date +"%Y-%m-%d"`

#Путь к mysqldump
exec_mdump='/usr/local/bin/mysqldump'
#Путь к tar
exec_tar='/usr/bin/tar'
#Путь к FTP
exec_ftp='/usr/local/bin/lftp'

#Логин к MySQL
m_login='login2'
#Пароль к MySQL
m_passwd='passwd2'

#Директория временного хранения бэкапов
backup_path='/opt/backup'
#Директория текущего бэкапа
to_cat=${backup_path}/${date_time}
#Имя конечного бэкап-файла
backup_file=backup_${date_time}.tar.gz

#Имя или IP удалённого хоста, на который будет сбрасываться бэкап
rem_host='192.168.0.1'
#папка бэкапа на удалённом хосте
rem_backup='backup'

#Список баз данных для дампа
db_names='base1
base2
base3'

#Список 1 разделённых директорий
cats1='dir1
dir2
dir3'

#Список 1 разделённых директорий
cats2='dir4
dir5
dir6'
#################### КОНЕЦ НАЙСТРОЕК ####################

echo `date +"Start in %Y-%m-%d %H:%M:%S"`

#Создаём директорию для хранения бэкапа
mkdir -p ${to_cat}

#Перебираем список баз для дампа
#Опции так же можно вынести в качестве настраиваемых данных
#Однако здесь я их представил "AS IS"
#Так же на лету модифицируется дамп:
#- на проверку уже существующих баз
#- заменяется INSERT на REPLACE
#Полсе чего архивируем дамп и удаляем исходник
for a in $db_names
do
	echo "Dumping ${a}"
	${exec_mdump} --user=${m_login} --password=${m_passwd} --default-character-set=cp1251 \
	-acnqQ --add-drop-table=FALSE --no-create-db=TRUE --databases ${a} \
	| sed "s#^CREATE TABLE#CREATE TABLE IF NOT EXISTS# ; s#^INSERT INTO#REPLACE INTO#" \
	> ${to_cat}/${a}_${date_time}.sql
	${exec_tar} -czf ${to_cat}/${a}_${date_time}.tar.gz ${to_cat}/${a}_${date_time}.sql
	rm ${to_cat}/${a}_${date_time}.sql
done

#Перебираем разделённый список директорий 1
for b in $cats1
do
	echo "Packing ${b}"
	${exec_tar} -czf ${to_cat}/${b}_${date_time}.tar.gz ${b}/*
done

#Перебираем разделённый список директорий 2
for c in $cats2
do
	echo "Packing ${c}"
	${exec_tar} -czf ${to_cat}/${c}_${date_time}.tar.gz ${c}/*
done

#Упаковываем всё в единый архив и удаляем временные файлы
echo "Packing ${backup_file}";
${exec_tar} -czf ${backup_path}/${backup_file} ${to_cat}/*
rm ${to_cat}/*
rmdir ${to_cat}

#Отправляем все данные на FTP и удаляем архив
echo "Send file ${backup_file} into ${rem_host}"
cd ${backup_path}/
${exec_ftp} -u 'ftp_login,ftp_passwd' -e "cd ${rem_backup};put ${backup_file};by" ${rem_host}
rm ${backup_path}/${backup_file}

echo `date +"End in %Y-%m-%d %H:%M:%S"`
echo "================================================================================"
Всё это безобразие запускается по крону 1 раз в сутки с записью эх в лог файл. Чаще нельзя - слишком большая нагрузка на серваке, реже - слишком "большой" откат при восстанволении

Код: Выделить всё

15      3       *       *       *       /opt/backup/backup.sh >> /opt/backup/backup.log
Так же на удалённом хосте на случай, если вдруг кто то забыл скачать бэкапы и/или удалить их после скачивания, так же по крону запускается скрипт зачистки

Код: Выделить всё

#!/bin/sh

/usr/bin/find /usr/home/backup/backup/ -type f -not -mtime -7d -delete
Выполнять его рекомендуется перед выполнением и отсылкой бекапа на основном сервере. Так же, если бэкапы слишком большого размера, глубину хранения бэкапов можно уменьшить например до 3 дней (-3d).
Вот в принципе и всё.
Your bunny wrote: its not a bug, this is a feature, actually... ;)

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35200
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: Простой и эффективный - Backup -

Непрочитанное сообщение Alex Keda » 2007-08-31 14:43:04

для одного хостинга писал.
грубо правда - но соёдт.

Код: Выделить всё

#!/bin/sh -xv

# write begin by lissyara 2007-07-23 in 22:11 MSK

# tmp - before delete DA archive
#rm /home/denis/user_backups/*



# variables section
backup_dir="/backup/`date +%Y-%m-%d`"
tmp_dir="${backup_dir}/tmp"
cat="/bin/cat"
grep="/usr/bin/grep"
cut="/usr/bin/cut"
bzip2="/usr/bin/bzip2"
mkdir="/bin/mkdir"
tar="/usr/bin/tar"
mv="/bin/mv"
dirname="/usr/bin/dirname"
basename="/usr/bin/basename"
tr="/usr/bin/tr"
chmod="/bin/chmod"
mysql="/usr/local/bin/mysql"
mysqldump="/usr/local/bin/mysqldump"
df="/bin/df"
tail="/usr/bin/tail"
awk="/usr/bin/awk"
head="/usr/bin/head"
tr="/usr/bin/tr"


mysql_user="`${cat} /usr/local/directadmin/conf/mysql.conf              \
                | ${grep} user | ${cut} -d= -f2`"
mysql_pass="`${cat} /usr/local/directadmin/conf/mysql.conf              \
                | ${grep} passwd | ${cut} -d= -f2`"
system_backup_dir="/etc /usr/local/etc /usr/local/directadmin"


# added by lissyara 2007-08-05 in 01:29 MSK
# calculate space
free_space="`${df} -h /backup/ | ${tail} -1 | ${awk} '{print $4}' |     \
                ${head} -1 | ${tr} -d '[A-Z][a-z]'`"
if [ ${free_space} -le 20 ]
then
        # rm old_archives date -v-1d +%Y-%m-%d
        i=30
        while test $i != 5
        do
        /bin/rm -Rf /backup/`date -v-${i}d +%Y-%m-%d`
        i="`/bin/expr $i - 1`"
        done
fi


# go to tmp dir
${mkdir} -p ${tmp_dir}
${chmod} -R 770 ${backup_dir}
cd ${tmp_dir}

# dumping all databases separately
${mysql} --user=${mysql_user} --password=${mysql_pass}                  \
        --skip-column-names --execute="SHOW DATABASES" |
{
        # reading database name
        while read database_name
        do
        ${mysqldump} --user=${mysql_user} --password=${mysql_pass}      \
                        --quick --complete-insert --databases           \
                        ${database_name} | ${bzip2} >                   \
                        ${database_name}.sql.bz2
        # sync disks
        sync
        done
}

# reading and backuping users data
cd /home/
ls | grep -v -E "mysql|quota." |
{
        # reading user name
        while read user_name
        do
        # mkdir user_name
        ${mkdir} -p ${backup_dir}/${user_name}
        # archiving data
        ${tar} --create --file=- ${user_name} | ${bzip2} >              \
                ${backup_dir}/${user_name}/home.tar.bz2
        # sync disks
        sync
        # mv database archive
        ${mv} ${tmp_dir}/${user_name}_* ${backup_dir}/${user_name}/
        # sync disks
        sync
        done
}

# archiving system settings
${mkdir} ${backup_dir}/system_backup/
# archiving system
for sys_dir_pathname in ${system_backup_dir}
do
        # go to base dir
        cd `${dirname} ${sys_dir_pathname}`
        # archive dir
        ${tar} --create --file=- `${basename} ${sys_dir_pathname}` |    \
                ${bzip2} > ${backup_dir}/system_backup/bkp`echo         \
                ${sys_dir_pathname} | ${tr} "/" "_"`.tar.bz2
        # sync disks
        sync
done

# mv databases not match with username - system databases.
cd ${tmp_dir}
${mv} * ${backup_dir}/system_backup/
/bin/rmdir ${tmp_dir}

# sync disks
sync

exit 0;
# end writting script by lissyara 2007-07-23 in 23:28
Последний раз редактировалось Alex Keda 2007-08-31 21:04:33, всего редактировалось 1 раз.
Причина: теги перепутал
Убей их всех! Бог потом рассортирует...

Аватара пользователя
Neteru
мл. сержант
Сообщения: 77
Зарегистрирован: 2007-08-08 18:52:53
Контактная информация:

Re: Простой и эффективный - Backup -

Непрочитанное сообщение Neteru » 2007-08-31 20:53:09

Ооо! Какой неожиданный поворот!
Ну ка! Давайте выкладывайте свои "пачки скриптов", а то ...
У кого еще чего есть интересного :wink:

Кстати, можно даже открыть целый раздел, например "АВТОМАТИЗАЦИЯ", где будет подборка всевозможных скриптов.
- Простите, так чья грудинка? Ваша или гос. Кирая?
- Кирая!
- Так вот пусть он ее и готовит!

Аватара пользователя
dikens3
подполковник
Сообщения: 4856
Зарегистрирован: 2006-09-06 16:24:08
Откуда: Нижний Новгород
Контактная информация:

Re: Простой и эффективный - Backup -

Непрочитанное сообщение dikens3 » 2007-08-31 22:11:59

Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.

Аватара пользователя
OlegMS
ефрейтор
Сообщения: 67
Зарегистрирован: 2007-08-21 18:51:57

Re: Простой и эффективный - Backup -

Непрочитанное сообщение OlegMS » 2007-09-03 16:57:03

вы тут backup обсуждаете или скриптами мереетесь? :)
если первое, то весьма неплох sysutils/fsbackup, рекомендую к рассмотрению. Если второе, то я в сторонке посижу...

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35200
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: Простой и эффективный - Backup -

Непрочитанное сообщение Alex Keda » 2007-09-03 18:10:35

OlegMS писал(а):вы тут backup обсуждаете или скриптами мереетесь? :)
если первое, то весьма неплох sysutils/fsbackup, рекомендую к рассмотрению. Если второе, то я в сторонке посижу...
статеку накатай.
оценим :))
Убей их всех! Бог потом рассортирует...

Аватара пользователя
Neteru
мл. сержант
Сообщения: 77
Зарегистрирован: 2007-08-08 18:52:53
Контактная информация:

Re: Простой и эффективный - Backup -

Непрочитанное сообщение Neteru » 2007-09-04 8:44:52

OlegMS писал(а):
вы тут backup обсуждаете или скриптами мереетесь?
если первое, то весьма неплох sysutils/fsbackup, рекомендую к рассмотрению. Если второе, то я в сторонке посижу...
Вот я как раз хотел тоже самое сказать!
Ты статью, в ней покажи весь функционал рекомендуемого продукта!
Что бы прочитал и без колибаний решительно все поставил!
Вот тогда.... :D
------------
Давай... ждем хорошо написанную статью от тебя! :wink:
- Простите, так чья грудинка? Ваша или гос. Кирая?
- Кирая!
- Так вот пусть он ее и готовит!

Аватара пользователя
OlegMS
ефрейтор
Сообщения: 67
Зарегистрирован: 2007-08-21 18:51:57

Re: Простой и эффективный - Backup -

Непрочитанное сообщение OlegMS » 2007-09-04 9:16:09

вот пристали :) Опыт работы с ней на статью не тянет. У меня только конфиги бэкапятся локально, хотя заявлена поддержка баз, удаленных бэкапов, шифрации. Смотреть на сайте - http://www.opennet.ru/dev/fsbackup/