Резервная копия сайта в Яндекс.Диск
Раздел(ы): Резервное копирование
Просмотры: 10702
Комментарии: 8
Я привык все автоматизировать, в том числе и создание резервных копий. Облачные системы хранения DropBox и Яндекс.Диск существенно упрощают этот процесс.
Резервное копирование (англ. backup) — процесс создания копии данных на носителе (жёстком диске, дискете и т. д.), предназначенном для восстановления данных в оригинальном или новом месте их расположения в случае их повреждения или разрушения.
Из википедии.
Я уже писал о том как сделать резервную копию сайта и базы данных MySQL в DropBox — Резервное копирование сайта и базы данных MySQL в DropBox. Настала пора задействовать возможности Яндекс.Диск.
Программное обеспечение для резервного копирования на Яндекс.Диск
Для того, чтобы осуществить резевное копирование данных на облачный сервис Яндекс.Диск необходим cURL.
cURL — свободная (распространяемая по лицензии MIT), кроссплатформенная служебная программа командной строки для копирования файлов по различным протоколам с синтаксисом URL.
Из Википедии
Процедура копирования состоит из одной строки
curl --user yandex_login:yandex_password -T file_name_to_upload https://webdav.yandex.ru
Которая не нуждается в пояснениях. Все что Вам нужно это иметь аккаунт Яндекс.Диск.
Копирование в Яндекс.Диск на PHP
Я преобразовал свой скрипт резервного копирования на PHP. И сейчас он выглядит так:
<?
// Резервное копирование MySQL и файлов хостинга
// Версия 2.1 Яндекс
$dbhost = "localhost"; //Адрес MySQL сервера
$dbuser = "base_user"; //Имя пользователя базы данных
$dbpass = "user_password"; //Пароль пользователя базы данных
$dbname = "base_name"; //Имя базы данных
$sitedir = "/home/username/public_html"; //Абсолютный путь к сайту от корня диска
$excludefile = $sitedir.'/backup/*.gz'; //Файлы которые не должны попасть в архив
$yadisk_email='XXXXXXX@yandex.ru'; //Имя пользователя Яндекс.Диск
$yadisk_pass='ZZZZZZZ'; //Пароль пользователя Яндекс.Диск
$yadisc_dir='backup/'; //Директория на Яндекс.Диск куда будем копировать. Она должна существовать!
// Все что ниже, лучше не трогать
$dbbackup = $dbname .'_'. date("Y-m-d_H-i-s") . '.sql.gz';
$filebackup = 'files_'. date("Y-m-d_H-i-s") .'.tar.gz';
system("mysqldump -h $dbhost -u $dbuser --password='$dbpass' $dbname | gzip > $dbbackup");
//Для больших баз данных закоментировать строчку выше и раскоментировать ниже.
//system("mysqldump --quick -h $dbhost -u $dbuser --password='$dbpass' $dbname | gzip > $dbbackup");
system ("curl --user $yadisk_email:$yadisk_pass -T $dbbackup https://webdav.yandex.ru/$yadisc_dir");
unlink($dbbackup);
shell_exec("tar cvfz $filebackup $sitedir --exclude=$filebackup --exclude=$excludefile"); 
system ("curl --user $yadisk_email:$yadisk_pass -T $filebackup https://webdav.yandex.ru/$yadisc_dir");
unlink($filebackup);
?>
Этот скрипт последовательно создает резервные копии базы данных MySQL и файлов виртуального хостинга, сжимает их и отправляет в Яндекс.Диск
Настройка резервного копирования по рассписанию Cron
Добавьте задание CRON с такой командой
/usr/bin/php -q /path-to-backup-folder/backup/backup.php
Подкорректируйте пути PHP и скрипта резервного копирования в соответствии с настройками вашего хостинга.
Если у Вас используется cPanel то это будет выглядеть следующим образом:


Что необходимо для создания резервной копии на сайте
- Хостинг с поддержкой PHP, и cURL
- Аккаунт Яндекс.Диск
P.S. Яндекс.Диск объявил акцию
Пригласите друзей на борт Яндекс.Диска и получите до 10 ГБ бесплатно
За каждого приглашенного на Яндекс.Диск друга вы получите 0,5 ГБ свободного места.
А ваш друг — 1 ГБ (Гигабайты будут начислены только после того, как ваш друг установит «Яндекс.Диск» на свой компьютер.).

Привет!
Хороший способ для копирования.
А добавить что бы ещё и п высылал письмо высылал, это можно?
Да ещё вопрос, если файл сделать как backup.sh будет работать?
curl —user $yadisk_email:$yadisk_pass — логин и пароль будут видны всем на пользователям хостинга командой ps -axw (если хостинг позволяет). А уж админам точно
Спасибо. Буду знать.
Здравствуйте, скажите, это как я понял скрипт для одной базы? Как модифицировать скрипт чтобы все базы данных и все папки сайтов бекапились?
как настроить чтоб удалялись старые копиии?
Я не придумал решения. Удаляю вручную.
Приветствую, очень полезным делом поделились! Вы еще не нашли решения, как старые копии удалять или заменять?
Я решения не нашел. Сейчас пользуюсь консольным клиентом для синхронизации резервных копий на Яндекс.Диск. https://moonback.ru/page/vestacp-backup-to-yandex-disk