最近项目用户量激增,购买的服务器还是与公司另一个项目共享的同一台服务器。心想如果服务器挂了,没有灾难恢复计划,以防万一。..laravel-backup方案用户不要使用,配合laravel的任务调度,每天1点和13点会自动备份数据库;申请一个七牛云账号,使用laravel的文件系统&云存储,备份完成后立即上传文件到七牛云;设计数据表备份,任务完成后,配合任务监控laravel-backup,插入一条备份数据到数据库,可以记录备份情况,后台下载备份文件;实现安装laravel-backup的思路,在sf里面有仁兄帮他简单翻译的,光看还是不够的;申请七牛云账号,只需几个步骤即可完成申请。详情请参考官网。我暂时申请免费版,您可以申请账号,提交认证材料,设置项目信息。您无需阅读技术文档。后面会用到一个laravel七牛云包,比较简单;安装七牛云包,申请七牛云账号信息,写在配置文件app/config/filesystems.php;安装完laravel-backup后,可以在本地cli环境下调试phpartisanbackup:run--only-db文件默认会保存在/storage/app/如果http---localhost一切正常,我们需要做一个定时任务,让它每天自动备份数据库。在app\console\kernel.php文件中,添加如下备份策略:(laravel任务调度)protectedfunctionschedule(Schedule$schedule){$schedule->command('backup:run--only-db')->每天两次(1,13);}这里的代码是针对linux系统的,需要在服务器上安装crontab,设置好后会自动调用;至此数据库备份已经完成,以下是我的一个误区,但我觉得这个坑非常值得一踩。按照我开始的设计思路,备份打包后,文件存储在本地。这时会调用一个监控事件,将文件上传到七牛云,然后在数据库中添加一条新的数据。毫无疑问,这个想法是完全可行的。通过阅读laravel-backup官方文档,发现了几个备份完成后的事件(在/vendor/spatie/laravel-backup/src/Events中找到),这里只需要在压缩成a后监听一个时间zip文件,并将其注册到我的侦听器中。在app/provider/EventSeviceProvider中注册受保护的$listener=[//...'Spatie\Backup\Events\BackupZipWasCreated'=>['App\Listeners\BackupListener']];发布后,我们会生成一个监听器BackupListener,publicfunctionhandle(BackupZipWasCreated$event){//文件已经存储到本地,获取文件信息$info=$event->zip;//上传文件到七牛云//存入数据库}上面部分代码没写,大家可以自己试试,加深对七牛云和laravel-backup的理解,就可以达到目的。但这并不是最优解,让我们看看laravel的优雅在哪里。在修改配置文件app/config/laravel-backup.php的时候,突然发现它的disk好像是filesystems.php中默认的disk类型,存储在本地,那么我们这里可以直接使用吗?七牛的盘作为驱动呢?答案是肯定的,这里就是使用laravel的文件系统&云存储。我在这里修改了两点。一种是设置'name'=>env('APP_ENV').'/databaseBackup'来区分测试环境和线上环境。没有必要设置它。重点是在配置文件laravel-backup.php中将laravel默认的文件系统驱动从local改为qiniu,这样dump出来的文件就可以直接发送到七牛云,而不是存储在本地。'destination'=>['disks'=>[//'local','qiniu',],]]那么我们在监听器BackupListener中的处理也可以更简单一些。publicfunctionhandle(BackupZipWasCreated$event){$info=$event->zip;$fileName=env('APP_ENV').'-databaseBackup/'.substr($info->getPath(),-21,21);$size=$info->getSize();$data=array('type'=>1,'path'=>$fileName,'size'=>$size);//存入数据库$db_result=DB::table('backup')->insert($data);}附上备份表备份的sql:CREATETABLE`backup`(`id`int(11)NOTNULLAUTO_INCREMENT,`type`tinyint(4)DEFAULT'1'COMMENT'filetype',`path`varchar(256)DEFAULT''COMMENT'location',`size`floatDEFAULT'0'COMMENT'size',`isCloud`tinyint(4)DEFAULT'0'COMMENT'是否云备份',`downloads`int(11)DEFAULT'0'COMMENT'下载时间',`created_at`timestampNOTNULLDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMPCOMMENT'添加时间',`updated_at`timestampNULLDEFAULTNULLCOMMENT'更新时间',`deleted_at`timestampNULLDEFAULTNULLCOMMENT'删除时间',PRIMARYKEY(`id`))ENGINE=InnoDBAUTO_INCREMENT=0DEFAULTCHARSET=utf8
