php - 将MySQL数据库备份到Dropbox

标签 php mysql wordpress dropbox database-backups

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

我遇到的问题是将我的核心网站构建在WordPress上,并为该网站的电子商务部分提供了另一个数据库,我想每天将整个网站(所有文件,两个数据库等)都备份到Dropbox中。基础。

经过漫长的搜索,我找不到任何与我想要的功能完全相同的东西。

免责声明:您无需运行WordPress或电子商务网站即可运行此功能。它可以在任何MySQL数据库上运行,并且需要PHP。

我遇到了WordPress Backup to Dropbox plugin,它使我达到了90%左右。该插件使我可以备份站点上的所有文件,并且可以按您安排的频率进行WordPress数据库备份。

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

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

最佳答案

我想出的解决方案并不特定于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作业和这些类型的命令不是专家,因此可能会有更好的方法。我已经在两个不同的站点上使用了它,并以两种不同的方式运行它们。尝试最适合您的方法。

第一种方法位于不受密码保护的目录上,第二种方法用于password protected directory。 (用您的用户名和密码替换用户名和密码,并且显然将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分钟,但可能需要更长的时间。

在将.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备份需要几分钟才能完成,因此我想在7点10分运行cron作业来执行clr_bkup.php,这应该给它足够的时间。同样,下面的第一个cron作业用于不 protected 目录,第二个cron作业用于受密码保护的目录。

Cron Job在WP备份开始后10分钟运行clr_bkup.php
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 Job计划运行backup_dropbox.php,它将创建我的数据库的备份文件。

7:00 am:运行WordPress Backup to Dropbox,并备份自上次备份以来所有已更改的文件,其中包括我5分钟的新创建数据库备份。

上午7:10:到目前为止,Dropbox备份已完成,因此Cron Job计划运行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备份。上面列出的备份箱也可以执行以下操作。

希望这对有帮助

可能会有更好的方法来完成所有这些工作。我当时处于紧要关头,需要找出可以可靠运行的功能,这是可以做到的。如果有任何可以改进的地方,请分享评论。

关于php - 将MySQL数据库备份到Dropbox,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19141027/

相关文章:

php - 如何获取 mysql 中更新行的主键?

php - Laravel - 如何获得特定用户的委托(delegate)角色

css - 如何响应插件生成的表格内容

wordpress - 在 Wordpress 主题中包含古腾堡 block

javascript - Shopify 网络钩子(Hook) : How do I run JavaScript when a Webhook is triggered?

javascript - 如果条件为真显示阻止按钮否则条件为假显示取消阻止按钮 : Laravel, Javascript

php - fopen php mysql import - sql 中的空行

c# winform使用未分配的局部变量

MySQL多行插入跳过现有记录

php - 如何在 woocommerce 结账表单字段中重新排列/自定义 html