Sco*_*ttD 9 php mysql wordpress dropbox database-backups
在过去,我得到了SO社区的大量帮助,所以一旦我弄清楚这一点,我认为这是我回馈一点的机会.希望它可以帮助某人.
我面临的问题是我的核心网站建立在WordPress上,另一个数据库用于网站的电子商务部分,我想每天将整个网站(所有文件,两个数据库等)备份到Dropbox基础.
经过漫长的搜索,我找不到任何完全符合我要求的东西.
免责声明:您无需运行WordPress或电子商务网站即可运行.它适用于任何MySQL数据库,需要PHP.
我遇到了WordPress Backup to Dropbox插件,这让我大约90%.该插件允许我备份网站上的所有文件,并以您安排的频率执行WordPress数据库备份.
问题是该插件只备份WordPress数据库,但不备份我的电子商务数据库.
我还发现了Dropbox教程的MySQL备份(信用到期),下面的一些代码基于.这是一个很棒的教程,但我希望它能够在不同时间备份和删除备份 - 教程同时备份和删除.
Sco*_*ttD 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.
?>
Run Code Online (Sandbox Code Playgroud)
现在,无论何时运行,此脚本都应创建数据库"ecom_db_name"的备份.让它在预定的时间间隔内运行(我希望它在我的WordPress备份开始运行到早上7点之前运行几分钟).您可以使用WP-Cron(如果您的站点获得足够的流量以可靠地触发它在正确的时间运行)或安排cron作业.
我不是cron作业和这些类型的命令的专家,所以可能有更好的方法.我在两个不同的网站上使用它,并以两种不同的方式运行它们.尽情使用最适合您的方法.
第一种方法是在没有密码保护的目录上,第二种方法是受密码保护的目录.(用您的用户名和密码替换用户名和密码,显然将example.com/temp/backup_dropbox.php设置为文件驻留在服务器上的任何位置).
Cron Job在WP备份前5分钟运行backup_dropbox.php
55 6 * * * php /home/webhostusername/public_html/temp/backup_dropbox.php
Run Code Online (Sandbox Code Playgroud)
要么
55 6 * * * wget -q -O /dev/null http://username:Password@example.com/temp/backup_dropbox.php
Run Code Online (Sandbox Code Playgroud)
现在,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
?>
Run Code Online (Sandbox Code Playgroud)
由于WordPress备份需要几分钟才能完成,我想运行一个cron作业来在7点10分执行clr_bkup.php,这应该给它足够的时间.同样,下面的第一个cron作业是针对未受保护的目录,第二个针对受密码保护的目录.
Cron Job在WP备份开始后10分钟运行clr_bkup.php
10 7 * * * php /home/webhostusername/public_html/temp/clr_bkup.php
Run Code Online (Sandbox Code Playgroud)
要么
10 7 * * * wget -q -O /dev/null http://username:Password@example.com/temp/clr_bkup.php
Run Code Online (Sandbox Code Playgroud)
事件顺序
为了帮助您了解正在发生的事情,这里是时间表:
上午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
}
?>
Run Code Online (Sandbox Code Playgroud)
我想你也可以将它添加到clr_bkup.php文件中,只让它在早上7:10删除备份文件,但我没有真正看到需要,因为clr_bkup.php唯一一次会做的事情是在6:55之间-7:无论如何都是上午10点.如果您决定走那条路,那么由您决定.
不在WordPress上?
有许多免费和付费服务可以将您的网站备份到Dropbox或其他类似服务,如Google云端硬盘,Amazon S3,Box等,或者有些服务会将这些文件存储在服务器上,但需要付费.
Backup Machine,Codeguard,Dropmysite,Backup Box或Mover等等.
想要冗余的非现场备份吗?
有许多服务可以让您在上面列出的任何云存储站点上自动创建远程冗余备份.
例如,如果您将站点备份到Dropbox,则可以使用名为If This Then That(IFTTT)的服务自动将上传到特定Dropbox文件夹的文件添加到Google云端硬盘.这样Dropbox的服务器就会出现问题,你也会有Google Drive备份.上面列出的备份盒也可以做这样的事情.
希望这可以帮助
可能有更好的方法来完成所有这些.我处在紧张状态,需要找出可靠的工作方法,这样做.如果可以进行任何改进,请分享评论.
| 归档时间: |
|
| 查看次数: |
10527 次 |
| 最近记录: |