Скрипт резервного копирования для сайта

Для своих нужд держу на кроне скрипт для резервного копирования. Очень простой и примитивный, но для небольших сайтов на виртуальном сервере сойдет.

Приведу весь скрипт, он не очень большой:

#!/bin/bash

# Установим от куда и куда будем копировать данные
BACKUP=/var/www/backups
SITE=/var/www/mysite.ru

# Установим дату бэкапа и создадим соответствующую папку
daten=`date +%Y.%m.%d-%H`
mkdir $BACKUP/$daten

# Делаем дамп базы данных
mysqldump -u USER -pPASSWORD DATABASE | gzip > `date +$BACKUP/$daten/database.sql.gz`

# Перейдем в папку с сайтом, чтобы не прихватить лишнего в структуре
cd $SITE

# Создадим архив файлов
tar -zcvf $BACKUP/$daten/files.tar.gz . > /dev/null 2>&1

# Отправляем архивы по фтп, если это конечно требуется,
# но хранить бэкапы лучше удаленно
FTP="$(which ftp)"

### FTP ###
FTPD="/"
FTPU="ftpuser"
FTPP="ftppassword"
FTPS="ftphost"

### ftp ###
cd $BACKUP/$daten
DUMPFILE1=files.tar.gz
DUMPFILE2=database.sql.gz
$FTP -n $FTPS <<END_SCRIPT
quote USER $FTPU
quote PASS $FTPP
mkdir $daten
cd $daten
put $DUMPFILE1
put $DUMPFILE2
quit
END_SCRIPT

# Переходим в папку с бэкапами
cd $BACKUP

# и удаляем старые бэкапы
find ./ -type d -mtime +30 -exec rm -r '{}' \; 2> /dev/null

Теперь кладем скрипт в исполняемую папку, например /bin и ставим права на выполнение и в cron ставим задачу что то типо:

0 3 */2 * * /bin/наш_скрипт.sh > /dev/null 2>&1

И на выходе получаем backup каждые 2 дня в 3 часа ночи с отправкой по фтп. Если на виртуальном хосте и будут удаляться архивы старше 30 дней, то контроль на стороне фтп вам понадобится сделать самостоятельно.

Делайте бэкапы, они не раз выручат вас в сложной ситуации 🙂

 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *