之前写了一篇关于SAE数据备份的文章《SAE数据库完美备份(自动备份+发送邮件+数量可控)》,后来有一些网友留言,对该方法提出了一些可以完善的地方。主要有三个方面,下面会分别说明,经过完善后的文件复杂了些,不像之前一个文件就搞定了。在试用了一两个月后,没有发现什么问题,今天整理整理发出来供大家参考。
首先,SAE自带的SaeMail限制比较多,不但附件有1M的大小限制,而且无法直接将zip文件发送邮箱,而通过第三方的类来发邮件,可以很好的解决这两个问题,这里用的是网友推荐的《简易的SMTP邮件发送类》,经试验可以直接发送带附件名为zip的邮件,并且附件大小没有限制。其次,PHP脚本执行有时间限制,如果在时间限制到了,备份任务还没完成的话,之前的备份脚本就会死在28到30行么,这个可以通Deferredjob的Callback回调来解决。最后就是发送邮件邮箱的选择,个人邮箱很容易被当作垃圾邮件删除或退信,可以选择一些第三方邮件系统来处理,如邮大爷,SendCloud。其实,我在用网易系列邮箱的过程中,发现还可以将发送邮件加入到收信邮箱的白名单中(设置->反垃圾/黑白名单->白名单),这样刚开始或许会有些误判,后来都成功接收。
完善后的代码共有4个文件,比较多,就不贴源文件了,直接下载吧(点击下载)。将下载后将文件夹放到代码路径下(文件夹名字可以自由修改),然后修改里面db_config.php中的配置,主要是邮箱和一些备份信息的设定;接着在网站代码根目录的config.yaml文件中添加一个cron任务,让备份可以自动定时执行:
cron:
- description: SAE database backup
url: /实际目录/db_backup.php
schedule: every day of month 03:00
handle:
- hostaccess: if( path ~ "/实际目录 /db_backup.php" ) allow "127.0.0.1 10.0.0.0/8"
注意:这次设置的hostaccess项和之前完美备份文章中的是不一样的。想了解设置的意义或手动修改的话,可以看之前的文章《SAE数据库完美备份(自动备份+发送邮件+数量可控)》。
到这里就配置完成了,接下来就是见证奇迹的时刻,Have Fun :)