Архив сайта, форума, баз данных - бэкап на Яндекс Диск
Клиентское и серверное программное обеспечение

Модератор: Группа Модераторов

  Архив сайта, форума, баз данных - бэкап на Яндекс Диск

Сообщение Serg » Пн дек 17, 2012 14:32

Изменить размер шрифта ↓ВернутьИзменить размер шрифта ↑
I. Что это ?

Часто возникает необходимость автоматически (в том числе по расписанию) создавать бэкапы файлов сайтов, форумов, баз данных и хранить их в сети или на локальном компьютере. После появления Гугл Диска и Яндекс Диска появилась возможность хранить архивы бэкапов на них.

Библиотека класса PHP class.b2yd.php предназначена для создания бэкапов сайтов и баз данных с выгрузкой на Яндекс Диск, ftp, отправкой по e-mail.

Автор: Serg (c) 2012

Лицензия: General Public License (LGPL)

Системные требования:
  • версия php не ниже 5.0.0 с поддержкой zlib, mysql, curl
  • сервер с cron (crontab) для запуска по расписанию и поддержкой cgi при отсутствии возможности запуска скриптов php по расписанию
  • остальные - в соответствии с требованиями используемых библиотек классов PHP
Благодарности:
  • Прототип
  • Прототип дампа mysql взят здесь
Спасибо авторам за предоставленные примеры !

Требуемые библиотеки:
  • pclzip.lib.php + исправление ошибок
  • class_webdav_client.php + патч + исправление ошибок
  • PHPMailer + исправление ошибок
  • class.aes256cbc.php
  • class.phpBB.php
Исправления ошибок и дополнения реализованы Serg .

II. Установка

Для хостингов с ограничениями по:
  • операциям ввода-вывода,
  • времени выполнения скрипта,
  • максимальному размеру файла,
  • и др.
см. пример masterhost.ru в следующей главе.

Библиотека поставляется в виде архива zip, все дополнительные скрипты включены, примеры и readme.txt в комплекте. Как устанавливать:
  1. Переписать содержимое каталогов, включая подкаталоги, в корень своего сайта (обычно /html или /www, в примере используется /html):
    root.b2yd -> /html/b2yd
    root.cgi-bin -> /html/cgi-bin
  2. Используя пример (example.class.b2yd.php) создать собственный скрипт, например, my.class.b2yd.php и переписать его в каталог /html/b2yd
  3. Изменить права (chmod):
    /html/b2yd/work (с вложенными подкаталогами и файлами) - 777
    /html/cgi-bin/b2yd.cgi - 755
    для скриптов PHP задать права в соответствии с требованиями хостинга - обычно 755
  4. Проверить работу своего скрипта, задав строку в браузере:
    Код: Выделить всё
    http://mysite.ru/b2yd/my.class.b2yd.php?debug=2&log=1
    где mysite.ru - Ваш сайт
  5. При отсутствии ошибок по результатам проверки в предыдущем пункте добавить строку в crontab, например:
    если поддерживается прямой вызов скриптов PHP:
    Код: Выделить всё
    0 2 * * 1,3,5 http://mysite.ru/cgi-bin/b2yd.cgi?http://mysite.ru/b2yd/my.class.b2yd.php?debug=0&log=1
    если не поддерживается прямой вызов скриптов PHP, воспользуйтесь wget:
    Код: Выделить всё
    0 2 * * 1,3,5 /usr/local/bin/wget -b -O /dev/null -T 36000 -t 1 "http://mysite.ru/cgi-bin/b2yd.cgi?http://mysite.ru/b2yd/my.class.b2yd.php?debug=0&log=1" > /dev/null
    или
    Код: Выделить всё
    0 2 * * 1,3,5 /usr/local/bin/wget -b -O /dev/null -T 36000 -t 1 "http://mysite.ru/b2yd/my.class.b2yd.php?debug=0&log=1" > /dev/null
    где:
    0 2 * * 1,3,5 - расписание для cron: в понедельник, среду и пятницу в 02:00
    mysite.ru - Ваш сайт
    /usr/local/bin/wget - путь к wget
III. Установка на хостинги с ограничениями (на примере masterhost.ru)

A) Проблемы:
  1. В .htaccess невозможно задать требуемые параметры.
    Использовать php_value запрещено, если в .htaccess такие директивы присутствуют, при попытке запуска скрипта Вы получите сообщение об ошибке !
    Ограничение можно обойти следующим образом:
    - Запускаем PuTTY, подключаемся, вводим логин и пароль.
    - Выполняем команды:
    Код: Выделить всё
    cp /usr/local/bin/php-cgi /home/uXXXXX/mydomain.ru/cgi-bin/php-cgi
    или (в зависимости от тарифного плана)
    Код: Выделить всё
    cp /usr/local/bin/php /home/uXXXXX/mydomain.ru/cgi-bin/php-cgi
    далее:
    Код: Выделить всё
    cp /usr/local/etc/php.ini /home/uXXXXX/mydomain.ru/cgi-bin/php-cgi.ini
    chmod 755 /home/uXXXXX/mydomain.ru/cgi-bin/php-cgi
    uXXXXX и mydomain.ru замените соответственно своим параметрам.
    Затем подключаем интерпретатор в .htaccess директивами:
    Код: Выделить всё
    Action php-script /cgi-bin/php-cgi
    AddHandler php-script .php
    После этого меняем нужные параметры в /cgi-bin/php.ini (пример прилагается - см. архив комплекта поставки).
  2. Перегрузка сервера дисковыми операциями.
    В журнале ошибок появляются записи вида:
    Код: Выделить всё
    IO limit exceeded (xx)
    Resource limit exceeded, access to mydomain.ru is temporarily denied
    Следует настроить параметры скрипта:
    Код: Выделить всё
    // Для хостингов, на которых может возникнуть перегрузка по дисковым операциям (IO limit exceeded)
    // Для masterhost.ru - 150mb/120s с 10-кратным запасом ~ 130kb/s
    // Максимум нагрузки в байтах (для masterhost.ru - 150 мегабайт за 2 минуты)
    $b2yd_load_max = (150 * 1024 * 1024) / 120 / 10;
    " / 10" в строке - чтобы занимать 10% от разрешенного. Однако, в результате скорость будет примерно 130 килобайт в секунду, и архивы размером в полгигабайта будут создаваться несколько часов.
    Обратите внимание: чем больше список каталогов для архивирования в одной операции, тем больше PclZip выполняет рааботы с диском. Это связано с алгоритмом добавления файлов в архив.
    Оптимально работать только с каталогами и не более одного на операцию.
  3. Тайм-аут выполнения скрипта.
    В журнале ошибок появляются записи вида:
    Код: Выделить всё
    Timeout waiting for output from CGI script /home/uXXXXX/mydomain.ru/cgi-bin/php-cgi
    (70007)The timeout specified has expired: ap_content_length_filter: apr_bucket_read() failed
    Тайм-аут составляет около 300 секунд. Затем сервер разрывает соединение с ошибкой.
    Это ограничение в настоящее время преодолено, кроме случая запуска из браузера на клиентской машине.
  4. Максимальный размер файла.
    При превышении допустимого размера файла скрипт "тихо умирает" без каких-либо сообщений в логах сервера.
    В этом случае надо использовать возможность создания списка файлов и архивов из нескольких частей (см. пример: example.list.b2yd.php).
    Так, для тарифов нижнего уровня на masterhot.ru стабильно работает 20МБ, можно без риска увеличить до 40-50МБ.
  5. Запуск php-скрипта по расписанию (cron).
    Необходимо добавить скрипт в crontab. Как это сделать - см. здесь.
    Запуск скрипта выполняем посредством wget. Пример строки crontab:
    Код: Выделить всё
    0 1 * * 1,4 /usr/local/bin/wget -b -O /dev/null -T 36000 -t 1 "http://mysite.ru/cgi-bin/myscript.php" > /dev/null
    В примере - запуск по понедельникам и четвергам в 01:00. Вместо mysite.ru и myscript.php следует подставить свои значения.
B) Установка:
  1. Переписать содержимое каталогов, включая подкаталоги, в корень своего сайта (обычно /www, в примере используется /www):
    root.b2yd -> /html/b2yd
    Если Вы не выполнили самостоятельно подключение интерпретатора, то можете попробовать использовать прилагаемый, копируйте:
    root.cgi-bin.masterhost.ru -> /html/cgi-bin
  2. Используя пример (example.class.b2yd.php) создать собственный скрипт, например, my.class.b2yd.php и переписать его в каталог /html/b2yd
  3. Изменить права (chmod):
    /www/b2yd/work (с вложенными подкаталогами и файлами) - 777
    /www/cgi-bin/php.cgi - 755
    /www/cgi-bin/php-cgi.cgi - 755
    для скриптов PHP задать права в соответствии с требованиями хостинга - обычно 755
  4. Проверить работу своего скрипта, задав строку в браузере:
    Код: Выделить всё
    http://mysite.ru/b2yd/my.class.b2yd.php?debug=2&log=1
  5. При отсутствии ошибок по результатам проверки в предыдущем пункте добавить строку в crontab, например:
    Код: Выделить всё
    0 2 * * 1,3,5 /usr/local/bin/wget -b -O /dev/null -T 36000 -t 1 "http://mysite.ru/cgi-bin/my.class.b2yd.php?debug=0&log=1" > /dev/null
    где:
    0 2 * * 1,3,5 - расписание для cron: в понедельник, среду и пятницу в 02:00
    mysite.ru - Ваш сайт
    /usr/local/bin/wget - путь к wget
    Пример в случае создания архива из нескольких частей:
    Код: Выделить всё
    0 2 * * 1,3,5 /usr/local/bin/wget -b -O /dev/null -T 36000 -t 1 "http://mysite.ru/cgi-bin/my.list.class.b2yd.php?debug=0&log=1" > /dev/null
    0 3-8,0-1 * * * /usr/local/bin/wget -b -O /dev/null -T 36000 -t 1 "http://mysite.ru/cgi-bin/my.list.class.b2yd.php?debug=0&log=1&list=1" > /dev/null
    где:
    0 2 * * 1,3,5 - расписание для cron: понедельник, среда, пятница в 2 часа 00 минут
    0 3-8,0-1 * * * - расписание для cron: ежедневно с 0 до 1 и с 3 до 8 часов в 00 минут

    IV. Аварийное прекращение работы скрипта (по требованию)

    Если Вы ошиблись при тестировании или скрипт слишком долго работает, достаточно переписать файл b2yd.break (см. root.b2yd/break) в подкаталог /work пути размещения b2yd.
    После остановки скрипта не забудьте удалить этот файл !

    V. Бонус для форумов phpBB3

    См. Bender.php и Bender2.php ))

    VI. Дополнительные сведения

    Как сказано выше, для настройки библиотеки требуется настроить каталог для хранения временных файлов, лога и др., см. $work_dir. По умолчанию временные файлы создаются в подкаталоге ./work, в нем необходимы права на запись (777). Каталог хранения временных файлов (если задан) не входит в путь для архивирования.

    В рабочем каталоге будет располагаться файл b2yd.log.txt - лог выполнения, если $log > 0.

    Если задан максимальный размер файла лога ($log_max_size), то:
    • первым создаётся файл b2yd.log.txt, если такой файл существует и превышает заданный размер - b2yd.log1.txt и т.д.,
    • по достижению нумерации 9 удаляются файлы логов: b2yd.log.txt, b2yd.log1.txt ... b2yd.log4.txt
    • затем происходит переименование b2yd.log5.txt -> b2yd.log.txt, b2yd.log6.txt -> b2yd.log1.txt ... b2yd.log9.txt -> b2yd.log4.txt и активным становится b2yd.log5.txt,
    • таким образом, всегда остаются как минимум 5 последних файлов логов.
    Права для скриптов - в соответствии с требованиями хостинга (обычно 755).

    Скрипт удобнее всего размещать в папке /b2yd. Обычно в www или html, то есть там, где хранятся файлы сайта.

    Формат имени архивного файла на Яндекс Диске:
    <префикс><тип><дата и время>[_hash_<hash>].zip
    где:
    <имя> - параметр backup_name, если опущен - то "<n>", где n - номер архива в массиве бэкапов, считаетя с 1
    <тип> - "_files" для бэкапа файлов, "_mysql_<имя базы данных>" для баз данных MySQL
    <дата и время> - "_" и затем дата и время в формате функции data "YmdHis" (можно изменить);
    <hash> - если разрешено добавление hash к имени файла (суффикс, см. $add_hash), то:
    • если $add_hash равен 'md5' (умолчание) - md5 файла (если удалось получить) в формате _md5_<строка md5>
    • если $add_hash равен 'sha1' - sha1 файла (если удалось получить) в формате _sha1_<строка sha1>
    Если файл зашифрован, к нему добавляется расширение .enc; зашифрованный файл можно расшифровать утилитой openssl (см. http://openssl.org , для Windows дистрибутив можно найти здесь, а описание ключей, например, здесь). Пример командной строки (как расшифровать):
    Код: Выделить всё
    openssl enc -d -aes-256-cbc -salt  -pass pass:mypass -in myfile.zip.enc -out myfile.zip
    где вместо 'mypass' подставьте свой пароль, вместо 'myfile' - имя своего файла. Для расшифровки нескольких файлов под Windows, если пароли для всех файлов одинаковые, удобно сделать командный файл (пример):
    Код: Выделить всё
    @echo off
    for %%i in (*.zip.enc) do openssl enc -d -aes-256-cbc -salt -pass pass:mypass -in %%i -out %%~ni
    где ~ni означает, что надо использовать имя файла без расширения (то есть без последнего .enc).
    Под unix-подобной ОС, полагаю, сделать подобное никому не составит труда))

    Не рекомендуется включать много файлов или каталогов в один архив, используя $backup_dir с массивом из многих элементов, это может вызвать большую нагрузку на сервер ! Лучше создайте много маленьких архивов, процесс архивации пойдет значительно быстрее и будет требовать меньше дисковых операций (это особенности реализации PclZip). Оптимальный вариант - по одному каталоу в архиве. Рекомендуется располагать операции с файлами (например, '../*.*') первыми, если их объем меньше объема содержимого каталогов, включаемых в архив.

    Если скрипт завершается по превышению максимально допустимого времени выполнения, то попробуйте:
    • Измените max_execution_time в php.ini, если есть доступ, иначе
    • Если используется apache, создайте .htaccess в каталоге, где располагается скрипт, с таким содержимым (или добавьте, если файл существует)
      Код: Выделить всё
      php_value max_execution_time "36000"
      php_value upload_max_filesize "64M"
      php_value post_max_size "64M"
      php_value memory_limit "-1"
      Собственно, нужен только max_execution_time, остальное - для ускорения работы.
    VII. Типовой пример (examlpe.class.b2yd.php)

    Код: Выделить всё
    <?php
    //
    // [email protected] : Создание архива сайта и баз данных с выгрузкой на Яндекс Диск.
    //
    // class.b2yd.php v.2.1.0
    // Пример
    // crontab: 30 00 * * 2,5 /usr/local/bin/wget -b -O /dev/null -T 3600 -t 1 'http://mysite.ru/cgi-bin/mysite.class.b2yd.php' > /dev/null
    // Расписание: по вторникам и пятницам в 00:30

    // Класс b2yd
    require_once('class.b2yd.php');
    $b2yd = new b2yd();

    // Рабочий каталог (для временых файлов, лога и файла прекращения выполнения) без слэша в конце
    // Если задан, то этот каталог всегда исключается из файловых архивов.
    $b2yd->work_dir = './work';                     // Рабочий каталог (например, './work', требуются права на запись - 777)

    // Отладочная информация (глобальная переменная)
    $b2yd->debug = 2;                           // 0 - нет, > 0 - уровень отладки (обычно 1)
    $b2yd->log = 1;                              // 0 - нет, иначе вести лог в текущем каталоге в файле $work_dir/b2yd.log.txt (требуются права на запись - 777)
    $b2yd->log_max_size = 256 * 1024;   // 0 - не учитывать, иначе максимальный размер файла лога, после которого переходим на следующий

    // Поправка для времени сервера (не все указали зону UTC+4)
    $b2yd->timeaddh = 0;                        // 0 - нет, иначе, например, плюс 1 час

    // Время выполнения скриптов
    $b2yd->timeout = 36000;                        // 10 часов

    // Для хостингов, на которых может возникнуть перегрузка по дисковым операциям (IO limit exceeded)
    $b2yd->load_max = 0;                        // Максимум нагрузки байт/сек (для masterhost.ru - 150 мегабайт за 2 минуты)
    // Для masterhost.ru - 150mb/120s с 10-кратным запасом ~ 130kb/s
    //$b2yd->load_max = (150 * 1024 * 1024) / 120 / 10;   // Максимум нагрузки в байтах (для masterhost.ru - 150 мегабайт за 2 минуты)

    // Параметры запуска
    if($b2yd->request_var('debug',-1)    >= 0) $b2yd->debug    = $b2yd->request_var('debug',-1);
    if($b2yd->request_var('log',-1)      >= 0) $b2yd->log      = $b2yd->request_var('log',-1);
    if($b2yd->request_var('timeaddh',-1) >= 0) $b2yd->timeaddh = $b2yd->request_var('timeaddh',-1);
    if($b2yd->request_var('timeout',-1)  >= 0) $b2yd->timeout  = $b2yd->request_var('timeout',-1);
    if($b2yd->request_var('load_max',-1) >= 0) $b2yd->load_max = $b2yd->request_var('load_max',-1);

    // Работаем
    $b2yd->job(
          // Хранилища
          array(
             // Яндекс Диск
             array(
                // Логин
                'yandex_login' => 'mylogin',
                // Если задан массив логинов - хранилища выбираются последовательно для каждого нового бэкапа,
                // что позволяет избавиться от ограничений размера Яндекс Диска, подключив несколько штук
                //'yandex_login' => array('mylogin', 'mylogin2', 'mylogin3', 'mylogin4', 'mylogin5'),
                // Пароль
                'yandex_pass' => 'mypass',
                // Если задан массив логинов и пароли разные - следует задать аналогичный по размеру массив паролей (см. ниже),
                // если пароль одинаковый для всех логинов, задать его один раз (как в примере выше)
                //'yandex_pass' => array('mypass', 'mypass2', 'mypass3', 'mypass4', 'mypass5'),
                // Папка на Яндекс Диске не выше 1 уровня (если не существует - создается, например: /test)
                'yandex_dir' => '/BackUps.mysite.ru',
                // Сколько предыдущих архивов с таким префиксом имени хранить (0 - без ограничений, 1 - хранится 2 архива: предыдущий и текущий)
                // Предыдущие архивы удаляются только если $yandex_nfiles имет ненулевое значение
                'yandex_nfiles' => 14,
                // Сколько предыдущих архивов хранить, если нет места на диске (0 - опция отключена)
                // В случае отсутсвия места на диске предыдущие архивы удаляются только если $yandex_nsfiles имет ненулевое значение
                'yandex_nsfiles' => 7,
                ),
             ),
          // Бэкапы
          array(
             // Бэкап файлов
             array(
                // Относительный путь к архивируемым файлам с вложенными подкаталогами (если скрипт находится, например, в /html/b2yd то для /html/forum указываем ../forum)
                // Могут использоваться маски. Может задаваться массив.
                'backup_dir' => array('../forum', '../site'),
                // Пропускаемые файлы и каталоги (массив) для любого $backup_dir и $bacup_nosub, путь задается без их учета
                'backup_skip' => array('forum/cache/*.php'),
                // Имя бэкапа
                'backup_name' => 'www_full',
                ),
             // Бэкап баз данных
             array(
                // Имя хоста
                'backup_db_host' => 'localhost',
                // Имя базы данных
                'backup_db_name' => 'db_mysite1',
                // Имя пользователя
                'backup_db_user' => 'mysite1',
                // Пароль пользователя
                'backup_db_pass' => 'pass1',
                // Имя бэкапа
                'backup_name' => 'www_phpbb',
                // Шифровать файл архива (если задан), алгоритм aes-256-cbc + salt
                'backup_enc_alg' => 'aes256cbc',
                // Пароль на зашифрованный файл архива
                'backup_enc_pass' => 'mypass',
                ),
             array(
                // Имя хоста
                'backup_db_host' => 'localhost',
                // Имя базы данных
                'backup_db_name' => 'db_mysite2',
                // Имя пользователя
                'backup_db_user' => 'mysite2',
                // Пароль пользователя
                'backup_db_pass' => 'pass2',
                // Имя бэкапа
                'backup_name' => 'www_drupal',
                ),
             ),
          // Уведомления
          array(
             // email
             array (
                // Если параметры с префиксом email_smtp задан - отправка через указанный smtp сервер.
                // Иначе (параметры smtp закомментированы или отсутствуют) - отправка с использованием транспорта mail - см. функция PHP mail().
                // Для masterhost.ru следует использовать mail.
                // Сервер smtp для отправки почты (без префиксов "http://" и завершающего "/", можно указать два сервера - через ";")
                'email_smtp_server' => 'smtp.yandex.ru',
                // Порт сервера smtp (по умолчанию 25)
                //'email_smtp_port' => 25,
                // Аутентификация smtp (параметр опущен или 0 - не нужна, иначе - нужна)
                'email_smtp_auth' => 1,
                // Шифрование (параметр опущен или пустой - нет, иначе можно задать 'tls' или 'ssl')
                //'email_smtp_secure' => '',
                // Логин
                'email_smtp_login' => 'b2yd_myservice',
                // Пароль
                'email_smtp_pass' => 'b2yd_mypass',
                // E-mail отправителя (если опущен или пустой - '[email protected]')
                'email_from' => '[email protected]',
                // Имя отправителя (если опущено или пустое - b2yd)
                'email_fromname' => 'myname',
                // Адрес получателей, массив
                'email_to' => array('[email protected]', '[email protected]'),
                // Адрес ответа (если опущен или пустой - данные берутся из $email_from)
                'email_replyto' => '[email protected]',
                // Адрес копии (если опущен или пустой - нет)
                //'email_cc' => '[email protected]',
                // Адрес скрытой копии (если опущен или пустой - нет)
                //'email_bcc' => '[email protected]',
                // Уведомлять не только по завершению, но и при старте (параметр опущен или нулевой - нет, иначе - да)
                // Это нужно для получения информации о запуске, если есть вероятность останова выполнения скрипта сервером или из-за фатальных ошибок
                'email_onstart' => 1,
                ),
             // phpbb3
             array (
                // URL форума phpbb3 (с префиксом "http://" и без завершающего "/")
                'phpbb3_server' => 'http://mysite.ru/forum',
                // Логин на форуме (бот-пользователь должен быть заранее создан)
                'phpbb3_login' => 'b2yd bot',
                // Пароль
                'phpbb3_pass' => '123456',
                // Номер форума (бот-пользователь должен иметь права на размещение сообщений в этом форуме)
                'phpbb3_forum' => 111,
                // Номер темы (бот-пользователь должен иметь права на размещение сообщений в этой теме)
                'phpbb3_topic' => 222,
                // Тема сообщения (если опущена, используется по умолчанию, обычно <Re: ><тема предыдущего сообщения>)
                'phpbb3_subject' => 'mysite.ru',
                // Уведомлять не только по завершению, но и при старте (параметр опущен или нулевой - нет, иначе - да)
                // Это нужно для получения информации о запуске, если есть вероятность останова выполнения скрипта сервером или из-за фатальных ошибок
                //'phpbb3_onstart' => 1,
                ),
             )
       );

    $b2yd->job(
          // Хранилища
          array(
             // Яндекс Диск
             array(
                // Логин
                'yandex_login' => 'mylogin',
                // Пароль
                'yandex_pass' => 'mypass',
                // Папка на Яндекс Диске не выше 1 уровня (если не существует - создается, например: /test)
                'yandex_dir' => '/BackUps.mysite2.ru',
                // Сколько предыдущих архивов с таким префиксом имени хранить (0 - без ограничений, 1 - хранится 2 архива: предыдущий и текущий)
                // Предыдущие архивы удаляются только если $yandex_nfiles имет ненулевое значение
                'yandex_nfiles' => 10,
                // Сколько предыдущих архивов хранить, если нет места на диске (0 - опция отключена)
                // В случае отсутсвия места на диске предыдущие архивы удаляются только если $yandex_nsfiles имет ненулевое значение
                'yandex_nsfiles' => 5,
                ),
             // ftp
             array(
                // Сервер (без префиксов "ftp://", "ftp." и завершающего "/")
                'ftp_server' => 'myftp.ru',
                // Порт (параметр может быть опущен)
                //'ftp_port' => 21,
                // Пассивные режим (если задано любое непустое и ненулевое значение, если параметр опущен или иное знчение - то активный режим)
                'ftp_passive' => 1,
                // Тайм-аут (параметр может быть опущен, тогда принимается 90 сек)
                //'ftp_timeout' => 1000,
                // Права доступа (восьмеричное значение, параметр может быть опущен)
                //'ftp_chmod' => 0777,
                // Логин
                'ftp_login' => 'myftplogin',
                // Пароль
                'ftp_pass' => 'myftppass',
                // Папка на ftp-сервере (например, "/dir1/dir2"), если параметр опущен - корневая
                'ftp_dir' => '/backups',
                // Сколько предыдщих архивов с таким префиксом имени хранить (0 - без ограничений, 1 - хранится 2 архива: предыдущий и текущий)
                // Предыдущие архивы удаляются только если $ftp_nfiles имет ненулевое значение
                'ftp_nfiles' => 5,
                ),
             // email
             array (
                // Если параметры с префиксом email_smtp задан - отправка через указанный smtp сервер.
                // Иначе (параметры smtp закомментированы или отсутствуют) - отправка с использованием транспорта mail - см. функция PHP mail().
                // Для masterhost.ru следует использовать mail.
                // Сервер smtp для отправки почты (без префиксов "http://" и завершающего "/", можно указать два сервера - через ";")
                'email_smtp_server' => 'smtp.yandex.ru',
                // Порт сервера smtp (по умолчанию 25)
                //'email_smtp_port' => 25,
                // Аутентификация smtp (параметр опущен или 0 - не нужна, иначе - нужна)
                'email_smtp_auth' => 1,
                // Шифрование (параметр опущен или пустой - нет, иначе можно задать 'tls' или 'ssl')
                //'email_smtp_secure' => '',
                // Логин
                'email_smtp_login' => 'b2yd_myservice',
                // Пароль
                'email_smtp_pass' => 'b2yd_mypass',
                // E-mail отправителя (если опущен или пустой - '[email protected]')
                'email_from' => '[email protected]',
                // Имя отправителя (если опущено или пустое - b2yd)
                'email_fromname' => 'myname',
                // Адрес получателей, массив
                'email_to' => array('[email protected]', '[email protected]', '[email protected]'),
                // Адрес ответа (если опущен или пустой - данные берутся из $email_from)
                'email_replyto' => '[email protected]',
                // Адрес копии (если опущен или пустой - нет)
                //'email_cc' => '[email protected]',
                // Адрес скрытой копии (если опущен или пустой - нет)
                //'email_bcc' => '[email protected]',
                ),
             ),
          // Бэкапы
          array(
             // Бэкап файлов
             array(
                // Относительный путь к архивируемым файлам
                'backup_dir' => '../forum',
                // Пропускаемые файлы и каталоги (массив) без учета $backup_dir
                'backup_skip' => array('*'.'/cache/'.'*.php'),
                // Имя бэкапа
                'backup_name' => 'www_phpbb3',
                ),
             // Бэкап баз данных
             array(
                // Имя хоста
                'backup_db_host' => 'localhost',
                // Имя базы данных
                'backup_db_name' => 'db_mysite1',
                // Имя пользователя
                'backup_db_user' => 'mysite1',
                // Пароль пользователя
                'backup_db_pass' => 'pass1',
                // Имя бэкапа
                'backup_name' => 'www_phpbb3',
                ),
             )
       );

    ?>

    VIII. Типовой пример работы с создаваемым списком (examlpe.class.b2yd.php)

    Код: Выделить всё
    <?php
    //
    // [email protected] : Создание архива сайта и баз данных с выгрузкой на Яндекс Диск.
    //
    // class.b2yd.php v.2.1.0
    // Пример
    // Создание списков
    // crontab: 30 00 * * 2,5 /usr/local/bin/wget -b -O /dev/null -T 3600 -t 1 'http://mysite.ru/cgi-bin/mysite.list.class.b2yd.php' > /dev/null
    // Расписание: по вторникам и пятницам в 00:30
    // Обработка списков
    // crontab: 30 1-23 * * * /usr/local/bin/wget -b -O /dev/null -T 3600 -t 1 'http://mysite.ru/cgi-bin/mysite.list.class.b2yd.php?list=1' > /dev/null
    // Расписание: ежедневно начиная с 01:30 наждый час

    // Класс b2yd
    require_once('class.b2yd.php');
    $b2yd = new b2yd();

    // Рабочий каталог (для временых файлов, лога и файла прекращения выполнения) без слэша в конце
    // Если задан, то этот каталог всегда исключается из файловых архивов.
    $b2yd->work_dir = './work';                     // Рабочий каталог (например, './work', требуются права на запись - 777)

    // Отладочная информация (глобальная переменная)
    $b2yd->debug = 2;                           // 0 - нет, > 0 - уровень отладки (обычно 1)
    $b2yd->log = 1;                              // 0 - нет, иначе вести лог в текущем каталоге в файле $work_dir/b2yd.log.txt (требуются права на запись - 777)

    // Поправка для времени сервера (не все указали зону UTC+4)
    $b2yd->timeaddh = 0;                        // 0 - нет, иначе, например, плюс 1 час

    // Время выполнения скриптов
    $b2yd->timeout = 3600;                        // 1 час

    // Для хостингов, на которых может возникнуть перегрузка по дисковым операциям (IO limit exceeded)
    $b2yd->load_max = 0;                        // Максимум нагрузки байт/сек (для masterhost.ru - 150 мегабайт за 2 минуты)
    // Для masterhost.ru - 150mb/120s с 10-кратным запасом ~ 130kb/s
    //$b2yd->load_max = (150 * 1024 * 1024) / 120 / 10;   // Максимум нагрузки в байтах (для masterhost.ru - 150 мегабайт за 2 минуты)

    // Параметры запуска
    if($b2yd->request_var('debug',-1)    >= 0) $b2yd->debug    = $b2yd->request_var('debug',-1);
    if($b2yd->request_var('log',-1)      >= 0) $b2yd->log      = $b2yd->request_var('log',-1);
    if($b2yd->request_var('timeaddh',-1) >= 0) $b2yd->timeaddh = $b2yd->request_var('timeaddh',-1);
    if($b2yd->request_var('timeout',-1)  >= 0) $b2yd->timeout  = $b2yd->request_var('timeout',-1);
    if($b2yd->request_var('load_max',-1) >= 0) $b2yd->load_max = $b2yd->request_var('load_max',-1);

    // Список ?
    $list = $b2yd->request_var('list',0);
    $max = $b2yd->request_var('max',20 * 1024 * 1024);

    // Параметры операций - пример для сайта + форума на движке phpbb3
    $storage =
          // Хранилища
          array(
                // Ханилище - Яндекс Диск
                array(
                   // Логин
                   'yandex_login' => 'mylogin',
                   // Если задан массив логинов - хранилища выбираются последовательно для каждого нового бэкапа,
                   // что позволяет избавиться от ограничений размера Яндекс Диска, подключив несколько штук
                   //'yandex_login' => array('mylogin', 'mylogin2', 'mylogin3', 'mylogin4', 'mylogin5'),
                   // Пароль
                   'yandex_pass' => 'mypass',
                   // Если задан массив логинов и пароли разные - следует задать аналогичный по размеру массив паролей (см. ниже),
                   // если пароль одинаковый для всех логинов, задать его один раз (как в примере выше)
                   //'yandex_pass' => array('mypass', 'mypass2', 'mypass3', 'mypass4', 'mypass5'),
                   // Папка на Яндекс Диске не выше 1 уровня (если не существует - создается, например: /test)
                   'yandex_dir' => '/BackUps.mysite.ru',
                   // Сколько предыдущих архивов с таким префиксом имени хранить (0 - без ограничений, 1 - хранится 2 архива: предыдущий и текущий)
                   // Предыдущие архивы удаляются только если $yandex_nfiles имет ненулевое значение
                   'yandex_nfiles' => 14,
                   // Сколько предыдущих архивов хранить, если нет места на диске (0 - опция отключена)
                   // В случае отсутсвия места на диске предыдущие архивы удаляются только если $yandex_nsfiles имет ненулевое значение
                   'yandex_nsfiles' => 7,
                   )
             );
    $backup =
          // Бэкапы
          array(
                // Бэкап баз данных
             $list ? '' :
                array(
                   // Имя хоста
                   'backup_db_host' => 'localhost',
                   // Имя базы данных
                   'backup_db_name' => 'db_mysite1',
                   // Имя пользователя
                   'backup_db_user' => 'mysite1',
                   // Пароль пользователя
                   'backup_db_pass' => 'pass1',
                   // Имя бэкапа
                   'backup_name' => 'www_phpbb',
                   ),
             $list ? '' :
                array(
                   // Имя хоста
                   'backup_db_host' => 'localhost',
                   // Имя базы данных
                   'backup_db_name' => 'db_mysite2',
                   // Имя пользователя
                   'backup_db_user' => 'mysite2',
                   // Пароль пользователя
                   'backup_db_pass' => 'pass2',
                   // Имя бэкапа
                   'backup_name' => 'www_drupal',
                   ),
                // Бэкап файлов
             $list ? '' : array(
                   // Относительный путь к архивируемым файлам с вложенными подкаталогами (если скрипт находится, например, в /html/b2yd то для /html/forum указываем ../forum)
                   // Могут использоваться маски. Может задаваться массив.
                   'backup_dir' => array('../*.*', '../site'),
                   // Пропускаемые файлы и каталоги (массив) без учета $backup_dir
                   //'backup_skip' => array(),
                   // Имя бэкапа
                   'backup_name' => 'www_root_and_site',
                   // Создать списки файлов вместо бэкапа (если задан и нулевой) или обработать очередной фрагмент списка (если задан и ненулевой)
                   //'backup_list' => $list,
                   // Максимальный размер несжатых файлов для архива файлов в одном списке (по умолчанию 100 МБ)
                   //'backup_max' => $max,
                ),
             $list ? '' : array(
                   // Относительный путь к архивируемым файлам с вложенными подкаталогами (если скрипт находится, например, в /html/b2yd то для /html/forum указываем ../forum)
                   // Могут использоваться маски. Может задаваться массив.
                   'backup_dir' => array('../forum'),
                   // Пропускаемые файлы и каталоги (массив) без учета $backup_dir
                   'backup_skip' => array('*/forum/files/*', '*/forum/images/avatars/upload/*', '*/forum/cache/*.php',  '*/forum/store/*.gz'),
                   // Имя бэкапа
                   'backup_name' => 'www_forum',
                   // Создать списки файлов вместо бэкапа (если задан и нулевой) или обработать очередной фрагмент списка (если задан и ненулевой)
                   //'backup_list' => $list,
                   // Максимальный размер несжатых файлов для архива файлов в одном списке (по умолчанию 100 МБ)
                   //'backup_max' => $max,
                ),
                // Бэкап файлов по списку (аватарки форума)
                array(
                   // Относительный путь к архивируемым файлам с вложенными подкаталогами (если скрипт находится, например, в /html/b2yd то для /html/forum указываем ../forum)
                   // Могут использоваться маски. Может задаваться массив.
                   'backup_dir' => '../forum/images/avatars/upload',
                   // Пропускаемые файлы и каталоги (массив) для любого $backup_dir и $bacup_nosub, путь задается без их учета
                   //'backup_skip' => array(),
                   // Имя бэкапа
                   'backup_name' => 'www_forum_images_avatars_upload',
                   // Создать списки файлов вместо бэкапа (если задан и нулевой) или обработать очередной фрагмент списка (если задан и ненулевой)
                   'backup_list' => $list,
                   // Максимальный размер несжатых файлов для архива файлов в одном списке (по умолчанию 100 МБ)
                   'backup_max' => $max,
                   ),
                // Бэкап файлов по списку (аттачи форума)
                array(
                   // Относительный путь к архивируемым файлам с вложенными подкаталогами (если скрипт находится, например, в /html/b2yd то для /html/forum указываем ../forum)
                   // Могут использоваться маски. Может задаваться массив.
                   'backup_dir' => '../forum/files',
                   // Пропускаемые файлы и каталоги (массив) для любого $backup_dir и $bacup_nosub, путь задается без их учета
                   //'backup_skip' => array(),
                   // Имя бэкапа
                   'backup_name' => 'www_forum_files',
                   // Создать списки файлов вместо бэкапа (если задан и нулевой) или обработать очередной фрагмент списка (если задан и ненулевой)
                   'backup_list' => $list,
                   // Максимальный размер несжатых файлов для архива файлов в одном списке (по умолчанию 100 МБ)
                   'backup_max' => $max,
                   ),
             );
    $notice =
          // Уведомления
          array(
                // email
                array (
                   // Е 30 00 * * 2,5 /usr/local/bin/wget -b -O /dev/null -T 3600 -t 1 'httpсли параметры с префиксом email_smtp задан - отправка через указанный smtp сервер.
                   // Иначе (параметры smtp закомментированы или отсутствуют) - отправка с использованием транспорта mail - см. функция PHP mail().
                   // Для masterhost.ru следует использовать mail.
                   // Сервер smtp для отправки почты (без префиксов "http://" и завершающего "/", можно указать два сервера - через ";")
                   'email_smtp_server' => 'smtp.yandex.ru',
                   // Порт сервера smtp (по умолчанию 25)
                   //'email_smtp_port' => 25,
                   // Аутентификация smtp (параметр опущен или 0 - не нужна, иначе - нужна)
                   'email_smtp_auth' => 1,
                   // Шифрование (параметр опущен или пустой - нет, иначе можно задать 'tls' или 'ssl')
                   //'email_smtp_secure' => '',
                   // Логин
                   'email_smtp_login' => 'b2yd_myservice',
                   // Пароль
                   'email_smtp_pass' => 'b2yd_mypass',
                   // E-mail отправителя (если опущен или пустой - '[email protected]')
                   'email_from' => '[email protected]',
                   // Имя отправителя (если опущено или пустое - b2yd)
                   'email_fromname' => 'myname',
                   // Адрес получателей, массив
                   'email_to' => array('[email protected]', '[email protected]'),
                   // Адрес ответа (если опущен или пустой - данные берутся из $email_from)
                   'email_replyto' => '[email protected]',
                   // Адрес копии (если опущен или пустой - нет)
                   //'email_cc' => '[email protected]',
                   // Адрес скрытой копии (если опущен или пустой - нет)
                   //'email_bcc' => '[email protected]',
                   // Уведомлять не только по завершению, но и при старте (параметр опущен или нулевой - нет, иначе - да)
                   // Это нужно для получения информации о запуске, если есть вероятность останова выполнения скрипта сервером или из-за фатальных ошибок
                   'email_onstart' => 1,
                   ),
                // phpbb3
                array (
                   // URL форума phpbb3 (с префиксом "http://" и без завершающего "/")
                   'phpbb3_server' => 'http://mysite.ru/forum',
                   // Логин на форуме (бот-пользователь должен быть заранее создан)
                   'phpbb3_login' => 'b2yd bot',
                   // Пароль
                   'phpbb3_pass' => '123456',
                   // Номер форума (бот-пользователь должен иметь права на размещение сообщений в этом форуме)
                   'phpbb3_forum' => 111,
                   // Номер темы (бот-пользователь должен иметь права на размещение сообщений в этой теме)
                   'phpbb3_topic' => 222,
                   // Тема сообщения (если опущена, используется по умолчанию, обычно <Re: ><тема предыдущего сообщения>)
                   'phpbb3_subject' => 'mysite.ru',
                   // Уведомлять не только по завершению, но и при старте (параметр опущен или нулевой - нет, иначе - да)
                   // Это нужно для получения информации о запуске, если есть вероятность останова выполнения скрипта сервером или из-за фатальных ошибок
                   //'phpbb3_onstart' => 1,
                   ),
             );

    // Работаем
    $b2yd->job(
          // Хранилища
          $storage,
          // Бэкапы
          $backup,
          // Уведомления
          $notice
       );

    ?>

    IX. Типовой пример уведомления (по e-mail или на форуме phpBB3)

    См. примеры в этой теме форума. Текст уведомлений разных типов идентичен. При необходимости получения SMS по выполнению бэкапа можно воспользоваться сервисами mail.ru.

    X. История версий

    v1.0 : 20121216 : первый релиз

    v1.1 : 20121217 : стабильный релиз ( viewtopic.php?f=41&t=56 )

    v1.2 : 20121218 : добавлено:
    • выгрузка на ftp-сервер,
    • отправка на e-mail,
    • путь к корневой папке в файловых архивах и др.
    v1.3 : 20121219 : добавлено:
    • балансировка нагрузки,
    • преодоление проблем с masterhost.ru и др.
    v1.4 : 20121220 : добавлено:
    • уведомление на e-mail,
    • дополнительные исправления внешних библиотек и др.
    v.2.0.0 : 20121221 : преобразовано в class.b2yd

    v.2.0.1 : 20121223 : стабильный релиз

    v.2.0.2 : 20121224 : добавлено:
    • отправка e-mail посредством mail()
    • стабильный релиз
    v.2.0.3 : 20121225 : добавлено:
    • дробление архивов на части (учет ограничения хостинга по размеру файлов)
    • стабильный релиз
    v.2.0.4 : 20121227 : добавлено:
    • уведомление на форумах phpbb3
    • исправление мелких ошибок
    • стабильный релиз
    v.2.0.5 : 20130105 : исправление мелких ошибок

    v.2.0.6 : 20130106 : исправление ошибок с кодировкой mysql: файл дампа принудительно кодируется в $backup_db_charset

    v.2.0.7 : 20130107 : исправление ошибок с дампом mysql (пустая запись INSERT TO table VALUES ;), стабильный релиз

    v.2.0.8 : 20130109 : добавлено:
    • массив логинов Яндекс Диск - хранилища выбираются последовательно для каждого нового бэкапа, что позволяет избавиться от ограничений размера, подключив несколько штук
    • изменения в web_dav_client - Яндекс Диск иногда очень долго отдаёт список файлов каталога
    • стабильный релиз
    v.2.0.9 : 20130112 : добавлено:
    • исправление мелких ошибок
    • sha1 вместо md5 или отключение hash в суффиксе имени файла (см. $add_hash)
    • простое шифрование файла архива по алгоритму aes-256-cbc + salt, совместимое с openssl
    v.2.1.0 : 20130114 : рефакторинг

    v.2.1.1 : 20130117 : рефакторинг

    v.2.1.2 : 20130127 : обновление phpBB.class.php

    v.2.1.3 : 20130203 : обновление phpBB.class.php, добавлена возможность пропуска больших файлов, если их размер больше $backup_skip_large байт

    v.2.1.4 : 20130217 : изменения:
    • косметические исправления лога для выгрузки на ftp,
    • добавлено создание каталога на ftp, если таковой не существует,
    • исправления для ftp_chmod
    v.2.1.5 : 20130317 : замена split на preg_split, fnmatch на аналог (если не существует)

    v.2.1.6 : 20130407 : исправления неточностей при создании архива баз mysql

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

    v.2.1.8 : 20131012 : исключены каталоги и файлы, являющиеся символическими ссылками

    v.2.1.9 : 20131015 : устранение ошибок в webdav client

    XI. Примечания

    Техническая поддержка:
    • оказывается на этом форуме в этой теме
    • бесплатная (в разумном объёме)
    • только на русском языке.
Если кто-то хочет переложить организацию выполнения бэкапов своих сайтов на наши плечи, мы готовы это сделать на коммерческой основе, равно как и реализовать специфические дополнения в скрипты по желанию Заказчика.

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

Исходные коды как были и есть OpenSource, так ими и останутся. Просьба упоминать автора при использовании скрипта в своих разработках и по возможности давать ссылку на эту тему форума. Чем больше пользователей, тем больше возможностей довести софт до совершенства. Замечания и пожелания приветствуются.

Успешного использования !

XII. Скачать

Здесь располагаются ссылки на крайнюю версию (стабильный релиз). Если кому-то требуются предыдущие, пишите, пожалуйста, свои запросы в этой теме.

Скачать с форума:
b2yd_v_2_1_3.zip
Скачать с Яндекс Диска : b2yd_v_2_1_3.zip

Скачать последнюю версию:
b2yd_v_2_1_9.zip
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
Serg
Администратор
 
Сообщения: 83
Зарегистрирован: Ср янв 14, 2009 14:50
Имя: Сергей Юрьевич

Re: Архив сайта, форума, баз данных - бэкап на Яндекс Диск

Сообщение Serg » Ср фев 06, 2013 8:47

Изменить размер шрифта ↓ВернутьИзменить размер шрифта ↑Добавлено описание в первом сообщении (закреплено на каждой странице темы). Ссылки на скачивание в первом сообщении, ссылки на устаревшие версии удалены за ненадобностью.
Аватара пользователя
Serg
Администратор
 
Сообщения: 83
Зарегистрирован: Ср янв 14, 2009 14:50
Имя: Сергей Юрьевич

Re: Архив сайта, форума, баз данных - бэкап на Яндекс Диск

Сообщение Santyago » Ср фев 06, 2013 10:04

Изменить размер шрифта ↓ВернутьИзменить размер шрифта ↑
Serg писал(а):Так Вы сделайте два скрипта:
  1. бэкап файлов (например, пару раз в неделю, запускается по понедельникам и четвергам в 01:30)
  2. бэкап баз данных (например, каждый день, запускается в 04:30)
Главное, чтобы одновременно не работали)


А с каким ключем запускать скрипт, чтобы был только бэкап базы данных?
Santyago
Пользователь
 
Сообщения: 9
Зарегистрирован: Ср янв 23, 2013 10:35

Re: Архив сайта, форума, баз данных - бэкап на Яндекс Диск

Сообщение Serg » Ср фев 06, 2013 10:23

Изменить размер шрифта ↓ВернутьИзменить размер шрифта ↑Ключей нет.

Первый путь:
Возьмите тот скрипт, что Вы сделали. Копируйте его в 1.php и 2.php (например). В 1.php удалите всё то, что относится к базам данных, в 2.php удалите то, что относится к файлам. И будет два скрипта - первый для файлов, второй для баз данных.

Второй:
Добавьте свои ключи. И в зависимости от их значения действуйте...

Если сложно - киньте свой скрипт в тему (без явок и паролей, разумеется), сделаю как хотите. Будет ещё один пример)
Аватара пользователя
Serg
Администратор
 
Сообщения: 83
Зарегистрирован: Ср янв 14, 2009 14:50
Имя: Сергей Юрьевич

Re: Архив сайта, форума, баз данных - бэкап на Яндекс Диск

Сообщение Santyago » Ср фев 06, 2013 11:11

Изменить размер шрифта ↓ВернутьИзменить размер шрифта ↑Первый путь точно не сложный, сам бы мог догадаться:)
Спасибо!
Santyago
Пользователь
 
Сообщения: 9
Зарегистрирован: Ср янв 23, 2013 10:35

Re: Архив сайта, форума, баз данных - бэкап на Яндекс Диск

Сообщение astin2007 » Пн июн 03, 2013 13:16

Изменить размер шрифта ↓ВернутьИзменить размер шрифта ↑Спасибо, за замечательный скрипт
А есть у него возможность выгрузки файлов/дампов на Google Drive или SugarSync ?
astin2007
Пользователь
 
Сообщения: 1
Зарегистрирован: Пн июн 03, 2013 13:03

Re: Архив сайта, форума, баз данных - бэкап на Яндекс Диск

Сообщение Serg » Вт июн 04, 2013 15:30

Изменить размер шрифта ↓ВернутьИзменить размер шрифта ↑
astin2007 писал(а):Спасибо, за замечательный скрипт
Пожалуйста)
astin2007 писал(а):А есть у него возможность выгрузки файлов/дампов на Google Drive или SugarSync ?
Нет, пока не планировалось...
Аватара пользователя
Serg
Администратор
 
Сообщения: 83
Зарегистрирован: Ср янв 14, 2009 14:50
Имя: Сергей Юрьевич

Re: Архив сайта, форума, баз данных - бэкап на Яндекс Диск

Сообщение brut » Вс июл 21, 2013 21:15

Изменить размер шрифта ↓ВернутьИзменить размер шрифта ↑Здравствуйте. подскажите пожалуйста, сделал все как написано, на ЯД создается папка для резервного копирования, но файлы в нее не пересылются? Они остаются в папке work. В чем может быть проблема?
brut
Пользователь
 
Сообщения: 2
Зарегистрирован: Вс июл 21, 2013 17:47

Re: Архив сайта, форума, баз данных - бэкап на Яндекс Диск

Сообщение Serg » Пн июл 22, 2013 10:38

Изменить размер шрифта ↓ВернутьИзменить размер шрифта ↑Файлы в папке work - целостные архивы ? Их содержимое распаковывается ?

Если архивы создаются нормальные, то на представляю, в чём тут дело...
Аватара пользователя
Serg
Администратор
 
Сообщения: 83
Зарегистрирован: Ср янв 14, 2009 14:50
Имя: Сергей Юрьевич

Re: Архив сайта, форума, баз данных - бэкап на Яндекс Диск

Сообщение brut » Вт июл 23, 2013 11:22

Изменить размер шрифта ↓ВернутьИзменить размер шрифта ↑
Serg писал(а):Файлы в папке work - целостные архивы ? Их содержимое распаковывается ?

Если архивы создаются нормальные, то на представляю, в чём тут дело...


Нет, они по 18 мб и не открываются нормально. внутрь архива я могу зайти, но распаковать его не могу
brut
Пользователь
 
Сообщения: 2
Зарегистрирован: Вс июл 21, 2013 17:47

Re: Архив сайта, форума, баз данных - бэкап на Яндекс Диск

Сообщение Serg » Вт июл 23, 2013 15:10

Изменить размер шрифта ↓ВернутьИзменить размер шрифта ↑Вероятно, Вы попадаете на ограничения хостинга по:
- времени выполнения скриптов или
- размер файлов
поэтому архив создаётся не полностью, сервер "убивает" скрипт до завершения его работы.
Как с этим бороться - см. в архиве readme.txt
Аватара пользователя
Serg
Администратор
 
Сообщения: 83
Зарегистрирован: Ср янв 14, 2009 14:50
Имя: Сергей Юрьевич

Re: Архив сайта, форума, баз данных - бэкап на Яндекс Диск

Сообщение vgrish » Сб июл 27, 2013 11:45

Изменить размер шрифта ↓ВернутьИзменить размер шрифта ↑привет. пытаюсь настроить бэкап и возникли некоторые трудности:
-запускаю проверку скрипта через адресную строку - все отрабатывает как нужно, файлы заливаются.
-запускаю через cron (скрипт для полного бэкапа сайта) - обрывается на заливке сайта на yandex диск.
-запускаю через cron (скрипт для бэкапа сайта по папкам в отдельный архив) - обрывается на заливке папки сайта , архив которой чуть больше 50 мб.

в логах cron - HTTP request sent, awaiting response... 502 Bad Gateway
2013-07-27 11:28:47 ERROR 502: Bad Gateway.

я так понимаю ему времени не хватает для обработки да? Как в данном случае лучше поступить? Хостинг timeweb...
Заранее спасибо за помощь!

p.s. поставил ограничение на архив в 20 мб, в папке work файлы появились, но что то не пойму как сделать чтоб они закачивались на яндекс диск?
запускаю с параметром &list=1
Код: Выделить всё
b2yd service notification, see log:
2013.07.27/12:43:28 [b2yd] == Job start
2013.07.27/12:43:28 [b2yd] Work dir : ./work/
2013.07.27/12:43:28 [b2yd] Archive file prefix : 1
2013.07.27/12:43:28 [b2yd] Archive file prefix : 2
2013.07.27/12:43:28 [b2yd] Archive file prefix : 3
2013.07.27/12:43:28 [b2yd] Archive file prefix : 4
2013.07.27/12:43:28 [b2yd] Archive file prefix : 5
2013.07.27/12:43:28 [b2yd] Archive file prefix : 6
2013.07.27/12:43:28 [b2yd] Archive file prefix : 7
2013.07.27/12:43:28 [b2yd] Archive file prefix : 8
2013.07.27/12:43:28 [b2yd] == Job stop OK.

и все((( в папке works файлы есть, но они не закачиваются
vgrish
Пользователь
 
Сообщения: 2
Зарегистрирован: Сб июл 27, 2013 11:39
Имя: володя

Re: Архив сайта, форума, баз данных - бэкап на Яндекс Диск

Сообщение Serg » Сб июл 27, 2013 21:57

Изменить размер шрифта ↓ВернутьИзменить размер шрифта ↑
vgrish писал(а):Хостинг timeweb...
Попробуйте в .htaccess каталога (если файла нет - создайте), где находится b2yd, указать нечто такое - для времени выполнения скрипта (в сек - на 1 час) и размерчика занимаемой скриптами памяти (-1 - без ограничений) - пример:
Код: Выделить всё
php_value max_execution_time "3600"
php_value max_input_time "3600"
php_value memory_limit "-1"
Если не поможет, попробуйте поиграть с параметром, уменьшив его, например, до 500 К/сек или ниже
Код: Выделить всё
$b2yd->load_max = 512 * 1024;   // Максимум нагрузки байт/сек
Аватара пользователя
Serg
Администратор
 
Сообщения: 83
Зарегистрирован: Ср янв 14, 2009 14:50
Имя: Сергей Юрьевич

Re: Архив сайта, форума, баз данных - бэкап на Яндекс Диск

Сообщение vgrish » Вс июл 28, 2013 10:53

Изменить размер шрифта ↓ВернутьИзменить размер шрифта ↑htaccess не помог, а параметры создания архива по частям я изначально неправильно прописывал... отсюда и неудача)
Сейчас все настроил, пашет как часики! Спасибо вам за ваш труд!
vgrish
Пользователь
 
Сообщения: 2
Зарегистрирован: Сб июл 27, 2013 11:39
Имя: володя

Re: Архив сайта, форума, баз данных - бэкап на Яндекс Диск

Сообщение Serg » Чт окт 10, 2013 10:12

Изменить размер шрифта ↓ВернутьИзменить размер шрифта ↑Выпущен b2yd v.2.1.7 (экспериментальная версия). Изменения после с v.2.1.3:

v.2.1.4 : 20130217 : изменения:
  • косметические исправления лога для выгрузки на ftp,
  • добавлено создание каталога на ftp, если таковой не существует,
  • исправления для ftp_chmod
v.2.1.5 : 20130317 : замена split на preg_split, fnmatch на аналог (если не существует)

v.2.1.6 : 20130407 : исправления неточностей при создании архива баз mysql

v.2.1.7 : 20131010 : после каких-то изменений на Яндекс Диске для некоторых хостингов перестало работать получение квоты и кое-какие иные функции, из-за этого пришлось исправить class_webdav_client.php и считать невозможность получения квоты нефатальной ошибкой
Аватара пользователя
Serg
Администратор
 
Сообщения: 83
Зарегистрирован: Ср янв 14, 2009 14:50
Имя: Сергей Юрьевич

Re: Архив сайта, форума, баз данных - бэкап на Яндекс Диск

Сообщение Serg » Сб окт 12, 2013 16:44

Изменить размер шрифта ↓ВернутьИзменить размер шрифта ↑Выпущен b2yd v.2.1.8 (стабильный релиз).

v.2.1.8 : 20131012 : исключены каталоги и файлы, являющиеся символическими ссылками
Аватара пользователя
Serg
Администратор
 
Сообщения: 83
Зарегистрирован: Ср янв 14, 2009 14:50
Имя: Сергей Юрьевич

Re: Архив сайта, форума, баз данных - бэкап на Яндекс Диск

Сообщение Serg » Вт окт 15, 2013 9:15

Изменить размер шрифта ↓ВернутьИзменить размер шрифта ↑Выпущен b2yd v.2.1.9 (стабильный релиз).

v.2.1.9 : 20131015 : устранение ошибок в webdav client
Аватара пользователя
Serg
Администратор
 
Сообщения: 83
Зарегистрирован: Ср янв 14, 2009 14:50
Имя: Сергей Юрьевич

Пред.

Вернуться в Скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2