Linux
0
Вклад в тег
#!/bin/sh
# задаем переменную DATE. Она будет содержать текущую дату.
DATE=`date +%Y-%m-%d_%H-%M-%S`
# задаем переменную содержащую путь к каталогу с бэкапами.
DIR=/home/backups/
# переходим в каталог, где должны храниться бэкапы.
cd $DIR
# создаем дамп всей базы данных MySQL под пользователем root и сжимаем дамп.
mysqldump -uroot -hlocalhost -p'Пароль рута к БД' -A | gzip -c > mysql_all_db_$DATE.gz
# создаем tar сжатый контейнер. Т.е. архивируем каталог www. В каталоге www хранятся все мои сайты.
tar -czf home_$DATE.tar.gz -P /home/www
# дополнительный параметр -P заперщает архиватору отбрасывать корневой '/'.
# Аналогичным образом архивируем конфигурационные файлы системы, необходимые для быстрого развертывания
# сервера из бэкапа.
# каталог httpd, nginx и т.д. Все файлы будут добавлены в архив с сохранением путей.
tar -czf configs_$DATE.tar.gz -P /etc/openvpn /etc/httpd /etc/nginx /etc/my.cnf /etc/php.ini /etc/logrotate.conf /etc/sysconfig/iptables /etc/sysconfig/clock /var/spool/cron
# Копируем наши файлы архивов на удаленный сервер с применением
# <a href="/articles/users/generacziya-klyuchej-dlya-besparolnogo-vxoda.html"><strong>авторизации по ключу</strong></a>.
# Ключ -i говорит программе scp о том, что для идентификации используется файл "for_scp",
# который я <a href="/articles/users/generacziya-klyuchej-dlya-besparolnogo-vxoda.html">генерировал</a> ранее.
scp -B -i /root/.ssh/for_scp /home/backups/mysql_all_db_$DATE.gz user@server.ru:~/backups_linux26.ru
scp -B -i /root/.ssh/for_scp /home/backups/configs_$DATE.tar.gz user@server.ru:~/backups_linux26.ru
scp -B -i /root/.ssh/for_scp /home/backups/home_$DATE.tar.gz user@server.ru:~/backups_linux26.ru
# удаляем 2 дневные копии архивов
find /home/backups/ -name "*.gz" -mtime 2 -exec rm -f {} \;
# инициализируем переменную freemaemory, задав ей значение процентного использования жесткого диска
freemaemory="$(df -h | grep "5.7" | awk '{ print $4 }')";
# grep "5.7" - фильтрую вывод по размеру своего жесткого диска.
# У Вас будет другое значение. Узнать размер жесткого диска можно командой df -h
# Ну и для информирования я отправляю сообщение себе на почту письмо с сообщением, о том, что натворил.
# Ключ -e позволяет echo использовать спец теги, такие как \n (перенос строки) в данном примере.
echo -e "Создание резервной копии сервера linux26.ru успешно завершено "`date`"\n\nСозданы следующие архивы:\nmysql_all_db_"$DATE".gz - Дамп базы данных\nhome_"$DATE".tar.gz - Архив web директории\nconfigs_"$DATE".tar.gz - Архив основных конфигурационных файлов системы.\n\nАрхивы отправлены на удаленный сервер.\n\n2-дневные архивы удалены.\n\nЗанято "$freemaemory" дискового пространства" | mail -s "Backup on linux26.ru complate" mail@domain.com