Резервное копирование базы с отправкой в Яндекс.Диск

+38
3.24K
Приветствую друзья.
Обратился ко мне знакомый с просьбой организовать удобное резервное копирование базы, причем чтобы файл закачивался в хранилище Яндекс. После пары часов поиска способа это реализовать, я остановился на Sypex Dumper 2. В итоге немного модифицировал создание архива. Так как я не имею права распространять модифицированное приложение, приведу тут листинг кода, там все довольно просто...
Про сам "дампер" можно почитать на официальном сайте, замечательная штука, можно делать резервную копию как вручную, так и по CRON'у.

Итак, приступим…
1. Зарегистрироваться в сервисе Яндекс.Диск, с этим трудностей не должно возникнуть, в итоге Яндек любезно предоставит вам 8 гб. места в облачном хранилище :)
2. Скачать скрипт Sypex Dumper 2 с оф. сайта.
3. Скачать класс для работы с протоколом webdav (необходим для работы с АПИ Яндекса), можно взять у меня в файлах (пропатченый для работы с Яндекс)
4. Распаковываем Sypex Dumper в корень сайта, думаю название директории sxd лучше все же сменить на всякий случай.
5. Распаковать файл class_webdav_client.php в папку с Sypex Dumper.
6. Открываем файл cfg.php в папке с Sypex Dumper, добавим в него переменные со своим логином и паролем от Яндекс, для этого после строки 'exitURL' => './' ставим запятую, и добавим 'yandex_login' => 'ваш_логин',
'yandex_pass' => 'ваш_пароль'

7. Открываем файл index.php в папке с Sypex Dumper, находим функцию function runBackupJob($continue = false), ниже находим
  1. fclose($this->fh_tmp);
  2. rename($this->JOB['file_tmp'], $this->JOB['file_name']);
после этих строк вставляем код:
  1.  
  2. // send to yandex
  3. require('class_webdav_client.php');
  4.  
  5. $wdc = new webdav_client();
  6. $wdc->set_server('ssl://webdav.yandex.ru');
  7. $wdc->set_port(443);
  8. $wdc->set_user($this->CFG['yandex_login']);
  9. $wdc->set_pass($this->CFG['yandex_pass']);
  10. $wdc->set_protocol(1);
  11. $wdc->set_debug(false);
  12.  
  13. if (!$wdc->open()) {
  14. }
  15. if (!$wdc->check_webdav()) {
  16. }
  17. $http_status = $wdc->mkcol("/backups");
  18.  
  19. $http_status = $wdc->put_file("/backups/".$this->JOB['file'], $this->CFG['backup_path'].$this->JOB['file']);
  20.  
  21. $wdc->close();
  22.  
  23. // end send to yandex
затем после строчки
  1. $this->addLog(sprintf($this->LNG['backup_end'], $this->JOB['db']));
вставляем функцию для удаления файла с бекапом с сайта (это не обязательно, но думаю безопаснее):
  1. unlink($this->CFG['backup_path'].$this->JOB['file']);
Теперь можем проверить работу, для этого зайдите по адресу ваш_сайт/папка_с_Sypex_Dumper введите логин и пароль к базе, выберите нужные таблицы и параметры и нажмите "Выполнить". В результате вы должны получить сообщение что архив создан, а в вашем хранилище на Яндекс должна появиться папка backups с архивом внутри. Также проверте корректность удаления архива из папка_с_Sypex_Dumper/backup

Теперь можно настроить архивацию по крону, о том как это делать написано на оф.сайте Sypex Dumper

P.S.
Хочу отметить, что это всего лишь пример, и я не несу никакой ответственности за работоспособность, или проблеммы вызванные при использовании. Материал распространяется «как есть», вы можете пользоваться этим способом на свой страх и риск.
+1
picaboo picaboo 11 лет назад #
добавлю в копилку пытливых умов - вот так http://moonback.ru/page/backup2yandex можно и базу и файлы забекапить.
0
deltas deltas 11 лет назад #
Это я видел, но оно не идет ни в какое сравнение с Sypex Dumper по функциональности. К тому же мне никогда не везло на хостинг с разрешеными system() и exec() :)
0
picaboo picaboo 11 лет назад #
ну это я так, в копилку более замороченным :)
есть еще более продвинутая ступень извращений :)
себе я вообще через bash настроил архивирование баз, закрытие паролем и отправку в яндексдиск, дпропбокс и гуглдрайв
0
eoleg eoleg 11 лет назад #
+
если еще весь сайт периодически туда архивировать то то можно будет избежать ситуации в которую попал тут один человек у которого хостер требовал какую то безумную сумму!
0
Князь Мышкин Князь Мышкин 11 лет назад #
Да, было бы некисло

Как-то на хабре проходил юзер с рекламой своего сервиса. Он там придумал скрипт, который бэкапил базу и файлы к ним в хранилище раз в день.
Не занес к себе в закладки - теперь жалею
0
Владимир Владимир 11 лет назад #
А если у меня сайт без малого 30 гиг? Сильно не побэкапишь. Я его даже по ftp к себе задолбаюсь тянуть.
0
picaboo picaboo 11 лет назад #
дайте угадаю...там одни картинки на 30гигов, а база и файлы метров 300 максимум?

когда встанет вопрос при полной потере сайта, что лучше иметь бекап базы данных или картинок загруженных пользователем, то выбор очевиден чем можно пожертвовать
0
Владимир Владимир 11 лет назад #
Угу, но думаю, если слетят картинки, сайт можно будет хоронить. В любом случае, резервным копированием не заморачиваюсь. Эту работу всецело возложил на хостера.
+1
Azura Azura 11 лет назад #
Спасибо! Вдруг ещё обновлять будете. Тема о-о-очень актуальна!!!
0
lezginka.ru lezginka.ru 11 лет назад #
как я понял,готовое решение чайникам не видать как своих ушей :)
0
deltas deltas 11 лет назад #
К сожалению распространение модифицированного ПО запрещено правообладателем
+1
Dinar Dinar 11 лет назад #
Не могу понять, что ему не нравится. Не хочет из cfg.php брать логин и пароль.
В логе выводит ошибку:

Код PHP:
  1. Notice: Undefined index: yandex_login (/var/www/***.ru/***/index.php:1143)
  2. Notice: Undefined index: yandex_pass (/var/www/***.ru/***/index.php:1144)
в cfg.php логин и пароль есть:

Код PHP:
  1. ...
  2. 'exitURL' => './',
  3. 'yandex_login' => '***',
  4. 'yandex_pass' => '***'
  5. );
  6. ?>
Если в index.php указать логин и пароль ручками, все работает.

Еще от автора

Обновление компонента "Replacement замена в контенте" + бонус
Как и обещал, поработал над обновлением компонента Replacement.
Replacement - замена в контенте. Компонент для ICMS 2.x
Компонент на основе фильтра "Красивые заметки в тексте" для первой версии. По просьбам пользователей сделал подобное для второй ветки.
Фильтр ICMS Note - Красивые заметки в тексте
Опять же по просьбе Nomin сделал фильтр для создания красивых заметок в тексте.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.