Пятница , 29 Март 2024
ДомойПубликациискрипт резервного копирования

скрипт резервного копирования

настраивать сервер мы уже умеем. но без резервного копирования в один не прекрасный день можно остаться у разбитого жёсткого диска. после этого никакие мольбы или угрозы хостеру не помогут вернуть даже килобайт потерянной информации. в таких случаях и спасает загодя сохранённая резервная копия.

сразу хочу сказать, что в линуксах я не силён, поэтому на места, которые по каким-либо причинам выстроены неправильно, просьба указывать с комментарием, дабы я мог внести изменения и осознать содеянное.

ниже представленный скрипт (назовём его backup.sh) делает следующее: останавливает демон mysql, выполняет архивирование (tar) в домашнюю диреторию (т. е. не требуется root-пароль), архивирует домашнюю директорию с созданным «дампом» баз mysql и заливает полученный бекап на удалённый сервер по фтп. код полученного скрипта (с комментариями) ниже:

#!/bin/bash
# текущее время
DATETIME=`date +%F_%H-%M-%S`
# где будут храниться копии резервных файлов
BACKUPDIR=/var/backups/sites/
# имя резервного файла, в который упаковываются данные
BACKUPFILE=my_$DATETIME.tar.gz
# имена сохраняемых баз
DBNAMES="mybase1 mybase2 mysql"
# имя сохраняемой копии баз данных
DBFILENAME=my_$DATETIME.tar
# исходный каталог
SRCDIR=/home/
# файлы и каталоги, записываемые в резервную копию
SRCFILES="cat1 cat2 cat3 "$DBFILENAME
# данные доступа к ФТП
FTPUSER=ftpuser
FTPPASS=ftppass
# путь для сохранения резервной копии
FTPPATH=ftp://site.ru/path/
echo "Start: [`date +%F--%H-%M`]"
# остановка mysql (чтобы можно было безболезненно сделать прямую копию)
echo "[Stopped MySQL Daemon]"
/etc/init.d/mysql stop
# сохранение копии в SRCDIR (несжатый tar)
echo "[Copy MySQL Datas]"
cd /var/lib/mysql/ && tar cpf $SRCDIR$DBFILENAME $DBNAMES && cd -
# запуск mysql
echo "[Start MySQL Daemon]"
/etc/init.d/mysql start
# здесь, в принципе, можно остановить apache
# но для меня некритична потеря нескольких записей в логах
#/etc/init.d/apache2 stop
echo "[Save Important Data]"
cd $SRCDIR && tar czpf $BACKUPDIR$BACKUPFILE $SRCFILES && cd -
# если apache был остановлен, его требуется запустить
#/etc/init.d/apache2 start
# перемещение файлов в директорию хранения резервных копий
echo "[Remove MySQL Backup-Files]"
rm $SRCDIR$DBFILENAME
# если нет стороннего фтп, следующие 2 строки можно удалить
echo "[Save Backup To Remote Host]"
curl -T $BACKUPDIR$BACKUPFILE -u $FTPUSER:$FTPPASS $FTPPATH$BACKUPFILE
echo "Stop: [`date +%F--%H-%M`]"

сначала скрипт требуется залить на сервер (можно в папку /home) и присвоить (обязательно!) ему права на выполнение 755. далее можно создать несложное задание, которое в определённое время (например, каждую полночь) создавать бекапы. проще всего сделать его, добавив в файл /etc/crontab такую строку:

в данном случае каждый день в 0 часов 5 минут создаётся резервная копия. важный момент: в конце обязательно должен следовать символ переноса строки.

время нужно выбирать исходя из ответа на вопрос: «какую часть информации готовы потерять?». если ответ будет «никакую», тут уже скрипты не помогут; нужет аппаратный RAID1 хотя бы.

для восстановления можно воспользоваться таким скриптом (назовём его unbackup.sh):

#!/bin/bash
# время одного из предыдующих бекапов (составляет часть имени файла)
DATETIME=2010-09-08_00-05-01
# из какого файла восстановиться (имя бекапа: my_DATETIME.tar.gz)
FROMFILE=my_$DATETIME.tar.gz
# исходный каталог
SRCDIR=/home/
# имя сохраняемой копии баз данных
DBFILENAME=my_$DATETIME.tar
# данные доступа к ФТП
FTPUSER=ftpuser
FTPPASS=ftppass
# путь для сохранения резервной копии
FTPPATH=site.ru/path/
echo "Start: [`date +%F--%H-%M`]"
# если стороннего фтп нет, следующие 2 строки можно удалить
# в этом случае резервную копию необходимо скопировать в SRCDIR
echo "[Get Reserved Copy]"
wget -P $SRCDIR ftp://$FTPUSER:$FTPPASS@$FTPPATH$FROMFILE
# остановить apache (раз информация потеряна, уже не страшно)
echo "[Stopped Apache Daemon]"
/etc/init.d/mysql stop
echo "[Unpach Files]"
cd $SRCDIR && tar xzpf $SRCDIR$FROMFILE
echo "[Stopped MySQL Daemon]"
/etc/init.d/mysql stop
echo "[Copy MySQL Datas]"
cd /var/lib/mysql/ && tar xpf $SRCDIR$DBFILENAME && cd -
echo "[Start MySQL Daemon]"
/etc/init.d/mysql start
# запустить apache
echo "[Start Apache Daemon]"
/etc/init.d/mysql start
# и подчистить за собой
echo "[Remove Backup-Files]"
rm $SRCDIR$FROMFILE
rm $SRCDIR$DBFILENAME
echo "Stop: [`date +%F--%H-%M`]"

скрипт можно залить в /home, и обязательно присвоить ему права 777. единственно, что требуется изменить — параметр DATETIME (он составляет часть имени файла, но об этом написано в комментариях, на мой взгляд, довольно доступно).

бекап выдёргивается по фтп, либо копируется в папку /home (в этом случае нужно удалить или закомментировать строку, начинающуюся с wget).

и конечно же, я открещиваюсь от всех возможных последствий, вызванных использованием данных скриптов smile а то получается, что майкрософту можно (хотя их софт денег сто́ит), а мне нет (ведь бесплатно же)?

желаю удачи и несгибаемых жёстких!

ps: если лень создавать файлики и переносить информацию, можно скачать архивчик.

Рейтинг: 0

Автор публикации

2 070
не в сети 11 месяцев

x64 (aka andi)

Комментарии: 2893Публикации: 405Регистрация: 02-04-2009
Так себеНеплохоХорошоЗамечательноСупер! (Оценок пока нет)
Загрузка...

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

Политика конфиденциальности

Наш сайт использует файлы cookies, чтобы улучшить работу и повысить эффективность сайта. Продолжая работу с сайтом, вы соглашаетесь с использованием нами cookies и политикой конфиденциальности.

Принять