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

Опубликовано: 11 октября 2012   ( с изм. от 14 февраля 2018 )
Раздел(ы): Резервное копирование
Просмотры: 9646
Комментарии: 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 то это будет выглядеть следующим образом:

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

  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»

Обсуждение (комментарии к статье)

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

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

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

      1. Приветствую, очень полезным делом поделились! Вы еще не нашли решения, как старые копии удалять или заменять?

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

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

Нажимая кнопку "Отправить" Вы даёте свое согласие на обработку введенной персональной информации в соответствии с Федеральным Законом №152-ФЗ от 27.07.2006 "О персональных данных".

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.

© Юрий Рассадников, 2011 - 2020
uptime узнать
Домен : reg.ru
Хостинг : adman.com
SQL - 14 | 0,138 сек. | 8.27 МБ