Программирование HTML Joomla: организация автоматического бекапа сайта на виртуальном хостинге Агава Mon, July 24 2017  

Поделиться

нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.


Joomla: организация автоматического бекапа сайта на виртуальном хостинге Агава Печать
Добавил(а) microsin   

Попытался найти в CPanel agava.ru возможность настройки автоматического бекапа сайта. Хотелось получить примерно то же самое, что без проблем можно настроить на хостинге FastVPS (тариф OVZ-3) прямо через WEB-интерфейс. Нужно, чтобы каждую ночь создавался дамп базы MySQL и каждую неделю создавался полный архив сайта. Архивы должны автоматически выкачиваться на удаленный сервер, и затем стираться с виртуального хостинга.

Однако ничего не получилось. Пришлось написать в техподдержку.

Здравствуйте, уважаемая Agava.ru. Давно являюсь пользователем Вашего хостинга (Виртуальный Unix хостинг / Тариф Normal). Работает хостинг очень стабильно, когда последний раз обращался в техподдержку - уже забыл, за что Вас благодарю. Теперь о деле. В разделе помощи по CPanel упоминается возможность создания автоматического резервного копирования домашнего каталога / баз данных с передачей файлов/архивов бекапа по протоколам SCP и FTP. Однако когда попытался настроить такой бекап в своей панели управления [6] - у меня ничего не получилось. Все, что удалось найти - только запуск процесса бекапа вручную (полного бекапа всего домашнего каталога, либо по отдельности баз данных).

Очень бы хотелось иметь возможность простого создания автоматического бекапа, чтобы не заморачиваться с командной строкой и shell-скриптами. Именно такого, который описывается в справке по CPanel. Нужно, чтобы каждые сутки ночью автоматически создавался бекап баз, и каждую неделю - полный бекап домашнего каталога. Само собой, с автоматическим перемещением архивов на удаленный сервер (по протоколу SCP или FTP) - чтобы не занимать ограниченное пространство домашнего каталога.

Вопрос следующий: можно ли настроить что-то подобное (автоматический бекап) через CPanel Agava? Если можно, то как (дайте пожалуйста ссылку на инструкцию), а если нельзя - что посоветуете для простой организации такого бекапа?

Ответ пришел быстро:

Здравствуйте. На нашем хостинге нет возможности автоматического создания резервной копии с последующей ее загрузкой на другой сервер. Вы можете создать полную резервную копию учетной записи, добавив следующую команду в планировщик cron:

curl "https://cp44.agava.net:2083//frontend/ax/backup/dofullbackup.html" --user ПОЛЬЗОВАТЕЛЬ:ПАРОЛЬ --basic -k;

В результате в домашнем каталоге будет создан архив:

backup-ДАТА.ВРЕМЯ.ПОЛЬЗОВАТЕЛЬ.tgz

Далее Вы можете так же через cron загрузить резервную копию на другой сервер (удалив копию после успешной загрузки):

rsync -avH --progress --remove-source-files ~/backup-* ПОЛЬЗОВАТЕЛЬ@СЕРВЕР:~/

Для создания резервных копий баз данных можете использовать следующую команду:

mysqldump --opt -Q -uПОЛЬЗОВАТЕЛЬ -pПАРОЛЬ ИМЯ_БД > ИМЯ_ДАМПА.sql

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

[Шаг 1: создание скрипта для бекапа]

Создадим скрипты agava-backup-daily.sh и agava-backup-weekly.sh, и положим в папку myscrfolder (все названия файлов и папок здесь указаны только для примера). Создайте так же временную папку mybackupdir, где будет создаваться архив дампа MySQL. Будьте внимательны с назначением прав доступа в создаваемые папки, поскольку там хранится секретная информация (пароли доступа к серверу FTP и базам данных MySQL), права на чтение, изменение и запуск должны быть только у владельца. Вы уже наверное догадались, что один скрипт будет использоваться для ежедневного бекапа (он будет бекапить дампы баз MySQL), а другой для еженедельного бекапа (он будет делать архив полной копии домашнего каталога пользователя, который и содержит все папки и файлы сайта). К сожалению, мое хранилище бекапов не поддерживало ssh, поэтому от rsync пришлось отказаться, и передавать файлы архива по протоколу FTP.

[Содержимое agava-backup-daily.sh]

#!/bin/sh
BACKUPDIR=mybackupdir
ftpremotesrv=backupovz3.fastvps.ru
ftpremoteuser=ovzXXXXX
ftpremotepassw=passXXXXX
arcmysql=mysite.ru-sql-dump.tar
 
#########################################
echo "1. Создание дампа базы данных mysite_joodb1."
DB
=mysite_joodb1 DBLOGIN=mysqluserlogin DBPASSW=mysqluserpass /usr/local/bin/mysqldump --user=$DBLOGIN --password=$DBPASSW --default-character-set
=cp1251 $DB > $BACKUPDIR/dump_joodb1.txt   ######################################### # создание префикса для имени файла типа YYMMDD prefixdate=`eval date -j +%y%m%d`
echo "2. Генерация имени архива из даты: $prefixdate."
#########################################
echo "3. Создание архива $BACKUPDIR/$prefixdate$arcmysql."
tar -czf $BACKUPDIR/$prefixdate$arcmysql $BACKUPDIR/*.txt
rm $BACKUPDIR/*.txt
#########################################
echo "4. Выгрузка архива на FTP-сервер $ftpremotesrv."
ftp -in $ftpremotesrv<<_EOF_
user $ftpremoteuser $ftpremotepassw
bin
put $BACKUPDIR/$prefixdate$arcmysql remoteftpfolder/$prefixdate$arcmysql
quit
_EOF_
#########################################
echo "5. Очистка директории $BACKUPDIR."
rm $BACKUPDIR/*

Некоторые пояснения по ежедневному скрипту. Дамп базы данных MySQL делается с помощью утилиты mysqldump. Для подключения к MySQL нужны специальный логин DBLOGIN и пароль DBPASSW, они могут не совпадать с логином и паролем локального пользователя shell. Обратите также внимание на опцию --default-character-set, в ней задается кодировка символов, в которой будет создан дамп базы. Кодировка должна использоваться такая же, какая используется на Вашем сайте. Для автоматического именования архивов по дате  используется вычисляемая переменная prefixdate. Путь в нужный каталог/папку внешнего сервера ftp указывается через remoteftpfolder.

[Содержимое agava-backup-weekly.sh]

#!/bin/sh
agavauser=agavauserXXXXXX
agavapassw=agavapassXXXXXX
BACKUPDIR=mybackupdir
ftpremotesrv=backupovz3.fastvps.ru
ftpremoteuser=ovzXXXXX
ftpremotepassw=passXXXXX
arcmysql=mysite.ru-sql-dump.tar
archome=mysite.ru-homedir.tgz
 
#########################################
echo "1. Создание дампа базы данных mysite_joodb1."
DB=mysite_joodb1
DBLOGIN=mysqluserlogin
DBPASSW=mysqluserpass
/usr/local/bin/mysqldump --user=$DBLOGIN --password=$DBPASSW --default-character-set
=cp1251 $DB > $BACKUPDIR/dump_joodb1.txt
#########################################
# создание префикса для имени файла типа YYMMDD
prefixdate=`eval date -j +%y%m%d`
echo "2. Генерация имени архива из даты: $prefixdate."
#########################################
echo "3. Создание архива $BACKUPDIR/$prefixdate$arcmysql."
tar -czf $BACKUPDIR/$prefixdate$arcmysql $BACKUPDIR/*.txt
rm $BACKUPDIR/*.txt
#########################################
# запуск скрипта CPanel, который делает архив домашнего каталога сайта
echo "4. Создание архива всей домашней директории (запуск скрипта dofullbackup.html)."
/usr/local/bin/curl "https://cp44.agava.net:2083//frontend/ax/backup/dofullbackup.html"
--user $agavauser:$agavapassw --basic -k;
#########################################
echo "5. Выгрузка архивов на FTP-сервер $ftpremotesrv."
ftp -in $ftpremotesrv<<_EOF_
user $ftpremoteuser $ftpremotepassw
bin
put $BACKUPDIR/$prefixdate$arcmysql remoteftpfolder/$prefixdate$arcmysql
put *.tgz remoteftpfolder/$prefixdate$archome
quit
_EOF_
#########################################
echo "6. Очистка директории $BACKUPDIR и домашнего каталога."
rm $BACKUPDIR/*
rm *.tgz

Еженедельный скрипт отличается от ежедневного только дополнительным запуском команды curl, которая запускает скрипт бекапа CPanel. Проверить работу скриптов можно командами:

$ cd ~
$ ./myscrfolder/agava-backup-daily.sh
$ ./myscrfolder/agava-backup-weekly.sh

Еженедельный скрипт будет выполняться намного дольше, поскольку он будет делать архив всего домашнего каталога сайта. Время выполнения зависит от занятого дискового пространства файлами домашнего каталога. Учитывайте этот факт при планировании времени выполнения задания (см. Шаг 2).

После завершения архивирования файлы архивов будут выгружены на удаленный ftp-сервер. Вот пример завершения тестового запуска еженедельного скрипта, когда идет выгрузка архивов на удаленный сервер FTP:

Uploading files using ftp...
Connected to backupovz3.fastvps.ru
220 ProFTPD 1.3.1 Server (Debian) [::ffff:AA.BB.CC.DD]
331 Password required for ovzXXXXX
230 User ovzXXXXX logged in
Remote system type is UNIX.
Using binary mode to transfer files.
200 Type set to I
local: mybackupdir/120526mysite.ru-sql-dump.tar remote: remoteftpfolder/120526mysite.ru-sql-dump.tar
229 Entering Extended Passive Mode (|||2465|)
150 Opening BINARY mode data connection for remoteftpfolder/120526mysite.ru-sql-dump.tar
100% |***********************************************************************| 3317 KB 1.21 MB/s 00:00 ETA
226 Transfer complete
3396859 bytes sent in 00:02 (1.18 MB/s)
local: backup-2012.5.26-12.53.39.mysite.tgz remote: remoteftpfolder/120526mysite.ru-homedir.tgz
229 Entering Extended Passive Mode (|||37564|)
150 Opening BINARY mode data connection for remoteftpfolder/120526mysite.ru-homedir.tgz
100% |***********************************************************************| 452 MB 1.27 MB/s 00:00 ETA
226 Transfer complete
474456628 bytes sent in 05:54 (1.27 MB/s)
221 Goodbye.

[Шаг 2: добавление заданий в планировщик cron]

Для автоматического запуска заданий в нужное время нам понадобится планировщик cron [1]. Можно просмотреть/отредактировать задания вручную через ssh-консоль (командами crontab -l, crontab -e), как описано в [2]. Однако это удобнее и понятнее сделать через CPanel [6].

Откройте браузер, введите ссылку CPanel, введите логин и пароль. Найдите панель Дополнительно -> Планировщик заданий.

CPanel-advanced-panel-cron

Зайдите в планировщик, нажмите кнопку Стандартный. Настройте два задания примерно так, как показано на скриншоте.

CPanel-cron-tasks

После настройки заданий можете указать свой адрес email, куда будет отправлено оповещение о результате завершения бекапа. Все, что было выведено в скрипте задания командой echo, попадет в текст письма - это удобно использовать для диагностических сообщений. Придет письмо наподобие следующего:

agava-CPanel-cron-mail

Просмотреть назначенные задания cron можно также в командной строке ssh-шелла:

$ crontab -l
MAILTO="mymail@mail.ru";
15 0 * * * myscrfolder/agava-backup-daily.sh
30 0 * * 6 myscrfolder/agava-backup-weekly.sh

В этом примере мы назначили два задания, одно будет выполняться в 00:15 минут каждый день (agava-backup-daily.sh), а второе в 00:30 каждый 6-й день недели (в субботу).

После этого останется только следить за свободным местом на сервере FTP (куда заливаются бекапы), и периодически удалять старые архивы.

[Часто задаваемые вопросы, FAQ]

Q001. Создал файл скрипта, но запустить его не могу (ошибка Permission denied).
A001. Возможно, что у файла не заданы атрибуты, которые разрешат его выполнение. Воспользуйтесь утилитой chmod для просмотра/изменения прав доступа к файлу скрипта, либо файловым менеджером Midnight Commander (mc). У него в меню File -> Chmod можно посмотреть и изменить атрибуты файла. Например, на виртуальном хостинге Агава атрибуты могут быть 100744, что означает разрешить чтение, запись и выполнение для владельца файла, разрешить чтение для группы, и разрешить чтение для других пользователей. Здесь владелец - это человек, который создал файл скрипта (он зашел в shell под логином и паролем пользователя, от имени которого работает весь сайт на сервере). См. также [7].

[Ссылки]

1. FreeBSD: назначенные задания (cron, crontab).
2. Joomla: использование crontab для backup.
3. MySQL - как делать backup.
4. Пример использования ftp в скрипте для выгрузки.
5. Справка по rsync.
6. CPanel Агава.
7. Как сделать и запустить shell-скрипт

 

Комментарии  

 
0 #2 Виталий 28.01.2016 13:27
Да зачем так усложнять жизнь? Я нашел более краткий мануал cPanel: ошибка Permission denied при удалении файлов site:shneider-host.ru, сPanel - это не так сложно :sigh:
Цитировать
 
 
0 #1 Stas 06.02.2013 14:15
Очень полезная штука, если на хостинге не реализован автоматический бэкап. Правда заработало только после изменения в коде remoteftpfolder на $remoteftpfolde r , и prefixdate еще не пошел в таком виде, а так все прекрасно. Благодарю!
Цитировать
 

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


Защитный код
Обновить

Top of Page