我想出的解决方案并不特定于 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 Drive、Amazon S3、Box等),或者有些服务会将文件存储在他们的服务器上并收取费用。
Backup Machine、Codeguard、Dropmysite、Backup Box或Mover等等。
想要冗余异地备份?
有许多服务可以让您在上面列出的任何云存储站点上自动创建远程冗余备份。
例如,如果您将网站备份到 Dropbox,您可以使用名为If This Then That (IFTTT)的服务将上传到特定Dropbox 文件夹的文件自动添加到 Google Drive。这样一来,如果 Dropbox 的服务器出现问题,您还将拥有 Google Drive 备份。上面列出的备份盒也可以做这样的事情。
希望这可以帮助
可能有更好的方法来完成这一切。我处于紧要关头,需要找出一些可靠的工作,这就是。如果有任何可以改进的地方,请在评论中分享。