Уважаемые читатели, я давно не писал, так как много работы.:)
Сегодня мы пишем скрипт, который без особых проблем скопирует на FTP-сервер файлы дампа БД MySQL и некоторое колл-во сайтов, после чего отправит нам отчёт о проведённой работе:)
З.Ы. Сильно не пинайте, первый скрипт:)
Собственно с чего начать? А начнём мы с БД.
Предположим есть 5 БД, создаём файл, назовём его bcmysql.conf и положим в /var/bcscript
vim /var/bcscript/bcmysql.conf
#!/bin/bash
#
#
# MOUNT FTP Монтируем FTP-сервер в папку, если будет ошибка пишем в /var/bcscript/logs/bcscript.err
curlftpfs ftp://ftp-server /localdir -o user=username:password 2> /var/bcscript/logs/bcscript.err
# REMOVE OLD FILES Удаляем файлы старше 30 дней
find /ftpdir/db -mtime +30 -type f -exec rm {} \;
find /ftpdir/www -mtime +30 -type f -exec rm {} \;
# CREATE MAIL MESSAGE & ASK VARIABLЕS Создаём почтовое сообщение для отправки отчёта и задаём переменные для дальнейшей работы
DATE=`date +%d-%m-%Y` # Задаём текущую дату
TIME=`date +%H:%M:%S` # Время
EMAIL=kykywka@gmail.com # Электронную почту на которую отправи отчёт
MAILB=/tmp/mail.msg # Располодения файла сообщения
MAILS="BackUp report" # Тема сообщения
echo null > /tmp/mail.msg # Очищаем файл
echo Date $DATE > /tmp/mail.msg # Добавляем в сообщение дату
# START TIME
echo 'START SCRIPT' $TIME >> /tmp/mail.msg # Добавляем в сообщение время начала скрипта
# BACKUP SCRIPT STARTER !!!!Читаем примечание!!!!
/var/bcscript/dbbc.conf postfix 2>> /var/bcscript/logs/bcscript.err # Запускаем скрипт копирования базы с выводом ошибок в /var/bcscript/bcscript.err
/var/bcscript/wwwbc.conf sitename 2>> /var/bcscript/logs/bcscript.err # Запускаем скрипт копирования сайта с выводом ошибок в /var/bcscript/bcscript.err
#END TIME
TIME=`date +%H:%M:%S` # ...Снова задаём время
echo 'STOP SCRIPT' $TIME >> /tmp/mail.msg # ...И добавляем его в письмо. Это время окончания работы скрипта
# SEND MESSAGE # Отправляем сообщение на почту
mail -c mailcopy@mail.ru -s "$MAILS" $EMAIL < $MAILB 2>> /var/bcscript/logs/bcscript.err # Параметр -c задаёт получателя копии
# CLEAR TMP FOLDER Очистим временную папку
rm -r -f /tmp/* 2>> /var/bcscript/logs/bcscript.err
# UNMOUNT FTP Размонтируем фтп
fusermount -u /ftpdir 2>> /var/bcscript/logs/bcscript.err
Примечания:
1. Для работы скрипта необходимо установить curlftpfs. sudo aptitude install curlftpfs
2. Вернёмся к пункту BACKUP SCRIPT STARTER... Обращу внимание, на то что все файлы запускаются с параметром, сделано это для того, чтобы не лопатить 1 файл добавляя в него кусок копирования базы или сайта, а просто добавлением одной строки с параметром, который является или именем базы или папкой содержащей сайт. Далее мы увидим, как это работает...
Скрипт копирования БД.
Скрипт копирования БД помещаем в ту же папку, что и bcmysql.conf. Назовём его dbbc.conf. Создайте в MySQL пользователя, с правами SELECT, LOCK TABLES для всех баз. В данном случае это bcuser с паролем bcuser
#!/bin/bash
#
# DATABASE BACKUP
#
# VARIABLE Зададим переменные
DATE=`date +%d-%m-%Y` # Задаём дату
HOSTNAME=localhost # Имя хоста
DBNAME=$1 # Имя базы ($1 говорит о том, что мы используем в качестве имени БД первый указанный параметр)
DBPASS=bcuser # пароль пользователя от которого делаем ДАМП
DBUSER=bcuser # пользователь от которого делаем дамп
MAILB=/tmp/mail.msg # файл сообщения
# CREATE DUMP # Дамп создаём
mysqldump --opt -h $HOSTNAME -u $DBUSER -p$DBPASS $DBNAME > /tmp/backup.sql # Делаем дамп
tar -zcf /tmp/sql-$DBNAME-$DATE.tar.gz /tmp/backup.sql # Архивируем
cp /tmp/sql-$DBNAME-$DATE.tar.gz /ftpdir/db/$DATE-$DBNAME.sql.tar.gz # Копируем
#WRITE MESSAGE FILE # пишем в сообщение отчёт о проделанной работе
CP=$? # задаём переменной CP результат последнего действия
test $CP = 0 && echo BackUp MySQL DB $DBNAME ................. OK >> $MAILB || echo BackUp MySQL DB $DBNAME ................. FALSE >> $MAILB # Делаем вывод в файл (если СР = 0 тогда ОК, если чему-то другому тогда FALSE).
Собственно вот и готов бэкап БД. Если надо ещё одну базу, тогда просто допишем в файл bcmysql.conf сроку /var/bcscript/dbbc.conf postfix 2>> /var/bcscript/logs/bcscript.err , где postfix = имя БД
Ну остался самый короткий скрипт:) Копирование сайта. Теоретически ничем не отличается от копирования дампа.
Назовём файл wwwbc.conf
# BACKUP PROCEDURE FOR FILES
#
#VARIABLES Задаём переменные
FOLDERN=$1 # Имя папки (задаётся аналогично имени БД)
DATE=`date +%d-%m-%Y` #Дата
MAILB=/tmp/mail.msg # Письмо
tar -zcf /tmp/www-$FOLDERN-$DATE.tar.gz /var/www/vhosts/$FOLDERN # Архивируем папку с сайтом
mv /tmp/www-$FOLDERN-$DATE.tar.gz /ftpdir/www # Переносим на FTP-сервер
#WRITE MESSAGE FILE Пишем в сообщение (аналогично БД)
CP=$?
test $CP = 0 && echo BackUp www $FOLDERN ................. OK >> $MAILB || echo BackUp www $FOLDERN ................. FALSE >> $MAILB
Всё. скрипт готов:)
Поиграйтесь с правами на папки и файлы, в основном могут быть проблемы с этим.
Если выдаётся ошибка tar: Removing leading `/' from member names не обращайте внимания или просто поиграйте с опцией -C tar, в консоль сыпать ничего не будет, всё падает в лог-файл.