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

 11 октября 2012      
 Резервное копирование      
 комментария 4

Я привык все автоматизировать, в том числе и создание резервных копий. Облачные системы хранения 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 то это будет выглядеть следующим образом:

Что необходимо для создания резервной копии на сайте

  1. Хостинг с поддержкой PHP, и cURL
  2. Аккаунт Яндекс.Диск

P.S. Яндекс.Диск объявил акцию

Пригласите друзей на борт Яндекс.Диска и получите до 10 ГБ бесплатно
За каждого приглашенного на Яндекс.Диск друга вы получите 0,5 ГБ свободного места.
А ваш друг — 1 ГБ (Гигабайты будут начислены только после того, как ваш друг установит «Яндекс.Диск» на свой компьютер.).

Источники и литература:

  1. http://wiki.firstvds.ru/Резервное_копирование
  2. Виртуальная энциклопедия Linux по-русски
  3. How to Schedule Regular Database Backup to Dropbox
  4. http://www.host.ru/tips/38 — mysqldump ошибка «Out of memory»

 Метки:  ,

Обсуждение: 4 комментария

  1. Сергей:

    Привет!
    Хороший способ для копирования.
    А добавить что бы ещё и п высылал письмо высылал, это можно?
    Да ещё вопрос, если файл сделать как backup.sh будет работать?

    Ответить
  2. Admin:

    curl —user $yadisk_email:$yadisk_pass — логин и пароль будут видны всем на пользователям хостинга командой ps -axw (если хостинг позволяет). А уж админам точно

    Ответить
    1. Спасибо. Буду знать.

      Ответить
  3. Александр:

    Здравствуйте, скажите, это как я понял скрипт для одной базы? Как модифицировать скрипт чтобы все базы данных и все папки сайтов бекапились?

    Ответить

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *

© 2016 Технический блог // SQL - 41 | 0,143 сек. | 6.76 МБ