создание бэкапа
Структура бэкапов ( тут примонтирован FTP сервер через cifs)
работает так если запускаешь скрипт то бэкапит все сайты со всеми базами исключает все что нужно. ( каждый сайт отдельно бэкапит свою базу) ну и отдельно каждый сайт.
если через пробел указываеш сайт то
scrypt.sh vasya.ru
бэкапится только он, так же сразу заливается на фти с ограничением
скорости и прогресс баром.
и подчисткой локальных бэкапов
Так же после бэкапа тебе выкидвыается прямая ссылочка на фтп архив.
доп софт wput и pv его нужно доставить !
#!/bin/sh
# Пример пути до сайта /var/www/site.ru/web/
SITEDIR="/home/bitrix/ext_www" # Папка до названия доменаов
DBCONN="bitrix/php_interface/dbconn.php" # Откуда читать настройки mysql
FTPUSER="backup_ftp" # Логин FTP сервера
FTPPASS="adfadsfasdfa safdw" # Пароль FTP
FTPHOST="111.1.11.11 " # сервер FTP
FTPDIR="" # папка на FTP
TMPDIR="/mnt/backup/site" # тут временный файл лежит до отправки
TMPWPUTBASE="/mnt/backup" # wput подставит эту папку как базовую
DATE=`date +"%Y-%m-%d"` # Формат даты в имени файла
DATEYM=`date +%Y`/`date +%m` # Второй форматы даты
LIST=${1:-`ls $SITEDIR | grep -E ".*\.\w{1,5}" | grep -v "restore.php" | grep -v "klondike.php"`} # Название сайта, тут выбор или аргумент или, регулярка можно убрать только -L ;)
mkdir -p $TMPDIR/$DATEYM # создаем структ уру каталогов если их нет
for ELEMENT in $LIST
do
if [ ! -f /$SITEDIR/$ELEMENT/$DBCONN ];
then
echo " Файл $SITEDIR/$ELEMENT/$DBCONN не найден, сайт будет без БД!"
else
# ищим какая база отностися к сайту сохраняем в переменные ее данные.
DBLOGIN=$(/bin/php -r "include '${SITEDIR}/${ELEMENT}/${DBCONN}'; echo(\"{\$DBLogin}\");")
DBNAME=$(/bin/php -r "include '${SITEDIR}/${ELEMENT}/${DBCONN}'; echo(\"{\$DBName}\");")
DBPASS=$(/bin/php -r "include '${SITEDIR}/${ELEMENT}/${DBCONN}'; echo(\"{\$DBPassword}\");")
DBHOST=$(/bin/php -r "include '${SITEDIR}/${ELEMENT}/${DBCONN}'; echo(\"{\$DBHost}\");")
echo "Найдена BD $ELEMENT"
echo ""
echo "Login: $DBLOGIN"
echo "DB : $DBNAME"
echo "Pass : $DBPASS"
echo "Host : $DBHOST"
echo ""
echo "Дамп БД $DBNAME"
# бэкап базы только через эвал и эхо смогли экранировать все варианты спецсимволов в пароле
eval "$(echo "mysqldump --no-tablespaces -u$DBLOGIN -p'$DBPASS' $DBNAME -h$DBHOST > $SITEDIR/$ELEMENT/$DBNAME\-$DATE.sql && echo "Дамп БД $DBNAME будет сохранен в корне сайта" || echo "Ошибка дампа базы данных " $DBNAME")"
chown bitrix:bitrix $SITEDIR/$ELEMENT/$DBNAME\-$DATE.sql
fi
echo "Считаем количество Файлов на сайте"
SIZE="$(find $SITEDIR/$ELEMENT/$WEB -not -path "$SITEDIR/$ELEMENT/bitrix/tmp/*" -not -path "$SITEDIR/$ELEMENT/bitrix/updates/*" -not -path "$SITEDIR/$ELEMENT/dev_logs/*" -not -path "$SITEDIR/$ELEMENT/upload/1c_import_light/logs/*" -not -path "$SITEDIR/$ELEMENT/upload/1c_import_light/total_errors/*" -not -path "$SITEDIR/$ELEMENT/.git/*" -not -path "$SITEDIR/$ELEMENT/bitrix/catalog_export/logs/*" -not -path "$SITEDIR/$ELEMENT/bitrix/backup/*" -not -path "$SITEDIR/$ELEMENT/bitrix/cache/*" -not -path "$SITEDIR/$ELEMENT/bitrix/managed_cache/*" -not -path "$SITEDIR/$ELEMENT/bitrix/stack_cache/*" -not -path "$SITEDIR/$ELEMENT/upload/resize_cache/*" -not -path "$SITEDIR/$ELEMENT/stats/*" | wc -l)" && echo " В архиве будет $SIZE файлов"
echo "Архивируем сайт $ELEMENT прогресс не в килобайтах а в количестве файлов"
tar -cvpzf $TMPDIR/$DATEYM/$ELEMENT-$DATE.tar.gz --directory $SITEDIR/$ELEMENT/$WEB --ignore-failed-read --exclude='./bitrix/tmp' --exclude='./bitrix/updates' --exclude='./dev_logs' --exclude='./upload/1c_import_light/logs' --exclude='./upload/1c_import_light/total_errors' --exclude='./.git' --exclude='./bitrix/catalog_export/logs' --exclude='./bitrix/backup' --exclude='./bitrix/cache' --exclude='./bitrix/managed_cache' --exclude='./bitrix/stack_cache' --exclude='./upload/resize_cache' --exclude='./stats' . | pv -s $SIZE -l > /dev/null
rm -f $SITEDIR/$ELEMENT/$WEB/$DBNAME\-$DATE.sql # поскльку ложим на реальный сайт, ибо нормально добавить в архив не получитяс.
echo "Сохраняем $ELEMENT на FTP"
wput --basename=$TMPWPUTBASE --limit-rate=6000K --timestamping --remove-source-files --tries=2 $TMPDIR/$DATEYM/$ELEMENT-$DATE.tar.gz ftp://$FTPUSER:$FTPPASS@$FTPHOST$FTPDIR && echo "Архив залит успешно, временные файлы удалены"
echo -en "\n\033[37;1;41m Ссылочка:\033[0m \e[1;4;36mwget ftp://$FTPUSER:$FTPPASS@$FTPHOST/site/$DATEYM/$ELEMENT-$DATE.tar.gz\e[0m\n\n" #ks05
done
rm -r $TMPDIR
В скрипте не задействовано ядро битрикс ВМ дабы можно было его адаптировать на любые другие сервера. Для определения базы данных выполняется dbconn и его переменные используются для бэкапа.