SAE下通过Cron和DeferredJob实现定时自动备份数据库

时间:2013年01月11日 14:32 星期五 栏目:未分类 作者: 评论:7 点击: 3,104 次

实现思路是:通过Corn实现定时执行一个特定的php文件,从而给DeferredJob添加任务,实现备份数据库到Storage里。

首先给在 Storage里添加一个domain,这个domain不要设置私有或防盗链,不然会导致添加DeferredJob任务失败。

然后在网站的根目录下增加一个backup.php文件,当然也可以放在其它目录下。
backup.php的内容如下:

1
2
3
4
5
 <?php
	$date = date('Y-m-d-B');
	$dj = new SaeDeferredJob();
	$taskID = $dj->addTask("export","mysql","mystore","$date.sql.zip",SAE_MYSQL_DB,"","");
?>

说明:addTask()的第三个参数就是domain的名字,根据你的实际情况输入。第五个参数是SAE_MYSQL_DB,在SAE环境下,是一个常量,为当前SAE应用的数据库名。其它更详细的说明可以查阅DeferredJob的说明文档。

当然 可以在backup.php里写一段发送mail的代码把任务添加的情况发到指定的邮箱,如果任务添加成功,可以直接用$taskID获得任务ID,之后通过SAE的MAIL服务发一封邮件给指定邮箱。

但是在实际应用中,发现SAE的MAIL不是很好用,有一定的成功率,不知道问题出在哪。调用quickSend()不能通过QQ的企业邮箱来发送,调用其它可以发送的SMTP,却发现有一定的成功率,有时发成功有时没发成,更离奇的是查看MAIL日志,发现不管发送邮件成不成,日志记不记录也是一定的概率,真是服了。

听说不用quickSend()而用正常的send函数会好一些,不过没心思弄它了。

跑回正题,在网站的根目录下config.yaml文件里加上如下代码,可以实现定时执行backup.php,以下例子是假定backup.php放在网站abc的目录下。每周六凌晨2点执行。
关于Corn的配置可以用这个链接自动生成: http://saetools.sinaapp.com/cron.html

1
2
3
4
cron:
    - description: backup
    url: abc/backup.php
    schedule: every Saturday of month 02:00

其它更详细的功能,可以阅读SAE相应的文档。

参考文章:http://boliquan.com/sae-using-cron-and-deferredjob-scheduled-backup-database/

2013.01.14更新:

对这个backup.php,任何访问都可以让备份得到执行,当然要想办法对执行进行控制,例如对访问者的IP或其它身份标志进行过滤。一般来说你只要不公布这个文件的URL,就不会有人去访问它。但是像360这种没节操的公司,你如果用360浏览器访问过,很可能它的爬虫就登门拜访了。所以还是有必要采取一些措施。

我发现执行CORN的是IP为10.67.15.* ,USER_AGENT 字段为 “SAE/cron-nooffset"的一访问。不知道SAE内部对于IP有没有限制,以便准确地通过IP来控制,所以采取另一种方法,借鉴《PHP下封杀野蜘蛛Spider/Bot的方法》一文的方法,通过对USER_AGENT的判断来决定是否执行备份操作。
代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 <?php
$tmp = $_SERVER['HTTP_USER_AGENT'];
 if(strpos($tmp, 'cron-nooffset') >0){//当USER_AGENT包含'cron-nooffset'时才执行。
	$date = date('Y-m-d-B');
	$dj = new SaeDeferredJob();
	$taskID = $dj->addTask("export","mysql","store","$date.sql.zip",SAE_MYSQL_DB,"","");
 
if($taskID===false)
    var_dump($dj->errno(), $dj->errmsg());
else
    var_dump($taskID);
  } 
else{
echo 'This page is only for internal execution.';//否则返回一句提示,不执行备份。
}
?>

相关文章

SAE下通过Cron和DeferredJob实现定时自动备份数据库:目前有7 条留言

  1. 意思是 croN可以定时执行远程的php文件喽?

    2013-09-16 22:54
  2. 沙发
    ISOFTee:

    SAE 如何做301 啊,把不带3W到指向到带3W的?

    2013-06-20 18:35
    • 1.如果您申请绑定裸域名且您的DNS提供商不支持裸域名CNAME解析,您可以将域名重定向到IP 220.181.136.233或220.181.136.234(电信)、202.108.5.19或202.108.5.20(网通)

      2013-06-21 08:52

发表评论

您必须 [ 登录 ] 才能发表留言!

Baidu提供的广告

最近访客

    最新评论