====== Настройка бэкапов ======
===== Бэкап базы данных =====
Бэкап базы данных выполняется bash-скриптом "backup.sh" находящийся в директории ///home/backup_scripts//
Скрипт "backup.sh" выполняется каждый день в 03:15 с помощью демон-программы //Cron//.
Архивы с бэкапами базы данных сохраняются в директории ///home/backup/Db/"год"/"месяц"//
Запись в //Cron// идет с помощью исполняемого файла //"rc"// в директории ///etc/cron.h//
#!/bin/sh
find /home/backup -type f -ctime +30 -name "*.sql.gz" -exec rm {} \; -print
mysqldump --defaults-extra-file=/home/backup_scripts/mysql.cfg dozor --default-character-set=utf8 --ignore-table=dozor.addr --ignore-table=dozor.addr_type | gzip -c > `date +%y%m%d`.sql.gz
if ! [ -d /home/backup/Db/`date +20%y` ]; then
mkdir /home/backup/Db/`date +20%y`/
fi
if ! [ -d /home/backup/Db/`date +20%y`/`date +%m` ]; then
mkdir /home/backup/Db/`date +20%y`/`date +%m`/
fi
mv `date +%y%m%d`.sql.gz /home/backup/Db/`date +20%y`/`date +%m`
===== Процесс создания bash-скрипта backup.sh =====
Создается директория, командой //mkdir//, для хранения бэкапов базы данных, логов и бинарных файлов:
cd /home
mkdir backup
cd backup
mkdir Logs Db Bin
Переход обратно в директорию Home:
cd /home
Создается дополнительная директория для хранения bash-скриптов:
mkdir backup_scripts
Переход в рабочую директорию:
cd /home/backup_scripts
Создается новый скрипт и делается исполняемым:
touch backup.sh
chmod +x ./backup.sh
Редактируется скрипт с помощью команды:
nano backup.sh
Предварительно установив nano:
emerge nano
Создавая пустой файл с использованием команды //touch//. В его первой строке нужно указать, какая именно оболочка используется. Поэтому первая строка файла будет такой:
#!/bin/bash
Следующие строки будут проверять наличие старых архивов, создавать дамп mysql и сразу его архивировать.
find /home/backup -type f -ctime +30 -name «*.sql.gz» -exec rm {} \; -print
mysqldump —defaults-extra-file=/home/backup_scripts/mysql.cfg dozor —default-character-set=utf8 —ignore-table=dozor.addr —ignore-table=dozor.addr_type | gzip -c > `date +%y%m%d`.sql.gz
Далее проверяются и создаются директории для хранения базы данных
if ! [ d /home/backup/Db/`date +20%y` ]; then
mkdir /home/backup/Db/`date +20%y`/
fi
if ! [ d /home/backup/Db/`date +20%y`/`date +%m` ]; then
mkdir home/backup/Db/`date +20%y`/`date +%m`/
fi
mv `date +%y%m%d`.sql.gz /home/backup/Db/`date +20%y`/`date +%m`
Выход из текстового редактора с сохранением осуществляется нажатием клавиш Ctrl+X, //Enter//
Для выполенения скрипта "backup.sh" необходимо создать файл конфигурации //mysql.cfg//:
cd /home/backup_scripts
touch mysql.cfg
И записать в него название базы данных и ее пароль:
nano mysql.cfg
[client]
user = dozor
password = …
===== Бэкап Логов =====
Логи отправляются архивом на жесткий диск первого числа каждого месяца в 03:00.
Настроено это bash-скриптом //«back.sh»//, находящимся в директории ///home/backup_scripts//, который запускается с помощью демон-программы //Cron//.
Суть этого скрипта - он создает с проверкой новые каталоги ///home/backup/Logs/ «год» //. И отправляет заархивированные логи в созданную директорию. Также удаляет все старые архивы из ///var/lib/dozor/log//
Запускается каждый месяц с помощью //Cron//. Запись в //Cron// идет в файле //"rc"// в директории ///etc/cron.d//, в дальнейшем рассмотрим на примере.
#!/bin/bash
cd /var/lib/dozor/log
tar -cMvf $(date +%y.%m.%d).tar.gz *
if ! [ -d /home/backup/Logs/`date +%20y`/ ]; then
mkdir /home/backup/Logs/`date +20%y`
fi
mv $(date +%y.%m.%d).tar.gz /home/backup/Logs/`date +20%y`
rm *.tar.gz
===== Процесс создания bash-скрипта back.sh =====
Переход в рабочую директорию:
cd /home/backup_scripts
Создание пустого файла с использованием команды //touch//:
touch back.sh
Файл делается исполняемым:
chmod +x ./back.sh
Файл back.sh редактируется с помощью текстового редактора //nano//:
nano back.sh
Создавая пустой файл с использованием команды //touch//. В его первой строке нужно указать, какая именно оболочка используется. Поэтому первая строка файла будет такой:
#!/bin/bash
Следующие строки скрипта будут архивировать логи, название архива - дата:
cd /var/lib/dozor/log
tar -cMvf $(date +%y.%m.%d).tar.gz *
Проверка каталогов, при их отсутсвии создаются новые:
if ! [ -d /home/backup/Logs/`date +20%y`/ ]; then
mkdir /home/backup/Logs/`date +20%y`
fi
Перемещение архивов и удаление старых логов:
mv $(date +%y.%m.%d).tar.gz /home/backup/Logs/`date +20%y`
rm *.tar.gz
Выход из текстового редактора с сохранением осуществляется нажатием клавиш Ctrl+X, Enter
===== Настройка CRON =====
//Сron// – программа-демон, предназначенная для выполнения заданий (скриптов) в определенное время, или через определенные промежутки времени.
Переход в директорию к исполняемому файлу:
cd /etc/cron.d
Редактирование исполняемого файла командой:
nano rc
Добавляются дополнительные строки по примеру:
0 3 1 * * root /home/backup_scripts/back.sh
15 3 * * * root /home/backup_scripts/backup.sh
===== Бэкап BIN файлов =====
Бэкап BIN файлов делается вручную, после установки сервера или обновления сервисов, с сохранением в ///home/backup/Bin//
cp -r /var/lib/dozor /home/backup/Bin
cd /home/backup/Bin/dozor
rm -r log updates
===== Бэкап базы данных на флэшку =====
При подключении флешки к серверу происходит бэкап базы данных //mysql// с сохранением на флешку, если флешка не содержит файлов формата //.sql.gz//
Если на флешке присутствует файл типа //.sql.gz// она автоматически восстановит базу данных.
Основной bash-скрипт //BackupUSB.sh// будет обращаться к двум скриптам: //ExportUSB.sh// и //ImportUSB.sh//
Для работы скриптов необходимо создать файл конфигурации //root.cfg// в дирректории ///home/backup_scripts//
cd /home/backup_scripts
touch root.cfg
nano root.cfg
И записать в него название базы данных и ее пароль:
[client]
user = root
password = …
===== Процесс создания bash-скрипта ExportUSB.sh =====
Скрипт //ExportUSB.sh// делает бэкап базы данных //mysql// при подключении флешки к серверу. Копирует архив с базой данных на флешку и пишет лог файл с проверками.
Переход в рабочую директорию:
cd /home/backup_scripts
Создается новый скрипт и делается исполняемым:
touch ExportUSB.sh
chmod +x ./ExportUSB.sh
Редактируется скрипт с помощью команды:
nano ExportUSB.sh
Текст скрипта:
#!/bin/bash
LOGFILE=/mnt/usb/backupDB.txt
echo >>$LOGFILE
echo "=================================================" >>$LOGFILE
echo "$(date +'%d-%b-%Y %R')" >>$LOGFILE
echo "BackUp DataBase started" >>$LOGFILE
/etc/init.d/d3srv stop
/etc/init.d/e3srv stop
echo "-d3srv is stopped" >>$LOGFILE
echo "-e3srv is stopped" >>$LOGFILE
echo "-d-sh is stopped" >>$LOGFILE
mysqldump --defaults-extra-file=/home/backup_scripts/root.cfg dozor --ignore-table=dozor.addr --ignore-table=dozor.addr_type | sed '20a\use `dozor`\' | gzip -c > /home/backup-scripts/`date +%y%m%d`.sql.gz
/etc/init.d/d3srv start
/etc/init.d/e3srv start
/etc/init.d/d-sh start
echo "-d3srv started" >>$LOGFILE
echo "-3esrv started" >>$LOGFILE
echo "-d-sh started" >>$LOGFILE
STATUS=$?
echo "BackUp DataBase saved as `date "+%y%m%d.sql.gz"`" >>$LOGFILE
echo "Started copying the file to the backup resource" >>$LOGFILE
cp -f /home/backup_scripts/`date +%y%m%d`.sql.gz /mnt/usb/ &>>$LOGFILE
if [[ $? != 0 ]]; then
echo "#############################################################" >>$LOGFILE
echo "### An error occurred while copying to the backup resource###" >>$LOGFILE
echo "#############################################################" >>$LOGFILE
else
echo "The file was successfully copied" >>$LOGFILE
echo "All operations completed successfully!" >>$LOGFILE
fi
echo "Unmounting the file system" >>$LOGFILE
rm -r /home/backup_scripts/*.sql.gz
umount /mnt/usb
Выход из текстового редактора с сохранением осуществляется нажатием клавиш Ctrl+X, Enter
===== Процесс создания bash-скрипта ImportUSB.sh =====
Скрипт //Import.sh// проверяет наличие фалов формата //.sql.gz// на флешке и при их наличии восстанавливает базу данных.
Переход в рабочую директорию:
cd /home/backup_scripts
Создается новый скрипт и делается исполняемым:
touch ImportUSB.sh
chmod +x ./ImportUSB.sh
Редактируется скрипт с помощью команды:
nano ImportUSB.sh
Текст скрипта:
#!/bin/bash
mkdir /mnt/usb
mount /dev/sdb1 /mnt/usb
echo >> /mnt/usb/backupDB.txt
echo "=================================================" >>/mnt/usb/backupDB.txt
echo "$(date +'%d-%b-%Y %R')" >>/mnt/usb/backupDB.txt
echo "Import DataBase started" >> /mnt/usb/backupDB.txt
gunzip /mnt/usb/*.sql.gz
/etc/init.d/d3srv stop
/etc/init.d/e3srv stop
echo "-d3srv stoped" >>/mnt/usb/backupDB.txt
echo "-3esrv stoped" >>/mnt/usb/backupDB.txt
echo "-d-sh stoped" >>/mnt/usb/backupDB.txt
mysql --defaults-extra-file=/home/backup_scripts/root.cfg < /mnt/usb/*.sql
/etc/init.d/d3srv start
/etc/init.d/e3srv start
/etc/init.d/d-sh start
echo "-d3srv started" >>/mnt/usb/backupDB.txt
echo "-3esrv started" >>/mnt/usb/backupDB.txt
echo "-d-sh started" >>/mnt/usb/backupDB.txt
echo "All operation completed successfully!" >>/mnt/usb/backupDB.txt
rm -r /mnt/usb/*.sql
umount /dev/sdb1
Выход из текстового редактора с сохранением осуществляется нажатием клавиш Ctrl+X, Enter
===== Процесс создания bash-скрипта BackupUSB.sh =====
Основной скрипт //BackupUSB.sh// решает какую задачу необходимо выполнить с флешкой.
Создается новый скрипт и делается исполняемым по предыдущим примерам.
Текст скрипта:
#!/bin/bash
mkdir /mnt/usb
mount /dev/sdb1 /mnt/usb
if [ -f /mnt/usb/*.sql.gz ]; then
. /home/backup_scripts/ImportUSB.sh
else
if ! [ -f /mnt/usb/*sql.gz ]; then
. /home/backup_scripts/ExportUSB.sh
exit
fi
umount /dev/sdb1
fi
Выход из текстового редактора с сохранением осуществляется нажатием клавиш Ctrl+X, Enter
===== Настройка UDEV =====
Скрипт //BackupUSB.sh// запускается с помощью менеджера устройств //Udev//.
Он управляет файлами устройств в каталоге ///dev// и обрабатывает все действия из пользовательского пространства при добавлении или удалении устройств.
В дирректорию ///etc/udev/rules.d// добавляется новая задача //10-usb.rules//
Создается исполняемый файл
touсh /etc/udev/rules.d/10-usb.rules
Записываются параметы для запуска флешки
nano 10-usb.rules
KERNEL=="sdb*", ACTION=="add", OWNER="dozor", GROUP="dozor", RUN+="/home/backup_scripts/BackupUSB.sh”
Процесс записи и чтении с флешки может занимать некоторое время. Необходимо вынимать флешку только тогда, когда не горит на ней световой индикатор.