Тотальный бэкап на 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, так что возможно реализовать сжатие, шифрование и отправку всего бэкапа полностью «на лету».
09 Ноя 2012 в
Администрирование
Предложу чистить старые бэкапы вот этим: https://github.com/Snawoot/davclean