WordPress博客放到SAE上之后,原来一直在用的备份插件不能用了,也懒得去移植。发现可以直接用SAE的Cron服务实现数据库的备份,简单粗暴。。
什么是Cron服务
Cron服务是SAE为开发者提供的分布式定时服务,用来定时触发开发者的特定动作,满足比如定时计算排行榜等需求。Cron的设置是通过App的config.yaml来实现的,只要用户在App目录下的config.yaml里按照我们的提供的语法格式进行配置,部署后就能生效。Cron的执行是以HTTP方式触发的,触发后真正执行的是用户在App中的PHP代码。Cron服务是分布式环境部署的,具有高可靠性,多点之间相互隔离且同时触发,并且通过分布式锁进行选举并最终由一个健康节点执行。
实现方法
1.在根目录创建backup.php,内容如下:
<?php /** * database backup for sae wordpress * code by Gimhoy (https://blog.gimhoy.com) */ $stor = new SaeStorage(); $attr = array('private'=>false); $ret = $stor->setDomainAttr("wordpress", $attr); //必须为公有domain $date = date('Y-m-d'); $dj = new SaeDeferredJob(); $taskID = $dj->addTask("export","mysql","wordpress","dbBackup/$date.sql.zip",SAE_MYSQL_DB,"",""); if($taskID===false){ var_dump($dj->errno(), $dj->errmsg()); $mail = new SaeMail(); $ret = $mail->quickSend( '收件邮箱' , '数据库备份失败' , '数据库备份失败 errno:'.$dj->errno().' errmsg:'.$dj->errmsg(), '发件邮箱' , '发件邮箱密码' ); //邮箱通知 }else{ var_dump($taskID); } $attr = array('private'=>true); $ret = $stor->setDomainAttr("wordpress", $attr); //设置domain为private,保护数据 ?>
关于addTask()参数的一些说明:第三个参数为Storage的Domain,第四个为保存的文件名,第五个为当前SAE应用的数据库名。
Domain不能为私有且不能设置防盗链。
2.在config.yaml中增加以下代码:
- hostaccess: if(path == "/backup.php") allow "10.0.0.0/8" cron: - description: Backup url: /backup.php schedule: every day of month 03:00
说明:
1.- hostaccess: if(path == "/backup.php") allow "10.0.0.0/8"是只允许Cron服务访问backup.php
2.schedule: every day of month 03:00是每天3点执行一次Cron,可以自己修改,也可以到这里生成。
是我需要的功能
弄一个BAE的别。
【此处为悄悄话】
这个功能用了大半年了,除了不能单独备份某几个表,其它的算很满意。
可以实现啊~自己改一下就行