Автоматический бэкап (резервное копирование) сайтов на свой Windows-компьютер по SSH

Как-то настроила себе автоматический бэкап сайтов через Яндекс.Диск. Правда сюда вроде не разместила, как это делается. Может быть, напишу потом.

Настроила данное решение на несколько своих сайтов. Но пришла к выводу, что данный путь меня не очень устраивает, в чем-то из-за ограничений хостеров на некоторые php-функции, в чем-то из-за ограничения размера Яндекс.Диск, и неудобства очистки корзины.

Пришла к выводу, что лучше всего всё скидывать себе на комп, благо, винтов у меня - терабайты, комп довольно неплохой, да и  практически не выключается. В дальнейшем, когда прикуплю NAS, перенастрою всё на него.

Итак, приступим.

Условия следующие: Есть много сайтов с хостингом linux+апач. У хостера есть планировщик Cron. Все сайты  php+mysql. Бэкап базы делается через SypexDumper автоматически, через крон хостера. На компе windows 7, хотя версия винды, думаю здесь роли не играет. Пример приведу для одного сайта.

Ну, поехали:

0. 🙂 Для начала  должен работать ssh у хостера. Проверим:

Берем программку putty и проверяем соединение. Это известный Windows ssh-клиент. Без труда найдете в интернете. Можете проверить соединенение, запустив такую строчку из консоли (putty.exe должен лежать там же, откуда запускаете строчку).

putty -v -ssh -P порт -pw "пароль" логин@домен.ru

Часто пароль на SSH и на вход в CPanel у хостера совпадает.

Как результат - черное окошко линукс-консоли с приглашением #:

Можно проверить, введя, например, ls (список директорий) или mc(запустив Midnight Commander).

1. Создать задачу для запуска бэкапов базы данных сайта в крон админ панели:
Выполняемая программа
0 1 * * 6 /usr/local/bin/php /путь_к_SypexDumper/index.php -j=наименование_задания_в_SypexDumper >/dev/null 2>&1
Здесь бэкап делается каждую субботу в 01:00. Вы можете установить время и периодичность так, как нужно Вам.

путь_к_SypexDumper - путь к директории на хостинге к корню программы SypexDumper.

наименование_задания_в_SypexDumper - задание, которое выполняется в SypexDumper. Там в нём есть кнопочка "Сохранить", там и задается название.

У меня еще настроен запуск крона для Drupal сайтов (этот пункт необязателен):
/usr/bin/wget -O - -q "http://ваш_сайт/cron.php?cron_key=крон_ключ_Вашего_сайта" >/dev/null 2>&1
поставила на 00:10

2. Закинуть скрипты del_old_db_backups.sh и backup_files.sh в папку $HOME/var/backups/ на хостинге. (можете положить куда сами хотите, но тогда в батничке ниже  тоже нужно менять путь.

текст del_old_db_backups.sh:

#!/bin/sh
#Удаляет файлы по маске, кроме стольки последних, сколько указанно в 3 параметре
#Проверяем количество входных параметров
if [ $# -lt 3 ]
then
 echo Something wrong with parameters
 exit
fi

path=$1 # Путь к удаляемым файлам
filemask=$2 # маска файлов
let keep=$3+1 # сколько файлов (бэкапов) надо оставлять
cd $path && ls -t -I $filemask | tail -n+$keep | xargs -I{} rm {}

текст backup_files.sh:

#!/bin/sh
#Проверяем количество входных параметров
#Первый параметр - Директория, которую архивируем. 
#Второй параметр - имя файла
#Третий параметр(необязательно) - директории, которые исключаем из архива
#передавать уже в готовом виде, например:
#--exclude "./start-directory/logs --exclude "./start-directory/tmp
#на exlude работает не везде, разбираться не стала, потому как не особо нужен.
if [ $# -lt 1 ]
then
 echo Something wrong with parameters
 exit
fi

path=$1 # Путь к архивируемым файлам(папка, которая будет архивироваться)
filename=$2 # имя фала для архивирования
exclude=$3 # исключить из архивирования

# архивируем все каталоги, кроме тех, которые указаны в $exclude
tar cvfz $filename $path $exclude

3.  Назначить этим скриптам права 755

4. Создаем папку для наших скриптов и putty. Например, пусть это будет D:\backup\.

В корень этой папки мы кладем скачанные файлы Putty, а именно:

plink.exe

pscp.exe

putty.exe

5. В папке D:\backup\ создаем папку для нашего скрипта бэкапов, например, scripts. Вы можете назвать её иначе, например по названию бэкапируемого сайта, ведь их может быть много.

6. Создаем файл D:\backup\scripts\dobackup.bat со следующим содержимым(заменяя пути на свои):

cd ..
rem Запускаю скрипт удаления старых бэкапов базы(Бэкапы делаются через CRON на сервере)...
rem Это значит что самые старые файлы, начинающиеся с маска_архивов_SypexDumper в папке путь_к_SypexDumper_бэкапам/backup/, кроме пяти самых свежих, будут удалены.
plink.exe -ssh -P порт логин@домен.ru -pw пароль sh $HOME/var/backups/del_old_db_backups.sh  путь_к_SypexDumper_бэкапам/backup/ маска_архивов_SypexDumper* 5
rem Запускаю скрипт бэкапа(скрипт архивирует все файлы сайта)...
set data=%Date:~6,4%.%Date:~3,2%.%Date:~0,2%
set filename=files_%data%.tar.gz 

rem Создаю архив
plink.exe -ssh -P порт логин@домен.ru -pw пароль sh $HOME/var/backups/backup_files.sh папка_которую_бэкапить %filename% --exclude=папка_которую_необходимо_исключить_из_архива 

rem заливаю сюда на комп...
pscp -v -P порт -pw пароль логин@домен.ru:%filename% папка_на_локальной_машине_в_которую_заливаем_бэкап

rem удаляю архив
plink.exe -ssh -P порт логин@домен.ru -pw пароль rm $HOME/%filename%

 

, где:
порт - порт соединения по ssh, по умолчанию - 22, но у Вашего хостера может отличаться;
пароль - пароль ssh;
логин@домен.ru - Ваш SSH логин и название домена(либо IP). Причем необязательно .ru;
папка_которую_бэкапить - папка, у Вашего хостера, которую будете бекапить;
папка_которую_необходимо_исключить_из_архива - ну само за себя говорит;
папка_на_локальной_машине_в_которую_заливаем_бэкап - тоже понятно;

7. Вешаем на своем компе, куда будут сливаться бэкапы, в планировщик файл dobackup.bat на время, которое чуть позже времени, указанного в пункте 1.
В планировщик обзательно добавить рабочую папку - ту, из которой запускается скрипт. Например, у Вас скрипт лежит на диске D:\backup\scripts\dobackup.bat.
Тогда рабочую папку указываем D:\backup\scripts.

 

Вот вроде бы и всё. Вопросы?

Рекомендовать в Социальных сетях:
 

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

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