将MySQL数据库备份到Dropbox

时间:2013-10-02 15:44:22

标签: php mysql wordpress dropbox database-backups

过去我从SO社区得到了很多帮助,所以一旦我弄清楚这一点,我认为这是我回馈一点的机会。希望它可以帮助某人。

我面临的问题是我的核心网站建立在WordPress上,另一个数据库用于网站的电子商务部分,我想将整个网站(所有文件,两个数据库等)备份到Dropbox以一天为周期。

经过漫长的搜索,我找不到任何与我一直在寻找的东西。

免责声明:您无需运行WordPress或电子商务网站即可运行。它适用于任何MySQL数据库,需要PHP。

我遇到了WordPress Backup to Dropbox plugin,这让我大约90%。该插件允许我备份网站上的所有文件,并以您安排的频率执行WordPress数据库备份。

问题是插件执行WordPress数据库的备份,而不是我的电子商务数据库。

我还找到了一个MySQL backup to Dropbox教程(信用证应该到期),下面的一些代码是基于的。这是一个很棒的教程,但我希望它能够在不同的时间备份和删除备份 - 教程会同时备份和删除。

2 个答案:

答案 0 :(得分:10)

我提出的解决方案并非特定于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.
?>

现在这个脚本应该创建数据库的备份&#34; ecom_db_name&#34;每当它运行。让它在预定的时间间隔内运行(我希望它在我的WordPress备份开始运行到早上7点之前运行几分钟)。您可以使用WP-Cron(如果您的网站获得足够的流量以可靠地触发它在正确的时间运行)或安排cron作业。

我不是cron作业和这些类型命令的专家,因此可能有更好的方法。我在两个不同的网站上使用它,并以两种不同的方式运行它们。尽情使用最适合自己的方式。

第一种方法是在没有密码保护的目录上,第二种方法是password protected directory。 (用您的用户名和密码替换用户名和密码,显然将example.com/temp/backup_dropbox.php设置为文件驻留在服务器上的任何位置。)

Cron Job在WP备份前5分钟运行backup_dropbox.php

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

OR

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

现在,cron作业设置为每天早上6:55运行backup_dropbox.php并创建我的数据库备份。从早上7点开始的WordPress到Dropbox备份通常需要大约5-6分钟,但可能需要更长的时间。

我想在成功备份到Dropbox之后删除我的.sql备份文件,因此它不会永远存在于某人以某种方式打开/下载数据库文件。

再次启动文本编辑器,并创建另一个名为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备份需要几分钟才能完成,我想在7点10分运行一个cron作业来执行clr_bkup.php,这应该给它足够的时间。同样,下面的第一个cron作业是针对未受保护的目录,第二个针对受密码保护的目录。

Cron Job在WP备份开始后10分钟运行clr_bkup.php

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

OR

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

活动顺序

为了帮助您了解正在进行的工作,请点击以下时间表:

上午6:55:Cron Job计划运行backup_dropbox.php,它会创建我的数据库的备份文件。

上午7:00:WordPress Backup to 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 DriveAmazon S3Box等,或者有些会存储他们的服务器上的文件是收费的。

Backup MachineCodeguardDropmysiteBackup BoxMover等等。

想要冗余的非现场备份吗?

有许多服务可以让您在上面列出的任何云存储站点上自动创建远程冗余备份。

例如,如果您将网站备份到Dropbox,则可以使用名为If This Then That (IFTTT)的服务自动添加上传到特定Dropbox folder to Google Drive的文件。这样Dropbox的服务器就会出现问题,你也会有Google Drive备份。上面列出的备份盒也可以这样做。

希望这会有所帮助

可能有更好的方法来完成所有这些。我处在紧张状态,需要找出可靠的工作方法,这样做。如果可以进行任何改进,请分享评论。

答案 1 :(得分:1)

我认为这篇文章解释了一个可以帮助你的解决方案: http://ericsilva.org/2012/07/05/backup-mysql-database-to-dropbox/