Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- я тебе уже писал по поводу автоматического бекапа сайта.
- мне понравилась идея http://wikiadmin.net/MySQL_%D0%91%D1%8D%D0%BA%D0%B0%D0%BF_%D0%B8_%D0%B2%D0%BE%D1%81%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B1%D0%B0%D0%B7_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85/
- но она там ИЛИ создаёт бекап за несколько дней(раз) ИЛИ создаёт бекап всех БД, которые найдёт.
- поэтому и надо доработать (или заново пере-/на-писать) этот скрипт.
- итак, прелюдия.
- полностью сайт представляет собой один каталог (с файлами сайта) и несколькими БД
- каталог с файлами размещен на вдс так: /var/www/html/phone.prezident-taxi.ru/тут_файлы_и_каталоги_сайта
- бекапы будут храниться тут: /backups (впрочем, если это неправильно, то напиши где их лучше хранить)
- АКТ ПЕРВЫЙ. готовим каталог
- для облегчения учёта бекапов и контроля процесса, каталог бекапов делится на подкаталоги /1, /2,...,/n где n - количество одновременно хранимых бекапов, задаётся в начале скрипта через переменную.
- Таким образом скрипт должен всегда бекапить в каталог /backups/1, перед этим "сдвинув" на единицу имеющиеся каталоги /1.../n-1:
- /n-1 должен переименоваться в /n,
- потом /n-2 должен стать каталогом /n-1,
- ...
- /1 переименовываем в /2,
- /1 создаём заново и в него уже бекапим
- АКТ ВТОРОЙ. создаём бекапы
- в каталоге /01 должно получиться три файла:
- а) создаём бекап (zip или tgz архив) каталога файлов с названием site.zip
- б) создаём бекап баз данных. названия баз начинаются с определенного префикса (префикс задаётся в переменной скрипта).
- экспорт должен содержать команды DROP DATABASE IF EXISTS `***`; CREATE DATABASE IF NOT EXISTS `***`; DROP TABLE IF EXISTS `***`; CREATE TABLE IF NOT EXISTS `***`
- базы большие, поэтому после дбэкспорта их надо сжать в архив.
- получившиеся файлы: имя_базы.sql.zip
- в) создаём лог бекапа (когда начался и сколько длился бекап, произошли ли ошибки во время бекапа и какие), имя файла лога должно содержать время начала работы скрипта: 2016-06-05_00.02.13.log
- г) отсылаем на определённый е-мейл этот лог (е-мейл настраивается в переменной скрипта)
- АКТ ТРЕТИЙ. развязка.
- нужно организовать командный файл, запускаемый по cron, который будет делать то, что описано выше :(
- Получилось вот что (но оно не пашет, скотина!):
- #!/bin/bash
- #Настраиваем переменные
- BACKUP_DIR="/backups" # Каталог для бекапов
- DB_USER="root" # Пользовател, от которого будет идти бэкап.
- DB_PASSWD="5tgbfghG%" # Пароль этого пользователя
- DB_PREFFIX="taxist" # Префикс экспортируемых БД
- MAX_BACKUPS=5 # Максимальное количество одновременно хранимых бекапов
- MYSQL=$(which mysql)
- MYSQLDUMP=$(which mysqldump)
- DBS=$($MYSQL -u $DB_USER -p$DB_PASSWD -Bse "show databases like '$DB_PREFFIX%'")
- echo `date +%Y-%m-%d_%H.%M.%S`": Резервное копирование начато"
- # готовим каталог
- rm -rf $BACKUP_DIR/$MAX_BACKUPS # Удаляем самый старый каталог
- index=$MAX_BACKUPS # Переменная для цикла манипулирования каталогами
- while [ \$index -ne 2 ] # Двигаемся переменной от макс. количества до 2
- do
- index=\$(( \$index - 1 )) # Уменьшаем переменную <-=============== ВОТ ТУТ ВЫКИДЫВАЕТ ОШИБКУ syntax error near unexpected token `('
- mv $BACKUP_DIR/\$(( \$index - 1 )) $BACKUP_DIR/$index # "Сдвигаем" каталог
- done
- $BACKUP=$BACKUP_DIR/$index
- mkdir $BACKUP # Создаём каталог
- echo "Каталог \$DB_BACKUP/$index"
- for DB in $DBS
- do
- $MYSQLDUMP --user=$DB_USER --password=$DB_PASSWD -R -e -F --add-drop-database --add-drop-table --allow-keywords $DB | gzip -9 -c >$BACKUP/$DB.sql.gzip
- done
- exit 0
Add Comment
Please, Sign In to add comment