В предыдущих статьях мы настроили сервер для работы с 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
Этот скрипт не является идеальным так как не удаляет за собой архивы, не отправляет уведомления в случае провала создания дампа и/или его загрузки на сервер. Однако он выполняет свою работу и это главное
В будущих статьях мы доведем его до нужной кондиции, и плюс ко всему этому добавим запись в лог файл.
Продолжение статьи
Что то не выходит!
на «ftp» ложиться пустой архив «.tar.gz»
ошибок при выполнении нету! что я делаю не так, помогите
А дам точно создается? Из той ли папки вы его берете?
Попробуйте все команды выполнить в консоли, посмотрите пошагово что происходит, какое имя файла дается дампу, где он сохраняется и т.п.
я вижу на экране консоли в тексте содержание таблицы(вывод на экран) то есть авторизация с mysql проходит ну вот все это он не сохраняет в архив! точнее неложит в него sql-ку в архив
Будьте добры весь листинг пожалуйста.
Можно сюда, но лучше на http://pastebin.com/
Не работает у вас потому что нужно так:
mysqldump -u$MUSER -p$MPASS -A > $DPATCH
Спецсимвол «>» на сайте преобразовался в «>»