Автоматическое создание резервных копий

В предыдущих статьях мы настроили сервер для работы с web, однако, мы не делали ничего для того чтобы сохранить данные.
Самое важное на web сервере, это базы данных, поэтому с них мы и начнем.
Процесс будет происходить следующим образом mysqldump>tar>ftp>sendmail, т.е. создаем дамп баз данных, сжимаем его, отправляем на удаленный ftp сервер, уведомляем администратора, о том что бекап выполнен.

В первую очередь установим необходимые пакеты, а именно ncftp

apt-get install ncftp

Затем создадим директорию где будем хранить на сервере наши бекапы

mkdir /var/backups/db

А теперь создадим сам скрипт

cd /tmp
nano mysqldump

И внесем в него следующее

#!/bin/bash

Эта строка указывает нашему скрипту к какому интерпретатору обращаться
Задаем переменные

MUSER="root" #root пользователь MySQL

MPASS="rootpass" #пароль пользователя root MySQL

DPATCH="/var/backups/db/backup.$(date +%H-%M_%d.%m.%y).sql"
#Указываем директорию и имя файла куда будем выводить дамп значения
#%H-час %M-минута %d-день %m-месяц %y-год  

DBGZIP="/var/backups/db/backup.$(date +%H-%M_%d.%m.%y).tar.gz"
 #Указываем имя и местоположения нашего архива с дампом
FTPU="ftpuser" #Имя пользователя FTP 

FTPP="ftppass" #Пароль пользователя FTP 

FTPS="ftpserver" #Сервер FTP например ftp.example.com или 192.168.1.1

FTPF="ftpdirectory" #Директория FTP например /home/backup

Вносим команды которые будет выполнять скрипт, где указанны переменные

mysqldump -u$MUSER -p$MPASS -A > $DPATCH
 #эта команда создает дамп от имени пользователя root ключ -A обозначает,
#что в дамп выводятся все базы данных, если вам нужна только определенная,
#просто вместо ключа укажите вашу БД
tar czfP $DBGZIP $DPATCH
 # сжимаем наш дамп
rm -rf $DPATCH
 # удаляем дамп с расширением SQL
ncftpput -m -u$FTPU -p$FTPP $FTPS $FTPF $DBGZIP
 # Загружаем архив на удаленный FTP сервер

Вот практически и все, однако, нам нужно уведомление о том что база данных успешно сохранилась и отправлена на сервер для этого добавим в наш скрипт следующие строчки

FROM="From: " # От кого сообщение

TO="To: "
 # Кому сообщение
SUBJECT="Subject: Backup complite" #
Тема сообщения

BODY="Backup complite $(date +%H-%M_%d.%m.%y) file upload to $FTPS"
# Сообщаем что архив загружен на FTP

BODY1="Thank you"
 # Ну и без оживления машины не обошлось,
#добавил от себя, хотя можно было сделать это переводом строки
BODY2="Wait new message"
 #

# Передаем значения в message.tmp
echo $FROM >> message.tmp

echo $TO >> message.tmp

echo $SUBJECT >> message.tmp 

echo $BODY >> message.tmp

echo $BODY1 >> message.tmp

echo $BODY2 >> message.tmp

/usr/sbin/sendmail -t < message.tmp # Отправляем message.tmp через sendmail

Сохраняем наш скрипт
Теперь нам надо перенести наш скрипт в cron, я сделал ежедневное копирование

cp mysqldump /etc/cron.daily/

И делаем его исполняемым

chmod +x mysqldump

Вот и все, можете проверить скрипт

./mysqldump

Этот скрипт не является идеальным так как не удаляет за собой архивы, не отправляет уведомления в случае провала создания дампа и/или его загрузки на сервер. Однако он выполняет свою работу и это главное
В будущих статьях мы доведем его до нужной кондиции, и плюс ко всему этому добавим запись в лог файл.
Продолжение статьи

7 комментариев к “Автоматическое создание резервных копий

  1. Что то не выходит!
    на «ftp» ложиться пустой архив «.tar.gz»
    ошибок при выполнении нету! что я делаю не так, помогите

    1. А дам точно создается? Из той ли папки вы его берете?
      Попробуйте все команды выполнить в консоли, посмотрите пошагово что происходит, какое имя файла дается дампу, где он сохраняется и т.п.

  2. я вижу на экране консоли в тексте содержание таблицы(вывод на экран) то есть авторизация с mysql проходит ну вот все это он не сохраняет в архив! точнее неложит в него sql-ку в архив

  3. Не работает у вас потому что нужно так:
    mysqldump -u$MUSER -p$MPASS -A > $DPATCH

    Спецсимвол «>» на сайте преобразовался в «>»

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

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.