Попытался найти в 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, введите логин и пароль. Найдите панель Дополнительно -> Планировщик заданий.
Зайдите в планировщик, нажмите кнопку Стандартный. Настройте два задания примерно так, как показано на скриншоте.
После настройки заданий можете указать свой адрес email, куда будет отправлено оповещение о результате завершения бекапа. Все, что было выведено в скрипте задания командой echo, попадет в текст письма - это удобно использовать для диагностических сообщений. Придет письмо наподобие следующего:
Просмотреть назначенные задания 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-скрипт. |
Комментарии
RSS лента комментариев этой записи