Очередной легкий backup bash-скрипт


Tagged , , , ,

Написал быстренько bash-скрипт по бэкапу директории + mysql на FTP сервер.
Отличительной особенностью является то, что скрипт не создает локальных файлов, а сразу через пайпы пишет на ftp. Бывает крайне полезно, когда места впритык.
Софт используется стандартный: tar, curl, gzip, mysqldump(опционально).

#!/bin/bash

FTP_USER=user
FTP_PASS=pass
FTP_HOST=192.168.0.1
FTP_PORT=21
FTP_PATH=

MYSQL_USER=root
MYSQL_PASS=pass
MYSQL_DB=$2

BACKUP_DIR=$1

stat $BACKUP_DIR > /dev/null 2>&1
ISEXISTS=$?

if [ $ISEXISTS != 0 ];
then
        echo "File or directory not found"
        exit 1
fi

# Backup files
tar czf - $BACKUP_DIR | curl -s -T - ftp://${FTP_USER}:${FTP_PASS}@${FTP_HOST}:${FTP_PORT}/${FTP_PATH}`basename $BACKUP_DIR`-`date +%Y.%m.%d_%H-%M`.tar.gz
echo "[`date +'%Y.%m.%d %H:%M'`] Directory was uploaded"

# Backup db
if [ -z "$MYSQL_DB" ];
then
        echo "[`date +'%Y.%m.%d %H:%M'`] DB not set"
        echo "#####"
        exit 0
fi

mysqldump -u${MYSQL_USER} -p${MYSQL_PASS} ${MYSQL_DB} | gzip - | curl -s -T - ftp://${FTP_USER}:${FTP_PASS}@${FTP_HOST}:${FTP_PORT}/${FTP_PATH}${MYSQL_DB}-`date +%Y.%m.%d_%H-%M`.sql.gz
echo "[`date +'%Y.%m.%d %H:%M'`] DB was uploaded"
echo "#####"

Все учетки специально были прописаны в скрипте, а не передаются в параметрах, чтобы можно было повесить этот скрипт в cron и не парится за раскрытие данных в процессах.
Скрипт крайне примитивен, не имеет никаких опций, запускается простой компандой:
$ ./backup.sh /var/www/mysite mysitedb
Т.е. название скрипта, полный путь до каталога, который резервируем и опционально база данных, если ее не указать, просто не будет сниматься дамп.

Скрипт никаких проверок и ротаций не делает. Только минимализм, только хардкор.
Проверялся мною на Debian 8, но думаю будет идти без проблем практически на любой unix-like системе.

Share:

No comments

RSS / trackback

Respond