Статья написана человеком с ником [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 найти ответ по этой ошибке. В письмо так же включено с какого сервера ответ ,дата.Жду ваших рекомендаций,пожеланий)
Во второй части будет описан скрипт который уже занимается непосредственно выполнением архивации поиском старых файлов и удалением их.
Вот мой вариант бекапа сайта и базы с хостинга + заливка на удаленный сервер по 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/
Просто,но работает должным образом) запускается кроном раз в день.Получаем локальный бекап плюс на удаленном сервере.
так же вариант создания
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