9

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

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

经过长时间的搜索,我找不到任何完全符合我要求的东西。

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

我遇到了WordPress Backup to Dropbox 插件,它让我大约 90% 在那里。该插件允许我备份网站上的所有文件,并且它可以按照您安排的频率备份 WordPress 数据库。

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

我还找到了一个MySQL 备份到 Dropbox教程(归功于它),下面的一些代码是基于它的。这是一个很棒的教程,但我希望它在不同的时间备份和删除备份——教程同时备份和删除。

4

2 回答 2

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.
?>

现在,此脚本应在运行时创建数据库“ecom_db_name”的备份。让它按预定的时间间隔运行(我希望它在我的 WordPress 备份在早上 7 点开始运行前几分钟运行)。您可以使用WP-Cron(如果您的站点获得足够的流量以可靠地触发它在正确的时间运行)或安排 cron 作业。

我不是 cron 作业和这些类型命令的专家,所以可能有更好的方法。我在两个不同的站点上使用了它并以两种不同的方式运行它们。尝试最适合您的方法。

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

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

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

现在 cron 作业设置为运行 backup_dropbox.php 并在每天早上 6:55 创建我的数据库备份。从早上 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 备份需要几分钟才能完成,我想运行一个 cron 作业以在 7 点 10 分执行 clr_bkup.php,这应该给它足够的时间。同样,下面的第一个 cron 作业用于未受保护的目录,第二个用于受密码保护的目录。

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

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:55:Cron 作业计划运行 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:10am。不过,如果你决定走那条路,这取决于你。

不在WordPress上?

有许多免费和付费服务可以将您的网站备份到 Dropbox 或其他类似服务(如Google DriveAmazon S3Box等),或者有些服务会将文件存储在他们的服务器上并收取费用。

Backup MachineCodeguardDropmysiteBackup BoxMover等等。

想要冗余异地备份?

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

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

希望这可以帮助

可能有更好的方法来完成这一切。我处于紧要关头,需要找出一些可靠的工作,这就是。如果有任何可以改进的地方,请在评论中分享。

于 2013-10-02T15:44:22.280 回答
1

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

于 2013-10-03T03:10:56.240 回答