Debian.pro/

Про Debian


Делаем backup сервера.Часть 1.

Статья написана человеком с ником [v-8]_jupiter — активным участником #ubuntu-ru

И так каждый добросовестный администратор должен делать backup данных ,в моем случае сервера на безе *nix систем. После использования пару месяцев bacula ,понял что лучше само-писаных скриптов ничего нет. Коротко опишу алгоритм создания резервных копий который я использую.Буду очень рад получить рекомендации ну или исправления к скриптам , потому как скрипты  работают ,но вижу ,что пока они далеки от совершенства.

Что имею: 5 серверов 2 с которых хостинг,остальные под vps, ну и конечно же это хранилище ,или как я его зову внутренний сервер(он находится очень далеко от места где стоят сервера).

В целях большей безопасности решил ,что с хостинга нужно делать backup каждый день и хранить неделю. С vps решено было делать backup 3 раза в неделю. И раз в 2 месяца последний backup пишется на болванки(ну все может быть: солнечные вспышки магнитные бури и тп…;) ). Изначально хотелось все настройки и тому подобное делать централизованно , но как оказалось на деле ,что это ,не совсем  удобно конфиги  стали громоздкими и запутанными(возможно в дальнейшем сменю свое мнение после того как пересмотрю расположение конфиг файлов и их содержимого).Решено было разбить задачу backup на меньшие скрипты, каждый из которых выполняет свою роль и расположен на том сервере  с которого делается backup,что в свою очередь дало возможность при подключении к серверу конкретному иметь папку с названием backup в которой лежит скрипт отвечающий за backup конкретного сервера. Собственно первый скрипт который привожу здесь это тот,который отвечает за формирование и закачку , а также отчет на mail.

#!/bin/bash

##############################################

#posted Khizhny Vladislav vladbbk@gmail.com

#backup_for_rsync_in_remote_server

#put this script on the server on which the backup made

#If you use a script, use the authorization to ssh key to the remote server

#########################################

###############Change by itself to rsync###############

DAY=$(date +"%d-%m-%y")               #receive date

REMOTESERVER="backupus1@blabla.com"     #address to connect remote serverн

DIRTOBACKUP="/home/blabla/backupus1"          #directory from backup is done

DIRFROMBACKUP="/var/www/"                 #directory where the backup is done

EMAILD="vladbbk@gmail.com"            #email to send mail

######Change mysql connect#############

MUSER="user"

MPASS="pass"

MHOST="localhost"

MYSQL="$(which mysql)"

MYSQLDUMP="$(which mysqldump)"

GZIP="$(which gzip)"

BACKUP="/var/www/mysqlbackup"

##########backup mysql##########

mkdir -p $BACKUP

# Get all databases name

DBS="$($MYSQL -u $MUSER -h $MHOST -p$MPASS -Bse 'show databases')"

for db in $DBS

do

FILE=$BACKUP/mysql-$db.$NOW-$DAY.gz

$MYSQLDUMP -u $MUSER -h $MHOST -p$MPASS $db | $GZIP -9 > $FILE

done

####upload files to server####

rsync -azo $DIRFROMBACKUP $REMOTESERVER:$DIRTOBACKUP/$HOSTNAME-$DAY

#######send to mail result#################

if [ "$?" == "0" ] ; then
T=/tmp/backup.good
echo "Date: $(date)">$T
echo "Hostname: $(hostname)" >>$T
echo "Backup ready" >>$T
mail -s "BACKUP READY" "$EMAILD" <$T
rm -f $T
rm -r $BACKUP
else
T=/tmp/backup.fail
echo "Date: $(date)">$T
echo "Hostname: $(hostname)" >>$T
echo "$?" >>$T
echo "Backup fails" >>$T
mail -s "BACKUP FAILD" "$EMAILD" <$T
rm -f $T
rm -r $BACKUP
fi

Вообщем скрипт получает данные которые нужно ввести изначально. И потом делается backup mysql всех баз ,далее rsync все закачивает (доступ по ключу осуществляется), проверяется код который возвращает rsync и высылается на mail письмо с результатами или все успешно ,или получаем mail что все плохо ,а так же код ошибки которую вернул rsync дабы можно было в google найти ответ по этой ошибке. В письмо так же включено с какого сервера ответ ,дата.Жду ваших рекомендаций,пожеланий)

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


Комментарии (2):

  1. RUSUA :

    Вот мой вариант бекапа сайта и базы с хостинга + заливка на удаленный сервер по SSH
    #!/bin/sh
    DATE=`/bin/date ‘+%d.%m.%Y’`
    rm -f -R /tmp/backup/
    cp -R /var/www /tmp/backup/
    mysqldump —user=юзер —password=»пароль» —database имя_базы > /tmp/backup/имя_базы.sql
    zip -rqy9 /куда_ложить_архив/имя_базы$DATE.zip /tmp/backup/
    scp /var/имя_базы$DATE.zip пользователь@сервер:/home/пользователь/backup/
    Просто,но работает должным образом) запускается кроном раз в день.Получаем локальный бекап плюс на удаленном сервере.

  2. oslo :

    так же вариант создания
    mkdir -p /opt/backup
    nano /opt/backup/backup.sh

    #!/bin/bash
    dirs=»/home /etc»
    out=»/opt/backup»
    day=$(date +%A-%F)
    hostname=$(hostname -s)
    archive=»$hostname-$day.tgz»

    echo «### Directory backup has been started ###»
    echo «### Creating backup archive ###»
    tar czf $out/$archive $dirs
    echo «### Backup successfully completed ###»
    date +%A-%F-%T
    ls -lh $out

    chmod +x /opt/backup/backup.sh

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