Тотальный бэкап на WebDAV

Данные скрипты позволяют создать сжатые защищённые паролем бэкапы произвольных папок и баз данных MySQL и залить их на WebDAV диск (на примере Яндекс.Диска).
Требуемые пакеты: 7zip, curl.

sqlbackup.sh

#!/usr/local/bin/bash
# Юзер и пароль от БД
USER="root"
PASSWORD="pass"
# Путь со скриптами и для дампов баз
BASEDIR="/path/to/backup/scripts/folder"
OUTPUTDIR=$BASEDIR"/sql_bases"
# Сжимать ли дополнительно каждый дамп gzip-ом
GZIP_ENABLED=0

# Пути к используемым бинарикам (чтобы не было проблем при запуске по cron-у)
MYSQLDUMP="/usr/local/bin/mysqldump"
MYSQL="/usr/local/bin/mysql"
# Пароль на итоговый архив
SECRET="xxxxxxxxxxxxxxxxxxxxxxxxxxx"

# Текущий номер дня недели для формирования названия файла (ежедневные бэкапы)
DAY=$(date +%u)

if [ ! -d "$OUTPUTDIR" ]; then
    mkdir -p $OUTPUTDIR
fi

# Получение списка всех баз на сервере...
databases=`$MYSQL --user=$USER --password=$PASSWORD -e "SHOW DATABASES;" |\
grep -Ev "(Database|information_schema)"`

# ...и последовательный дамп каждой из них
for db in $databases; do
	if [ $GZIP_ENABLED == 1 ]; then
		$MYSQLDUMP --force --opt --user=$USER --password=$PASSWORD \
		--databases $db | gzip > "$OUTPUTDIR/$db.gz"
	else
		$MYSQLDUMP --force --opt --user=$USER --password=$PASSWORD \
		--databases $db > "$OUTPUTDIR/$db.sql"
   	fi    
done

# Упаковка каталога с базами с сохранением прав (tar) и архивирование 7z,
# подробное описание параметров см. ниже
/usr/bin/tar -cf - --format=ustar -C $BASEDIR sql_bases | \
/usr/local/bin/7za a -aoa -y -si -t7z -m0=PPMd -mx9 -ms=on \
-mhe=on -p$SECRET $BASEDIR"/sql_bases"$DAY".tar.7z"

# TAR
# -cf -			Упаковка с выводом результата в stdout
# --format=ustar	выбор формата Uniform Standard Tape ARchive
#			(http://en.wikipedia.org/wiki/Ustar#UStar_format)
# 7z
# 7za a -aoa -y		Добавление в архив с перезаписью, без подтверждения
# -si			Входящие данные берутся из stdin (поток данных из tar)
# -t7z -m0=PPMd -mx9	Формат 7z, алгоритм PPMd (лучший для текстовых данных),
#			максимальная степень сжатия
# -ms=on		Режим цельного архива (сильнее сжатие)
# -mhe=on		Шифровать заголовок, чтобы не было видно файлов без пароля
# -p			Пароль для шифрования данных архива

# Удаление дампов
/bin/rm -fR $OUTPUTDIR

# Закачка на WebDAV диск, файл upload.sh описан далее
$BASEDIR/upload.sh $BASEDIR"/sql_bases"$DAY".tar.7z" "sql_bases"$DAY".tar.7z"

# Удаление архива
/bin/rm -f $BASEDIR"/sql_bases"$DAY".tar.7z"

filesbackup.sh

#!/usr/local/bin/bash
# Путь со скриптами
BASEDIR="/path/to/backup/scripts/folder"
# Пароль на итоговый архив
SECRET="xxxxxxxxxxxxxxxxxxxxxxxxxxx"

# Подсчёт времени выполнения бэкапа
S=$(/bin/date +%s)

# Упаковка каталогов по списку, учитывая исключения, с сохранением прав (tar)
# и архивирование 7z, подробное описание параметров см. ниже
/usr/bin/tar -cf - --files-from $BASEDIR/tobackup.list \
--exclude-from=$BASEDIR/tonotbackup.list --absolute-paths --format=ustar | \
/usr/local/bin/7za a -aoa -y -si -t7z -m0=PPMd -mx9 \
-ms=on -mhe=on -p$SECRET $BASEDIR/files.tar.7z

# TAR
# -cf -			Упаковка с выводом результата в stdout
# --files-from		Путь к файлу со списком папок/файлов для архивации
# --exclude-from=	Путь к файлу со списком папок/файлов для исключения
# --absolute-paths	Сохранение полных путей в архиве
# --format=ustar	выбор формата Uniform Standard Tape ARchive
#			(http://en.wikipedia.org/wiki/Ustar#UStar_format)
# 7z
# 7za a -aoa -y		Добавление в архив с перезаписью, без подтверждения
# -si			Входящие данные берутся из stdin (поток данных из tar)
# -t7z -m0=PPMd -mx9	Формат 7z, максимальная степень сжатия, алгоритм PPMd
#			(лучший для текстовых данных, если сжимаются бинарные
#			данные, можно попробовать LZMA или LZMA2)
# -ms=on		Режим цельного архива (сильнее сжатие)
# -mhe=on		Шифровать заголовок, чтобы не было видно файлов без пароля
# -p			Пароль для шифрования данных архива

# Закачка на WebDAV диск, файл upload.sh описан далее
$BASEDIR/upload.sh $BASEDIR/files.tar.7z files.tar.7z

# Удаление архива
/bin/rm -f $BASEDIR/files.tar.7z

# Подсчёт и вывод времени выполнения бэкапа
S=$(($(/bin/date +%s)-S))
M=$((S/60))
printf "Files backed up in %02d min (%02d sec)\n" $M $S

upload.sh

#!/usr/local/bin/bash
/usr/local/bin/curl --user USER:PASS -T "$1" "https://webdav.yandex.ru/Backups/$2"
# USER:PASS		Данные для входа на Я.Диск
# -T "$1"		Закачка файла, указанного в 1 параметре при вызове скрипта
# Backups/$2		Папка Backups на удалённом диске и имя файла из 2 параметра

Также CURL поддерживает входной поток из stdin, так что возможно реализовать сжатие, шифрование и отправку всего бэкапа полностью “на лету”.

Комментарий (1)

Snawiit10 Фев 2013 в 20:04

Предложу чистить старые бэкапы вот этим: https://github.com/Snawoot/davclean

Оставить комментарий

Оповещать о новых комментариях по RSS