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

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

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

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

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

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

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

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

2 ответов


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

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

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 backup

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

или

55 6 * * * wget -q -O /dev/null http://username:Password@example.com/temp/backup_dropbox.php

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

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

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

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 для запуска clr_bkup.php через 10 минут после запуска WP backup

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

или

10 7 * * * wget -q -O /dev/null http://username:Password@example.com/temp/clr_bkup.php

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

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

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

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

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

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

времени

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

выполнить резервное копирование с Проверка

в каталоге, который не защищен паролем, я хотел сохранить backup_dropbox.PHP скрипт от запуска в любое другое время суток, чем 6: 55am (например, посетив его в браузере в 10am). Я включил проверку времени в начале 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: 10am, но я действительно не видел необходимости, так как единственный раз clr_bkup.php будет делать что угодно между 6: 55-7: 10am в любом случае. Хотя до вас, если вы решите пойти по этому пути.

не на WordPress?

есть ряд бесплатных и платных услуг, которые будут делать резервную копию вашего сайта либо в Dropbox или другой подобный сервис, как Google Drive, Amazon S3, Box, etc. или некоторые будут хранить файлы на своих серверах за плату.

Резервное Копирование Машины, Codeguard, Dropmysite, Окне Резервное Копирование или двигатель чтобы назвать несколько.

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

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

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

надеюсь, что это помогает

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


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