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

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

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

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

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

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

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

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

Ответ 1

Решение, которое я придумал, не относится к 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.
?>

Теперь этот script должен создавать резервную копию базы данных "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 последних 7, что должно дать ему достаточно времени. Опять же, первое задание 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 Job планируется запустить backup_dropbox.php, который создает файл резервной копии моей базы данных.

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

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

Переменные, заметки и прочее. Info

Хронометраж

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

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

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

Резервная машина, Codeguard, Dropmysite, Резервная копия или Mover, чтобы назвать несколько.

Хотите резервные автономные резервные копии?

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

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

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

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