Резервное копирование базы данных MySQL в Dropbox


В прошлом я получал большую помощь от сообщества SO, поэтому, как только я понял это, я подумал, что вот моя возможность немного помочь. Надеюсь, это кому-то поможет.

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

После длительных поисков я не смог найти ничего, что сделал именно то, что я искал.

Отказ от ответственности: Вам не нужно запускать WordPress или сайт электронной коммерции, чтобы это работало. Он будет работать с любыми базами данных MySQL и требует PHP.

Я наткнулся на плагин WordPress для резервного копирования в Dropbox, благодаря которому я получил около 90%. Плагин позволил мне создать резервную копию всех файлов на сайте, плюс он выполняет резервное копирование базы данных WordPress с частотой, которую вы запланировали.

Проблема в том, что плагин только делает резервную копию базы данных WordPress, но не моей базы данных электронной коммерции.

Я также нашел резервную копию MySQL в Dropbox учебник (кредит, где это необходимо), на котором основан приведенный ниже код. Это отличный учебник, но я хотел, чтобы он создавал резервные копии и удалял резервные копии в разное время - учебник создавал резервные копии и удалял все одновременно.

Author: ScottD, 2013-10-02

2 answers

Решение, которое я придумал, не относится конкретно к WordPress или сайту электронной коммерции. Любой, у кого есть база данных MySQL и кто может запускать PHP, должен иметь возможность извлечь из этого выгоду. Возможно, с несколькими изменениями в моем ответе, но все же они должны быть в состоянии достичь конечного результата.

Для хранения резервной копии базы данных электронной коммерции я создал папку в корневом каталоге моего сайта (/temp - называйте ее как хотите). Затем мне пришлось фактически создать резервную копию базы данных. Откройте текстовый редактор и создайте файл под названием backup_dropbox.php .

Backup_dropbox.php

<?php
// location of your /temp directory relative to this file. In my case this file is in the same directory.
$tempDir = "";
// username for e-commerce MySQL DB
$user = "ecom_user";
// password for e-commerce MySQL DB
$password = "ecomDBpa$$word";
// e-commerce DB name to backup
$dbName = "ecom_db_name";
// e-commerce DB hostname
$dbHost = "localhost";
// e-commerce backup file prefix
$dbPrefix = "db_ecom";

// create backup sql file
$sqlFile = $tempDir.$dbPrefix.".sql";
$createBackup = "mysqldump -h ".$dbHost." -u ".$user." --password='".$password."' ".$dbName." > ".$sqlFile;
exec($createBackup);

//to backup multiple databases, copy all of the above code for each DB, rename the variables to something unique, and set their values to whatever is appropriate for the different databases.
?>

Теперь этот скрипт должен создавать резервную копию базы данных "ecom_db_name" при каждом ее запуске. Чтобы запустить его с запланированным интервалом (я хочу, чтобы он работал всего за пару минут до того, как моя резервная копия WordPress начнет работать в 7 утра). Вы можете либо использовать WP-Cron (если ваш сайт получает достаточно трафика, чтобы надежно запустить его в нужное время), либо запланировать задание cron.

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

Первый способ - для каталога, который не защищен паролем, второй - для каталога , защищенного паролем. (Замените имя пользователя и пароль своим именем пользователя и паролем и, очевидно, установите example.com/temp/backup_dropbox.php в любое место, где находится файл на вашем сервер).

Задание Cron для запуска backup_dropbox.php за 5 минут до резервного копирования WP

55 6 * * * php /home/webhostusername/public_html/temp/backup_dropbox.php

ИЛИ

55 6 * * * wget -q -O /dev/null http://username:[email protected]/temp/backup_dropbox.php

Теперь задание cron настроено для запуска backup_dropbox.php и создавайте резервную копию моей базы данных каждый день в 6:55 утра. Резервное копирование WordPress в Dropbox, которое начинается в 7 утра, обычно занимает около 5-6 минут, но может занять немного больше времени.

Я хочу удалить свои файлы резервных копий .sql после того, как они были успешно скопированы в Dropbox, чтобы они не оставались там навсегда кто-то, чтобы каким-то образом открыть/загрузить файл базы данных.

Снова запустите текстовый редактор и создайте другой файл под названием clr_bkup.php .

Clr_bkup.php

<?
$tmpDir = "";
//delete the database backup file

unlink($tmpDir.'db_ecom.sql');
// if you had multiple DB backup files to remove just copy the line above for each backup, and replace 'db_ecom.sql' with your DB backup file name

?>

Поскольку резервное копирование WordPress занимает несколько минут, я хочу запустить задание cron для выполнения clr_bkup.php в 10 минут восьмого, что должно дать ему достаточно времени. Опять же, первое задание cron ниже предназначено для незащищенного каталога, а второе - для каталога, защищенного паролем.

Задание Cron для бежать clr_bkup.php через 10 минут после запуска резервного копирования WP

10 7 * * * php /home/webhostusername/public_html/temp/clr_bkup.php

ИЛИ

10 7 * * * wget -q -O /dev/null http://username:[email protected]/temp/clr_bkup.php

Последовательность событий

Чтобы помочь вам понять, что происходит, вот временная шкала:

6:55 утра: Запланировано выполнение задания Cron backup_dropbox.php, который создает файл резервной копии моей базы данных.

7:00 утра: выполняется резервное копирование WordPress в Dropbox и выполняется резервное копирование всех файлов, которые изменились с момента последнего резервного копирования, включая мою недавно созданную базу данных 5-минутной давности резервное копирование.

7:10 утра: К настоящему времени резервное копирование Dropbox завершено, поэтому запланирован запуск задания Cron clr_bkup.php, который удаляет файл резервной копии с сервера.

Переменные, Примечания и разное. Информация

Время

Первое, что меня подвело, - это правильный выбор времени. Для простоты я использовал время в приведенном выше примере, как если бы все происходило в одном и том же часовом поясе. На самом деле сервер моего веб-хостинга находится на Западном побережье США, в то время как мой часовой пояс WordPress установлен на Восточном побережье США (разница в 3 часа). Мои фактические задания cron настроены на запуск на 3 часа раньше (время сервера), чем показано выше. Это будет по-разному для всех. Лучше всего заранее знать разницу во времени.

Запустите резервное копирование с проверкой времени

В каталоге, который не защищен паролем, я хотел сохранить backup_dropbox.php сценарий от запуска в любое другое время суток, кроме 6:55 утра (посетив его в браузер, например, в 10 утра). Я включил проверку времени в начале backup_dropbox.php файл, который в основном проверяет, не 6:55 утра, а затем не позволяет ему выполнить остальную часть кода. Я изменил backup_dropbox.php кому:

<?php
$now = time();
$hm = date('h:i', $now);
if ($hm != '06:55') {
    echo "error message";
} else {
// DB BACKUP code from above goes here
}
?>

Я полагаю, вы также могли бы добавить это в clr_bkup.php файл, чтобы он мог удалять файлы резервных копий только в 7:10 утра, но я действительно не видел в этом необходимости, так как единственный раз clr_bkup.php в любом случае, я сделаю все, что угодно, между 6:55-7:10 утра. Зависит от вас, хотя, если вы решаете пойти по этому пути.

Не на WordPress?

Существует ряд бесплатных и платных сервисов, которые создадут резервную копию вашего веб-сайта либо в Dropbox, либо в другой аналогичной службе, такой как Google Диск, Amazon S3, Box и т. Д., Или некоторые будут хранить файлы на своих серверах за отдельную плату.

Резервная Машина, Кодовый охранник, Дропмизит, Резервный ящик или Движитель, чтобы назвать несколько.

Требуется Избыточное Резервное Копирование За Пределами Сайта?

Существует множество сервисов, которые позволят вам автоматически создавать удаленные резервные копии на любом из перечисленных выше сайтов облачных хранилищ.

Например, если вы создаете резервную копию своего сайта в Dropbox, вы можете использовать сервис под названием Если это, то То (IFTTT) для автоматического добавления файлов, загруженных в определенную папку Dropbox, на Google Диск . Таким образом, если у Dropbox когда-либо возникнут проблемы с их серверы, у вас также будет резервная копия Google Диска. Окно резервного копирования, перечисленное выше, также может сделать что-то подобное.

Надеюсь, это поможет

Возможно, есть лучший способ сделать все это. Я был в затруднительном положении, и мне нужно было придумать что-то, что работает надежно, что это и делает. Если есть какие-либо улучшения, которые можно внести, пожалуйста, поделитесь ими в комментариях.

 12
Author: ScottD, 2016-12-31 05:03:26

Я думаю, что в этом посте объясняется решение, которое может вам помочь: http://ericsilva.org/2012/07/05/backup-mysql-database-to-dropbox/

 1
Author: jpussacq, 2013-10-03 03:10:56