+380 (44) 592-86-88

Узнайте больше
полезная информация

Синхронизация папок по ftp

 

Иногда возникает задача не просто в резервном копировании данных на локальный сервер, а и в передаче этих данных на удаленный сервер для более надежного хранения архивов. Причем преимущественно сервера работают с протоколом передачи данных 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 * * * /путь_к_файлу_скрипта 

 

Так просто и незатейливо решается на первый взгляд сложная задача.