Иногда возникает задача не просто в резервном копировании данных на локальный сервер, а и в передаче этих данных на удаленный сервер для более надежного хранения архивов. Причем преимущественно сервера работают с протоколом передачи данных ftp. Поэтому наиболее универсальный способ решения поставленной задачи является использование именно протокола ftp.
Исходные данные
Имеем веб-сервер на Linux с системой управления базами данных mysql. Задача — выполнять резервное копирование сайта, включая базы данных на удаленный сервер по ftp в 2 часа ночи каждый день.
Реализация
Для выполнения поставленной задачи будем использовать уже рассмотренный нами скрипт и простую, удобную программу ftpsync. Выкачиваем программу и копируем, ну например в /usr/local/bin/:
#wget http://download.clazzes.org/ftpsync/ftpsync-1.3.06-0.tar.bz2
Распакуем и скопируем файл скрипта ftpsync.pl в /usr/local/bin/. Синтаксис программы следующий:
ftpsync dir/ ftp://user:pass@host/remdir
Синхронизация локальной папки dir/ c удаленной папкой remdir ftp-сервера (если требуется синхронизировать корневой каталог ftp-сервера, вместо remdir ставим / — ftp://user:pass@host//).
ftpsync ftp://user:pass@host/remdir dir/
Синхронизация удаленной папки remdir ftp-сервера с локальной папкой dir/.
Доустановим необходимый пакет:
#apt-get install libwww-perl
Получим следующий скрипт для синхронизации:
#!/bin/bash
# Путь к папке с архивами для баз данных
backup_dir="/backup/infotech/bases"
#Путь к папке с архивами структуры сайта
backup_dir2="/backup/infotech/site"
#Шаблон для создаваемого архива с датой создания архива
backup_filename=infotech-`date +%Y-%m-%d`
#Полное имя архива
archive_filename=$backup_filename.tar.gz
#Срок хранения архивов
Backup_days=30
#Создаем дамп базы данных, используя пользователя с полными правами на базу данных
mysqldump -u пользователь_базы_данных -pпароль_пользователя_базы_данных infotech > $backup_dir/$backup_filename.sql
#Архивируем созданный дамп базы данных
tar -C $backup_dir -czf $backup_dir/$archive_filename $backup_dir/$backup_filename.sql
#Архивируем структуру сайта
tar -C $backup_dir2 -czf $backup_dir2/$archive_filename /путь_к_структуре_сайта/*
#Удаляем дамп базы
rm $backup_dir/$backup_filename.sql
#Находим и удаляем все архивы сроком создания более 30 дней
find $backup_dir/infotech-* -mtime +$Backup_days -exec rm -v {} \;
find $backup_dir2/infotech-* -mtime +$Backup_days -exec rm -v {} \;
#И наконец ftp-синхронизация:
/usr/local/bin/ftpsync.pl /backup/infotech/ ftp://user:pass@host/remdir
Выставляем обоим файлам право на выполнение для пользователя root и добавляем задачу в планировщик cron:
crontab -e
0 2 * * * /путь_к_файлу_скрипта
Так просто и незатейливо решается на первый взгляд сложная задача.
22 мая, 2013