· 10 years ago · Jun 06, 2016, 10:42 PM
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
42echo `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
54echo "Каталог \$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
61exit 0