Guest User

Бекап

a guest
Jun 6th, 2016
47
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 5.19 KB | None | 0 0
  1. я тебе уже писал по поводу автоматического бекапа сайта.
  2. мне понравилась идея 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/
  3. но она там ИЛИ создаёт бекап за несколько дней(раз) ИЛИ создаёт бекап всех БД, которые найдёт.
  4. поэтому и надо доработать (или заново пере-/на-писать) этот скрипт.
  5. итак, прелюдия.
  6. полностью сайт представляет собой один каталог (с файлами сайта) и несколькими БД
  7. каталог с файлами размещен на вдс так: /var/www/html/phone.prezident-taxi.ru/тут_файлы_и_каталоги_сайта
  8. бекапы будут храниться тут: /backups (впрочем, если это неправильно, то напиши где их лучше хранить)
  9. АКТ ПЕРВЫЙ. готовим каталог
  10. для облегчения учёта бекапов и контроля процесса, каталог бекапов делится на подкаталоги /1, /2,...,/n где n - количество одновременно хранимых бекапов, задаётся в начале скрипта через переменную.
  11. Таким образом скрипт должен всегда бекапить в каталог /backups/1, перед этим "сдвинув" на единицу имеющиеся каталоги /1.../n-1:
  12. /n-1 должен переименоваться в /n,
  13. потом /n-2 должен стать каталогом /n-1,
  14. ...
  15. /1 переименовываем в /2,
  16. /1 создаём заново и в него уже бекапим
  17. АКТ ВТОРОЙ. создаём бекапы
  18. в каталоге /01 должно получиться три файла:
  19. а) создаём бекап (zip или tgz архив) каталога файлов с названием site.zip
  20. б) создаём бекап баз данных. названия баз начинаются с определенного префикса (префикс задаётся в переменной скрипта).
  21. экспорт должен содержать команды DROP DATABASE IF EXISTS `***`; CREATE DATABASE IF NOT EXISTS `***`; DROP TABLE IF EXISTS `***`; CREATE TABLE IF NOT EXISTS `***`
  22. базы большие, поэтому после дбэкспорта их надо сжать в архив.
  23. получившиеся файлы: имя_базы.sql.zip
  24. в) создаём лог бекапа (когда начался и сколько длился бекап, произошли ли ошибки во время бекапа и какие), имя файла лога должно содержать время начала работы скрипта: 2016-06-05_00.02.13.log
  25. г) отсылаем на определённый е-мейл этот лог (е-мейл настраивается в переменной скрипта)
  26. АКТ ТРЕТИЙ. развязка.
  27. нужно организовать командный файл, запускаемый по cron, который будет делать то, что описано выше :(
  28.  
  29. Получилось вот что (но оно не пашет, скотина!):
  30.  
  31. #!/bin/bash
  32. #Настраиваем переменные
  33.     BACKUP_DIR="/backups"   # Каталог для бекапов
  34.     DB_USER="root"          # Пользовател, от которого будет идти бэкап.
  35.     DB_PASSWD="5tgbfghG%"   # Пароль этого пользователя
  36.     DB_PREFFIX="taxist"     # Префикс экспортируемых БД
  37.     MAX_BACKUPS=5           # Максимальное количество одновременно хранимых бекапов
  38.     MYSQL=$(which mysql)
  39.     MYSQLDUMP=$(which mysqldump)
  40.     DBS=$($MYSQL -u $DB_USER -p$DB_PASSWD -Bse "show databases like '$DB_PREFFIX%'")
  41.  
  42. echo `date +%Y-%m-%d_%H.%M.%S`": Резервное копирование начато"
  43. # готовим каталог
  44.     rm -rf $BACKUP_DIR/$MAX_BACKUPS # Удаляем самый старый каталог
  45.     index=$MAX_BACKUPS              # Переменная для цикла манипулирования каталогами
  46.     while [ \$index -ne 2 ]         # Двигаемся переменной от макс. количества до 2
  47.     do
  48.         index=\$(( \$index - 1 ))   # Уменьшаем переменную <-=============== ВОТ ТУТ ВЫКИДЫВАЕТ ОШИБКУ syntax error near unexpected token `('
  49.         mv $BACKUP_DIR/\$(( \$index - 1 )) $BACKUP_DIR/$index       # "Сдвигаем" каталог
  50.     done
  51.     $BACKUP=$BACKUP_DIR/$index
  52.     mkdir $BACKUP           # Создаём каталог
  53.  
  54. echo "Каталог \$DB_BACKUP/$index"
  55.  
  56.     for DB in $DBS
  57.     do
  58.         $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
  59.     done
  60.  
  61. exit 0
Add Comment
Please, Sign In to add comment