ISP Config сервера Backupscript

от автора

Слушайте вы получите идеальный ISP Config сценарий резервного копирования

#!/мусорное ведро / баш
версия="0.9.4 от 2010-09-13"
# Всегда загружайте последнюю версию здесь: HTTP://www.eurosistems.ro/back-res
# Спасибо или вопросы: HTTP://www.howtoforge.com/forums/showthread.php?т=41609
#
# ИЗМЕНЕНИЙ:
# -----------------------------------------------------------------------------
# версия 0.9.4 - 2010-09-13
# --------------------------
# Небольшое исправление: - Исправлена ​​небольшая ошибка, замененная tar на $TAR в строке восстановления.
# баз данных. (Линия: mysql -u$dbuser -p$dbпароль $rdb <)
# Спасибо Нимарде и Коло.
# -----------------------------------------------------------------------------
# версия 0.9.3 - 2010-08-01
# --------------------------
# Небольшое исправление: - Изменена функция del_old_files для удаления "/" из $to_del
# переменная, используемая для удаления старых файлов
# - Из функции del_old_files удален раздел, используемый для хранения старых
# базы данных (It's not working if there is no space left on device). Добавлен
# в разделе TODO
# -----------------------------------------------------------------------------
# версия 0.9.2 - 2010-04-18
# --------------------------
# Всегда загружайте последнюю версию здесь: HTTP://www.eurosistems.ro/back-res
# Спасибо или вопросы: HTTP://www.howtoforge.com/forums/showthread.php?т=41609
#
# Исправления: - Первый запуск теперь не выдает ошибок (Спасибо nokia80, Змея12,
# рудольфпитерсма, ГиперАтом, jmp51483, бсайбеник, дипешмехта, андипл
# и все остальные)
# - Изменена функция журнала, чтобы принять первое создание каталога.
# - Изменена начальная последовательность, чтобы не проверять свободное место, если
# основной каталог резервного копирования не существует
# - If primary backup dir does not exist now it's created at the start
# - Добавлена ​​строка для удаления maildata при старте, если пользователь останавливается
# сценарий перед тем, как закончить свою работу. Это предотвращает отправку сценария
# неверная почта.
# - Добавил ссылку http://www.howtoforge.com/forums/showthread.php?т=41609
# может быть кто-то из скачавших зайдет на форум.
# - Добавлен первый TODO
# -----------------------------------------------------------------------------
# бета-версия 0.9.1 - последний публичный релиз изменен 2009-12-06
# переехал на http://www.eurosistems.ro/back-res.0.9.1
# -----------------------------------------------------------------------------
# ВСЕ: - Добавить необходимые файлы проверить (смола, bzip2, почта, и т. д.)
# - Создайте лучшую функцию del_old_files (2010-08-01)
# - If you need anything else I'll be happy to do it in my spare time if
# вы спросите здесь: HTTP://www.howtoforge.com/forums/showthread.php?т=41609
#
# Авторские права (с) go0ogl3 gabi@eurosistems.ro
# Если вы хотите вознаградить мою работу, пожертвуйте небольшую сумму через Paypal. (использовать мою почту)
#
# Если вам понравился мой сценарий, пожалуйста, зарегистрируйтесь и скажите спасибо здесь:
# HTTP://www.howtoforge.com/forums/showthread.php?т=41609
# Это сделано для того, чтобы сохранить поток, чтобы этот скрипт мог помочь и другим людям..
#
# Данная программа распространяется в надежде, что она будет полезна,
# но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ; даже без подразумеваемой гарантии
# КОММЕРЧЕСКАЯ ПРИГОДНОСТЬ или ПРИГОДНОСТЬ ДЛЯ ОПРЕДЕЛЕННОЙ ЦЕЛИ. См.
# Стандартная общественная лицензия GNU для более подробной информации.
#
# Вы должны были получить копию Стандартной общественной лицензии GNU.
# вместе с этой программой; если не, написать бесплатному программному обеспечению
# Фундамент, Инк., 59 Храм Плейс, Люкс 330, Бостон, Массачусетс 02111-1307 США
#
# Вышеприведенное уведомление об авторских правах и это уведомление о разрешении должны быть включены в
# все копии скрипта.

# описание: Сценарий резервного копирования и восстановления для баз данных и каталогов
#
# Состояние разработки "Меня устраивает"!
# So don't blame me if anything bad will happen to you or to your computer
# если вы используете этот скрипт.
# I've done my best to make myself understood if you read on.
#
# Подробное описание
#
# Полный каталог, mysql и сценарий инкрементного резервного копирования
# Сценарий полного и инкрементного восстановления
# It's meant to use minimum resources and space and keep a loooong backup.
# I've tried to make as more checks as possible but I can't beat "умная" пользователи.
# Странные вещи могут произойти, если ваши резервные копии содержат "-" или "_" символы.
# Эти символы используются этим скриптом и файлами, сформированными скриптом..

### Резервная часть -=============================
#
# Важный!!! Убедитесь, что в вашей системе установлена ​​правильная дата. Предположение: использовать нтп.
# Резервное копирование не должно быть интерактивным, it's meant to be run daily from cron.
# That's why the log for backup is kept in logdir $BACKUPDIR/log/backup.log
# Первого числа месяца делается постоянная полная резервная копия..
# В остальное время делается инкрементный бэкап, по дате.
# Базы данных всегда заполнены, и скрипт выполняет автоматическое восстановление и
# оптимизирует базы данных перед резервным копированием.

### Предупреждение!!! ###
# Если вы установите "from_in" переменная к "да" скрипт удалит старый
# резервные копии, чтобы освободить место для новых. Читай дальше.

### Предупреждение!!! ###
# Все инкрементные резервные копии и базы данных за месяц будут удалены, если место
# меньше, чем максимальный процент используемого пространства "макс.".

# Вам нужно позаботиться о том, чтобы не войти в бесконечный цикл, если вы установите del_en="да"
# The loop can happen if deleted files form $BACKUPDIR don't decrease the
# процент используемого пространства
# The script check for some dirs and files and it's supposed to be run as root
# Скрипт должен запускаться ежедневно из cron ночью, например
# 40 3 * * * /etc/back-res 1>/Дев/ноль 2>/Дев/ноль
# Этот скрипт проверяет и исправляет все ошибки, обнаруженные во ВСЕХ базах данных mysql.
# The script also makes full backups of ALL mysql databases every time it's run
#
# Восстановить часть -============================

# Восстановление должно быть мало интерактивным, сообщения находятся на стандартном выходе
# Dir's are restored verbose with tar by default.
# Последняя минута дня "$хм" установлен на 2359 но резервное копирование запускается в 03:40
# так что это должно быть установлено ПОСЛЕ завершения резервного копирования! В 23:59 резервного дня
# мы можем иметь много файлов, измененных из 03:40. Не совсем идеальное решение
# для резервного копирования позже в тот же день (23:00) и надеюсь, что резервное копирование завершится до тех пор, пока 23:59
# Мой сервер все еще загружен на 23:00, поэтому я использую 03:40 в cron и hm=2359
# потому что полная резервная копия длится более 16 часов для tar.bz2
# Наверняка я потеряю все файлы, созданные между 03:40 а также 23:59 того дня.
# Чтобы я не мог восстановить файлы через день ПОСЛЕ того дня, когда я хочу восстановить
# и используйте find --newer для удаления ненужных файлов.

# Чтобы восстановить каталоги, убедитесь, что у вас есть полная резервная копия за этот месяц, и используйте:
# `back-res директория /etc 2009-11-23 /`
# восстановить "/и т.д" директор с даты 2009-11-23 укоренять
# `back-res директория /etc 2009-11-23 /tmp` используется для восстановления "/и т.д" каталог в /tmp
#
# `back-res dir all 2009-11-23 /`
# восстановить все каталоги с даты 2009-11-23 укоренять

# Для восстановления баз данных используйте:
# `БД MySQL 2009-11-23`
# восстановить "mysql" база данных с даты 2009-11-23 на локальный сервер mysql
#
# `back-res db all 2009-11-23`
# восстановить все базы данных с даты 2009-11-23 на локальный сервер mysql

###############################
### Начать раздел переменных ###
###############################

# Измените переменные ниже, чтобы они соответствовали вашему компьютеру/резервной копии

КОМПЬЮТЕР=`cat /etc/HOSTNAME | awk 'NR==1{Распечатать $1}«` # имя этого компьютера
КАТАЛОГ="/bin/boot/etc/home/lib/lib64/root
/sbin /usr /var /www" # каталоги для резервного копирования
ИСКЛЮЧЕНО="/резервная копия /tmp /dev /proc /sys /srv /media
/var/adm /var/кэш /var/lib/mysql
/var/run /var/lock /lib/init/rw /var/tmp
/var/log/verlihub /var/lib/amavis /var/amavis /var/spool/postfix/p*
/var/spool/postfix/var *.pid *.lock *.lck" # exclude those dir's and files
BACKUPDIR="/резервная копия/$КОМПЬЮТЕР" # где хранить резервные копии
dbuser="корень" # пользователь базы данных
пароль базы данных ="ваш пароль" # пароль базы данных
электронная почта ="backup@вашдомен.com" # почта для ответственного лица
TAR=`какой tar` # имя и местонахождение tar
АРГ="-cjpSPf" #редкий # аргументы tar P = удалены /.
EARG="-xjpf" # Аргументы извлечения tar P = удалены /
tmpdir="/tmp/tmpbck" # временный каталог для дампа базы данных и прочего
del_en="да" # Включить удаление файлов, если используется процентное пространство > чем $maxp (да или что-то еще)
макср="85" # Максимальный процент используемого пространства перед началом удаления
хм="2359" # последняя минута дня = последняя минута восстановленной резервной копии дня, восстановленного

###################################
### Переменные, редактируемые конечным пользователем ###
###################################

#########################################################
# Вам НЕ нужно ничего менять ниже здесь #
#########################################################

я=`базовое имя $0`
заголовок ="
---------------------=== Скрипт обратного разрешения от go0ogl3 ===-------
"
использование ="$headline
The backup part requires some configuration in the header of the script
and it's supposed to be run from cron.
The restore part it's supposed to be run from command line.
восстановить часть Использование:
т $ меня [тип восстановления] [директор|дБ] [ГГГГ-ММ-ДД] [путь]

т $ меня директор [каталог для восстановления] [на сегодняшний день] [путь]
t $me директор все [на сегодняшний день] [путь]
т $ меня дб [БД для восстановления] [на сегодняшний день]
т $ меня дб все [на сегодняшний день]

Where 'dir' or 'db' to restore is one of the configured dirs or db's to
backup, or 'all' to restore all dirs or db's.
Формат даты полный, год сортировки, ГГГГ-ММ-ДД, нравиться 2009-01-30.
'path' is for dirs and is the path on which you want to extract the backup.
Если путь для извлечения не указан, затем резервная копия извлекается на /.
Для получения дополнительной информации прочитайте заголовок этого скрипта!
-===--===--===--===--===--===--===--===--===--===-- ===--===--===--===--===--===-
"

резервное копирование () {

если [ -N "$1" ] ; затем
эхо -е "$Применение"
Выход
фи

DOM=`дата +%d` # Дата месяца, ДД, например. 27
FDATE=`дата +%F` # Полная дата, ГГГГ-ММ-ДД, год сортировки, например. 2009-11-21
MDATE=`дата +%Y-%m` # Дата, ГГГГ-ММ, например. 2009-09

#################
### Функции ###
#################

журнал функций {
сейчас=`данные "+%Y-%m-%d %H:%М:%S"` # мне нравится такой тип свиданий. Syslog type doesn't use the year.
если [ -e $BACKUPDIR/log/backup.log ]; тогда
эхо "$сейчас - `базовое имя $0` - $1" >> $BACKUPDIR/журнал/backup.log
эхо "$сейчас - `базовое имя $0` - $1" >> $tmpdir/maildata
еще
если [ ! -г $BACKUPDIR/журнал ]; затем
mkdir $BACKUPDIR/журнал
если [ -N "$журнал1" ]; тогда
эхо "$журнал1" >> $BACKUPDIR/журнал/backup.log
эхо "$журнал1" >> $tmpdir/maildata
фи
эхо "$сейчас - `базовое имя $0` - Первый забег: каталог журнала и файл журнала созданы." >> $BACKUPDIR/журнал/backup.log
эхо "$сейчас - `базовое имя $0` - Первый забег: каталог журнала и файл журнала созданы." >> $tmpdir/maildata
еще
эхо "$сейчас - `базовое имя $0` - Первый забег: лог-файл создан." >> $BACKUPDIR/журнал/backup.log
эхо "$сейчас - `базовое имя $0` - Первый забег: лог-файл создан." >> $tmpdir/maildata
фи
эхо "$сейчас - `базовое имя $0` - $1" >> $BACKUPDIR/журнал/backup.log
эхо "$сейчас - `базовое имя $0` - $1" >> $tmpdir/maildata
фи
}

функция check_mdir {
бревно "Проверка наличия месячного каталога: $BACKUPDIR/$MDATE"
если [ -г $BACKUPDIR/$MDATE ] ; затем
бревно "Каталог резервных копий $BACKUPDIR/$MDATE существует"
еще
mkdir $BACKUPDIR/$MDATE
бревно "Месяц создания каталога $BACKUPDIR/$MDATE"
быть
}

функция check_tempdir {
бревно "Проверка существования временного каталога: $временная температура"
если [ -д $tmpdir ] ; затем
бревно "Временный каталог $tmpdir существует"
еще
мкдир $tmpdir
бревно "Создан временный каталог $tmpdir"
быть
}

функция del_old_files {
to_del=`ls -ctF $BACKUPDIR | grep -v ^журнал/ | хвост -n 1 | sed 's////g'` # отсортировать файлы в порядке ctime и выбрать первый измененный, кроме каталога журнала
#если [ -d "$BACKUPDIR/$to_del" ] ; тогда
# # восстанавливать резервные копии БД и хранить только те, которые были созданы в первый день месяца или из первой полной резервной копии каталогов.
# # список всех резервных копий БД в каталоге месяца, извлечь первое свидание
# day=`ls -ct $BACKUPDIR/$to_del | хвост -n 1 | вырезать -д "-" -е 5 | вырезать -д "." -ф 1`
# # затем перечислите все имена файлов БД
# dblist=`ls -ct $BACKUPDIR/$to_del | grep $to_del-$day`
# для БД в $dblist; делать
# mv $BACKUPDIR/$to_del/$db $BACKUPDIR/$db # перемещение файлов сохраняет дату создания
# Выполнено
# бревно "Kept db's from $to_del-$day"
#еще
rm -rf $BACKUPDIR/$to_del
бревно "Удален старый: $BACKUPDIR/$to_del"
количество = 0
пока [ $считать -lt 3 ]
делать
количество=$(($количество+1))
#эхо $count argmax # для теста
check_space
сделанный
#фи
}

#пфс="95" # для теста

функция check_space {
#пфс=$(($пфс-1)) # для теста
pfs=`df -h $BACKUPDIR | awk 'NR==2{Распечатать $5}' | вырезать -d% -f 1`
#пфс="90"

если [ $pfs -gt $maxp ] ;затем
бревно "В $BACKUPDIR используется пространство $pfs%."
если [ $del_in = "да" ] ; затем
del_old_files
еще
бревно "Нет свободного места и del_en=$del_en, поэтому мы прерываем работу и отправляем почту на адрес $email."
почта -s "Daily backup of $COMPUTER `date +'%F'`" "$электронная почта" < $tmpdir/maildata
Выход
фи
еще
бревно "Процент использованного пространства $pfs% в $BACKUPDIR в порядке."
быть
}

функция db_back {
#Заменять / с _ в имени каталога => имя файла
#DIR_NAME=`эхо "$СПРАВОЧНИКИ" | AWK '{gsub("/", "_", $0); Распечатать}«`

### All db's check and correct any errors found

log "Запуск автоматического восстановления и оптимизации для всех баз данных..."
mysqlcheck -u$dbuser -p$dbpassword --all-databases --optimize --auto-repair --silent 2>&1
### Starting database dumps
for i in `mysql -u$dbuser -p$dbpassword -Bse 'show databases'`; делать
бревно "Запуск mysqldump $i"
`mysqldump -u$dbuser -p$dbpassword $i --allow-keywords --comments=false --add-drop-table > $tmpdir/db-$i-$FDATE.sql`
$TAR $ARG $BACKUPDIR/$MDATE/db-$i-$FDATE.tar.bz2 -C $tmpdir db-$i-$FDATE.sql
rm -rf $tmpdir/db-$i-$FDATE.sql
бревно "Дамп в порядке. $я база данных сохранена в порядке!"
Выполнено
}

#############
### НАЧИНАТЬ ###
#############
rm -f $tmpdir/maildata
если [ -г $BACKUPDIR ] ; затем
check_space
еще
mkdir $BACKUPDIR
лог1="$сейчас - `базовое имя $0` - Первый забег: первичный каталог $BACKUPDIR создан."
бревно "Первый забег: первичный каталог $BACKUPDIR создан."
фи
check_mdir
check_tempdir
rm -rf $tmpdir/исключено
для `echo $EXCLUDED` ; делать
exfile=`echo -e $a >> $tmpdir/исключено`
сделанный
#Выход
db_back

for i в `echo $DIRECTORIES` ; делать
XX=`эхо $i | AWK '{gsub("/", "_", $0); Распечатать}'`
YX=`echo $i | AWK '{Распечатать $1}'`
fb=`ls $BACKUPDIR | grep ^полный$XX-`
если [ -я $fb ] ; затем
бревно "Полная резервная копия для $YX не найдена. Полная резервная копия сейчас!"
эхо > $tmpdir/полная резервная копия$XX.lck
$TAR $ARG $BACKUPDIR/полный$XX-$FDATE.tar.bz2 $YX -X $tmpdir/исключено
бревно "Резервное копирование $YX сделано."
быть

# Ежемесячное полное резервное копирование
если [ $ДОМ = "01" ] ; затем
бревно "Запуск полного ежемесячного резервного копирования для: $YX"
$TAR $ARG $BACKUPDIR/полный$XX-$FDATE.tar.bz2 $YX -X $tmpdir/исключено
бревно "Полное ежемесячное резервное копирование для $YX выполнено."
еще
# If it's not the first day of the month we make incremental backup
if [ ! -e $tmpdir/full-backup$XX.lck ] ; затем
бревно "Запуск ежедневного резервного копирования для: $YX"
НОВОЕ="--новее $FDATE"
$TAR $NEWER $ARG $BACKUPDIR/$MDATE/i$XX-$FDATE.tar.bz2 $YX -X $tmpdir/исключено
бревно "Ежедневное резервное копирование для $YX выполнено."
в противном случае
лук "Файл блокировки для полной резервной копии $YX существует!"
фи
фи
# Очистить файл блокировки каталога полной резервной копии
rm -rf $tmpdir/полная резервная копия$XX.lck
сделанный

# Очистить временный каталог
rm -rf $tmpdir/исключено
# Конец сценария
бревно "Все работы по резервному копированию выполнены. Выход из скрипта!"
}

восстановить () {

из ничего ()
{
# Теперь нам нужно удалить более новые файлы, созданные после даты восстановления резервной копии..
to_rem=`найти $path/$2 -новее $tmpdir/dateend`
эхо -ан "n$headlinen Для чистой резервной копии, восстановленной в $3 теперь нам нужно удалить файлы, созданные после даты резервного копирования. Если они существуют, список файлов, подлежащих удалению, следует:нн"
для a в $to_rem ; делать
эхо -е "Для удаления: $a"
пожертвовать
сделано в "nПожалуйста, введите "да" удалить эти файлы, если они существуют, и нажмите [ВХОДИТЬ]: "
читать дель
если [[ "$del" знак равно "да" ]] ; затем
для a в $to_rem ; делать
гм -рф $а
сделанный
эхо -ан "Все работы по восстановлению выполнены!nDir $2 восстановлен на сегодняшний день $3!N"
Выход
фи
}

если [ -от "$4" ] ; затем
путь="/"
еще
путь=$4 # это путь, куда извлекать файлы
фи

ДАТА=$3
DOM=`эхо $RDATE | вырезать -д "-" -f3` # Дата месяца, например. 27
MDATE=`эхо $RDATE | вырезать -д "-" -f2`
YDATE=`эхо $RDATE | вырезать -д "-" -f1`

тип=$1
директор=`эхо $2 | AWK '{gsub("/", "_", $0); Распечатать}'`

if [ -от "$3" ] ; затем
эхо -е "$Применение"
Выход
фи

# плохая проверка ввода даты: ${#ДАТА} является 10 на правильную дату 2009-01-30
# найти первую возможную дату восстановления date=day
year=`ls -ctF $BACKUPDIR | grep -v ^журнал/ | хвост -n 1 | вырезать -д "-" -ф 2`
md=`ls -ctF $BACKUPDIR | grep -v ^журнал/ | хвост -n 1 | вырезать -д "-" -ф 3`
день=`ls -ctF $BACKUPDIR | grep -v ^журнал/ | хвост -n 1 | вырезать -д "-" -е 4 | вырезать -д "." -ф 1`
resdate=$год$md$день

дч="1234"
err=`touch -t $YDATE$MDATE$DOM$dh $tmpdir/datestart 2>&1`

если [ -N "$ошибаться" ] & [ ${#ДАТА} !знак равно 10 ] ; затем
#эхо "ошибка = $ ошибка"
эхо -е "$Применение"
эхо -е "Неверный формат даты. Правильно ГГГГ-ММ-ДД. Бывший.: 2009-01-14N"
Выход
фи

# проверьте, вводит ли пользователь дату в будущем
TD=`дата +%s` # сегодня в эпоху
ID=`дата --дата "$ДАТА" +%с` # ввод даты в эпоху
RD=`дата --дата "$пересоздать" +%с` # дата первой резервной копии в эпоху

если [ "$ИДЕНТИФИКАТОР" -дать "$ТД" ] ; затем
эхо -е "$Применение"
эхо -е "Неверный формат даты. Указанная дата $RDATE находится в будущем!N"
Выход
фи

если [ "$РД" -GT "$ИДЕНТИФИКАТОР" ] ; затем
эхо -е "$Применение"
эхо -е "Неверный формат даты. Указанная дата $RDATE предшествует первому резервному копированию в $year-$md-$day.!N"
Выход
фи

#выбросил "Проверка существования каталога путей: $путь"
если [ $тип = "директор" ] ; тогда
# эхо $dir и $path
если [ -д $путь ] ; затем
если [ -N "$путь" ]; затем
сообщение =""
фи
в противном случае
сообщение ="Недопустимый каталог $path для извлечения"
Выход
быть
быть

# Теперь мы запрашиваем у пользователя информацию, введенную в командной строке..
# прозрачный
сделано в "n Вы хотите восстановить $1 $2 на сегодняшний день $3.nnПожалуйста, введите "да" если все вышеперечисленное вас устраивает и нажмите [ВХОДИТЬ]: "
читать хорошо

если [[ "$хорошо" знак равно "да" ]] ; затем
если [[ "$1" == "директор" ]] ; затем
если [[ "$2" == "все" ]] ; затем
сделано в "nExtracting all dir's backup from date $3 к $путь:N"
спать 5 # Ждем 5 secs for the user to see what's happening.
еще
# Мы предполагаем, что пользователь использует /dir
если [[ "$СПРАВОЧНИКИ все" =~ "$2" ]] ; затем
сделано в "nПопытка восстановить $2 dir's backup from date $3 к $путь:нн"
# мы говорим "пытающийся" потому что, если запрошенный каталог "все" это соответствует!
спать 5
фи
фи
Элиф [[ "$1" == "дБ" ]] ; затем
если [[ "$2" == "все" ]] ; затем
сделано в "nВосстановление всех баз данных mysql с даты $3 на локальный сервер:N"
спать 5
еще
если [[ "$список баз данных" =~ "$2" ]] ; затем
сделано в "nПопытка восстановить $2 резервная копия базы данных с даты $3 на локальный сервер:нн"
# мы говорим "пытающийся" because it's an imperfect check, то же, что и выше
спать 5
фи
фи
фи
еще
сделано в "nНедействительная запись. Выход из скрипта...nn"
Выход
фи

летнее время ="010000" # первая минута первого дня
touch -t $YDATE$MDATE$dst $tmpdir/datestart 2>&1
touch -t $YDATE$MDATE$DOM$hm $tmpdir/dateend 2>&1
если [ $тип = "директор" ] ; затем
если [[ "$СПРАВОЧНИКИ все" =~ "$2" ]] ; затем
если [ $реж = "все" ] ; затем
farh=`найти $BACKUPDIR -maxdepth 1 -введите f -newer $tmpdir/datestart -a ! -новее $tmpdir/dateend | sed 's_.*/__' | grep ^полный_`
arh=`найти $BACKUPDIR/$YDATE-$MDATE-maxdepth 1 -введите f -newer $tmpdir/datestart -a ! -новее $tmpdir/dateend | sed 's_.*/__' | grep -v ^db-`
# эхо фарх это $фарх
# эхо арх эсте $ арх
в противном случае
farh=`найти $BACKUPDIR -maxdepth 1 -введите f -newer $tmpdir/datestart -a ! -новее $tmpdir/dateend | sed 's_.*/__' | grep $дир | grep ^полный_`
# эхо фарх и $фарх
arh=`найти $BACKUPDIR/$YDATE-$MDATE-maxdepth 1 -введите f -newer $tmpdir/datestart -a ! -новее $tmpdir/dateend | sed 's_.*/__' | grep $дир | grep -v ^db-`
# эхо арх е $ арх
фи
для f в $ фарх ; делать
сделано в "tИзвлечение $f...nn"
$TAR $EARG $BACKUPDIR/$f -C $путь &>/Дев/ноль
# если день 01 полная резервная копия восстанавливается, поэтому нам нужно очистить новые файлы, созданные после даты резервного копирования..
если [ $ДОМ = "01" ] ; затем
del_res $путь $2 $3 $tmpdir
фи
сделанный
для меня в $arh ; делать
сделано в "tИзвлечение $i...nn"
$TAR $EARG $BACKUPDIR/$YDATE-$MDATE/$i -C $path &>/Дев/ноль
сделанный
del_res $путь $2 $3 $tmp
в противном случае
сообщение ="Неверный каталог для восстановления!"
фи
Элиф [ "$тип" знак равно "дБ" ] ; затем
дб=$2
# здесь мы создаем список баз данных для восстановления из файлов, которые мы резервировали ранее в запрошенный день
dblist=`найти $BACKUPDIR/$YDATE-$MDATE-maxdepth 1 -тип ф | sed 's_.*/__' | грэп ^ дб- | grep $YDATE-$MDATE-$DOM | вырезать -д "-" -f2`
БДСписок="$добавить все"
#эхо $dblist
для d в $dblist ; делать
если [ "$d" == "$2" ] ; затем
если [ "$дБ" знак равно "все" ] ; тогда
# get db list from backup and restore all db's
arh=`find $BACKUPDIR/$YDATE-$MDATE -maxdepth 1 -тип ф | sed 's_.*/__' | грэп ^ дб- | grep $YDATE-$MDATE-$DOM`
еще
arh=`найти $BACKUPDIR/$YDATE-$MDATE-maxdepth 1 -тип ф | sed 's_.*/__' | грэп ^ дб- | grep $ дб- | grep $YDATE-$MDATE-$DOM`
фи
для меня в $arh ; делать
rdb=`echo $i | вырезать -д "-" -f2`
mysql -u$dbuser -p$dbпароль $rdb < $TAR -xvjp $BACKUP/$YDATE-$MDATE/$i
сделанный
эхо -ан "Все работы по восстановлению выполнены!нбаза данных $2 восстановлен на сегодняшний день $3!N"
фи
сделанный

если [ -от "$рдб" ] ; затем
сообщение ="Недопустимая база данных для восстановления!"
фи

еще
эхо -е "$Применение"
сообщение ="Указан неверный тип"
фи

если [ -N "$сообщение" ] ; затем
эхо -е "$Применение"
сделано в "tt###t$mesajt###nn"
быть

# Отправить накопленные почтовые данные на очистку
почта -s "Daily backup of $COMPUTER `date +'%F'`" "$электронная почта" < $tmpdir/maildata
rm -rf $tmpdir/начало даты
rm -rf $tmpdir/конец даты
rm -rf $tmpdir/исключено
rm -rf $tmpdir/maildata

}

случай "$1" в
тебе)
восстановить $1 $2 $3 $4
;;
дБ)
восстановить $1 $2 $3 $4
;;
версия)
эхо $заголовок
эхо -е "nVersion $версияn"
;;
*)
резервное копирование $1
Выход 1
эсак