Создание бэкапов на Linux-сервере

В работе любого системного администратора возникает пора, когда он задумывается над системой бэкапирования. Как в том старом анекдоте:
Есть системные администраторы, которые делают бэкапы и те, которые еще не делают.

Проблема достаточно важная и особенно актуальна, особенно при атаке вирусом-шифровальщиком.  Я покажу один из примеров организации бэкапирования данных. Для организации автоматического бэкапирования я использую скрипт.

1. Определяем директорию, куда будем складывать бэкапы на сервере (либо той же машины, на которой делаем бэкап): допустим это /root/backup

2. Так как бэкап создается раз в сутки, имеет смысл создать директорию формата: [год]-[месяц]-[день]. Для этого воспользуемся командой: 

mkdir /root/backup/`date +%Y-%m-%d`

3. Теперь можем смело складывать наш бэкап в созданную директорию. Но прежде чем создавать бэкап, имеет смысл вести лог бэкапирования. Например так:

echo ‘Произвожу выгрузку баз данных’ >> /root/backup/`date +%Y-%m-%d`/backup.log

4. Если на сервере есть база данных, то бэкапим ее:

mysqldump —user=[пользователь базы данных] —password=[пароль пользователя] —host=[имя хоста, в моем случае это localhost] [имя бэкапируемой базы данных] > /root/backup/`date +%Y-%m-%d`/[имя файла, куда записваем содержимое базы даных].sql

5. Далее бэкапим сами файлы, у меня они находятся в /var/www/:

cd «/var/www/»
echo ‘Приступаю к архивации :’ >> /root/backup/`date +%Y-%m-%d`/backup.log
tar -czvf /root/backup/`date +%Y-%m-%d`/[название архива].tar.gz [название директории, которая архивируется] >> /root/backup/`date +%Y-%m-%d`/backup.log
echo ‘Архив готов’ >> /root/backup/`date +%Y-%m-%d`/backup.log echo ‘Проверка backup:’ >> /root/backup/`date +%Y-%m-%d`/backup.log
ls /root/backup/`date +%Y-%m-%d` >> /root/backup/`date +%Y-%m-%d`/backup.log

Мы создали бэкап и он лежит у нас на нашем сервере в директории /root/backup/`date +%Y-%m-%d`. Попутно мы все действия записали в лог файл. Можно на этом успокоиться, но… хранить бэкапы в том же самом месте, что и сами файлы не совсем разумно. Имеет смысл скопировать их на специально подготовленный сервер (я его называю сервер бэкапов).

6. Для копирования я использую протокол ssh. Первым делом обеспечим без парольное подключение к серверу бэкапов:

  • Генерируем ключ на клиенте: 
    ssh-keygen
  • Записываем наш ключ в файл authorized_keys  на сервере: 
    cat .ssh/id_rsa.pub | ssh [логин]@[ip сервера бэкапов] «cat — >> .ssh/authorized_keys»
  • Добавляем запись в лог файл: 
    echo «Копирую архив на Backup сервер:» >> /root/backup/`date +%Y-%m-%d`/backup.log
  • Копируем файлы на сервер бэкапов: 
    scp -r /root/backup/`date +%Y-%m-%d` [логин]@[ip сервера бэкапов]:[путь к директории для хранения бэкапов на сервере бэкапов] >> /root/backup/`date +%Y-%m-%d`/backup.log

7. После того как мы скопировали файлы в безапасное место, не имеет смысла хранить все бэкапы на локальной машине. В случае аварии, нам понадобятся самые свежие — это 1-2 день. Поэтому произведем чистку директории /root/backup/:

echo «Удаляю резервные копии старше двух дней:»
i=0
find /root/backup -mtime +$i -print -delete

8. На этом процедура бэкапирования закончена. Осталось проверить свободное дисковое пространство. Это имеет смысл сделать для того, чтобы внезапно не оказалось, что бэкапы забили все дисковое пространство на нашей машине:

echo «Дисковое пространство:» >> /root/backup/`date +%Y-%m-%d`/backup.log
df -h >> /root/backup/`date +%Y-%m-%d`/backup.log

9. Так как я люблю спать спокойно, то неплохо бы было получать уведомления о благополучном завершении процедуры бэкапирования. Для этого организуем отправку лога  /root/backup/`date +%Y-%m-%d`/backup.log  на почту:

  • Устанавливаем пакет ssmtp:
apt-get install ssmtp
  • Редактируем файл /etc/ssmtp/ssmtp.conf:
root=[наш e-mail] (я использую mail.ru)
mailhub=smtp.mail.ru:25
hostname=smtp.mail.ru:25
UseTLS=YES
UseSTARTTLS=YES
hostname=localhost
authuser=[наш e-mail] authpass=[пароль от ящика] FromLineOverride=NO
Debug=YES
  • Редактируем файл /etc/ssmtp/revaliases:
root:[ваш e-mail]:smtp.mail.ru:25
  • Отправляем лог на почту:
echo «[сообщение]» | mail -v -s «[тема письма]» [e-mail, кому отправляем] < /root/backup/`date +%Y-%m-%d`/backup.log

Все эти команды можно записать в скрипт и запускать автоматически в назначенное время:

#!/bin/bash
mkdir /root/backup/`date +%Y-%m-%d`
echo ‘Произвожу выгрузку баз данных’ >> /root/backup/`date +%Y-%m-%d`/backup.log
mysqldump —user=[пользователь базы данных] —password=[пароль пользователя] —host=[имя хоста, в моем случае это localhost] [имя бэкапируемой базы данных] > /root/backup/`date +%Y-%m-%d`/[имя файла, куда записваем содержимое базы даных].sql
cd «/var/www/»
echo ‘Приступаю к архивации :’ >> /root/backup/`date +%Y-%m-%d`/backup.log
tar -czvf /root/backup/`date +%Y-%m-%d`/[название архива].tar.gz [название директории, которая архивируется] >> /root/backup/`date +%Y-%m-%d`/backup.log
echo ‘Архив готов’ >> /root/backup/`date +%Y-%m-%d`/backup.log
echo ‘Проверка backup:’ >> /root/backup/`date +%Y-%m-%d`/backup.log
ls /root/backup/`date +%Y-%m-%d` >> /root/backup/`date +%Y-%m-%d`/backup.log
echo «Копирую архив на Backup сервер:» >> /root/backup/`date +%Y-%m-%d`/backup.log
scp -r /root/backup/`date +%Y-%m-%d` [логин]@[ip сервера бэкапов]:[путь к директории для хранения бэкапов на сервере бэкапов] >> /root/backup/`date +%Y-%m-%d`/backup.log
echo «Удаляю резервные копии старше двух дней:»
i=0
find /root/backup -mtime +$i -print -delete
echo «Процедура создания бэкапа закончена )» >> /root/backup/`date +%Y-%m-%d`/backup.log
echo «Дисковое пространство:» >> /root/backup/`date +%Y-%m-%d`/backup.log
df -h >> /root/backup/`date +%Y-%m-%d`/backup.log
echo «[сообщение]» | mail -v -s «[тема письма]» [e-mail, кому отправляем] < /root/backup/`date +%Y-%m-%d`/backup.log
Интересная статья? Поделитесь ей с друзьями!

Создание бэкапов на Linux-сервере: 1 комментарий

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Подтвердите, что Вы не бот — выберите человечка с поднятой рукой:

This blog is kept spam free by WP-SpamFree.