资讯专栏INFORMATION COLUMN

创业初期数据库云备份之laravel解决方案

2bdenny / 1954人阅读

摘要:在中注册发布之后,我们会产生一个监听器,文件已经存储在本地,获取该文件信息将文件上传至七牛云存入数据库上面的部分代码没写,大家可以去自己去试下,加深对七牛云及的理解,完全可以达到目的。

最近项目用户徒增,购买的服务器还是和公司另外一个项目共用的同一台服务器,想着要是服务器崩了,还没个容灾方案,万一。。。不得被用户整死

选用方案

laravel-backup 配合laravel的任务调度,每天1点和13点进行数据库自动备份

申请七牛云账号,利用laravel的文件系统&云存储,在备份完成之后立即将文件上传至七牛云

设计数据表backup,在任务完成的同时,配合任务监听laravel-backup,向数据库插入一条备份的数据,可以通过在后台记录备份情况及下载备份文件

实现思路

安装laravel-backup,sf里面有为仁兄给他做了个简单翻译,但是光看这个还是不够的;

申请七牛云账号,这个需要几个步骤即可完成申请,具体去看下官网介绍,我暂时申请的是免费版的,申请账号、提交认证资料、设置项目信息即可,技术文档基本不用看,后面会利用到一个laravel的七牛云包,相当简单;

安装七牛云包,将申请好的七牛云账号信息,写到配置文件app/config/filesystems.php中;

完成安装laravel-backup之后,可以在本地cli环境调试下

  php artisan backup:run --only-db

文件会默认保存在/storage/app/http---localhost
一切顺利的话,我们需要做个定时任务,让它每天自动的去备份数据库,在appconsolekernel.php的文件中,加入如下的备份策略:(laravel任务调度)

    protected function schedule(Schedule $schedule){
        $schedule->command("backup:run --only-db")->twiceDaily(1, 13);
    }

这里的代码是针对linux系统的,需要在服务器安装crontab,并设置好之后会被自动调用;

至此已经完成了数据库备份,下面是我的一个误区,但是这个坑我觉得非常值得去踩。按照我开始的设计思路,在备份完成打包之后,先将文件存储在本地,这时候调用一个监听事件,将文件上传至七牛云,然后再在数据库新增一条数据。
毫无疑问这个思路完全是可以走通的,通过阅读laravel-backup官方文档,我找到了备份完成之后的几个事件(在/vendor/spatie/laravel-backup/src/Events可以找到),这里只需要监听压缩成zip文件之后的一个时间即可,并将其注册在我的监听器里面。
app/provider/EventSeviceProvider中注册

protected $listen = [
        //...
        "SpatieBackupEventsBackupZipWasCreated" => [
            "AppListenersBackupListener"
        ]
    ];

发布之后,我们会产生一个监听器BackupListener,

public function handle(BackupZipWasCreated $event)
    {
        // 文件已经存储在本地,获取该文件信息
        $info = $event->zip;
       
        // 将文件上传至七牛云
        
        // 存入数据库
       
    }

上面的部分代码没写,大家可以去自己去试下,加深对七牛云及laravel-backup的理解,完全可以达到目的。

但这不是最优方案,让我们看下laravel的优雅之处在哪里。

我在修改配置文件app/config/laravel-backup.php的时候,突然意识到它的disk貌似就是filesystems.php中disks默认的一种,即存储在本地,那么我们能否在这里直接使用刚刚加入qiniu的disk作为driver呢?答案是可以的,这里是利用了laravel的文件系统&云存储

我这里修改了两点,一个是将

"name" => env("APP_ENV")."/databaseBackup"

这个是为了测试环境和线上环境做个区分,可不设置。
重要的的一点,在配置文件laravel-backup.php中将laravel默认的文件系统driver由local修改成qiniu,这样就可以将dump下来的文件直接向七牛云发送,而不是直接保存在本地。

    "destination" => [
        "disks" => [
            // "local",
            "qiniu",
        ],
    ],

那么我们在监听器BackupListener里面的处理也可以更简单了.

public function handle(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);

    }

附上备份表backup的sql:

CREATE TABLE `backup` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `type` tinyint(4) DEFAULT "1" COMMENT "文件类型",
  `path` varchar(256) DEFAULT "" COMMENT "位置",
  `size` float DEFAULT "0" COMMENT "大小",
  `isCloud` tinyint(4) DEFAULT "0" COMMENT "是否云备份",
  `downloads` int(11) DEFAULT "0" COMMENT "下载次数",
  `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT "加入时间",
  `updated_at` timestamp NULL DEFAULT NULL COMMENT "更新时间",
  `deleted_at` timestamp NULL DEFAULT NULL COMMENT "删除时间",
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8





文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/28240.html

相关文章

  • 智慧微课堂:移动创业公司的IT性能优化实例讲解

    摘要:大家好,我叫汤金城,今天和大家分享一下我在公司业务方面故障排查遇到的一些坑,以及进行性能调优的解决方法。性能的优化在我看来,性能优化和监控是分不开的,现在关于优化的配置非常多,适合自己的才是最好的。 本期主讲:汤金城,多年从事移动互联网相关运维工作,带领团队维护数百台服务器,拥有丰富的故障排查和性能优化实战经验,擅长业务拆分,高可用架构设计。 大家好,我叫汤金城,今天和大家分享一下我在...

    xzavier 评论0 收藏0
  • [给创业公司的原生] ②Spine L1

    摘要:如果您还不清楚的概念,推荐阅读之前的文章创业公司的原生云之路原生云是什么。以下服务都以阿里云为例,腾讯云和百度云一般也都有相对应的服务。服务原生云服务弹性容器实例镜像阿里云的原生云云效配置过于复杂,所以不在的推荐范围内。 showImg(https://segmentfault.com/img/bVbrwJ0?w=2224&h=1668); 如果您还不清楚Cloud Native的概念...

    wenshi11019 评论0 收藏0
  • 一个案例学会分析计算成本帐

    摘要:两地三中心是指一个云中心数据和应用,一个备份云中心数据和应用和一个异地的数据备份中心仅用于数据备份。全省个地市云节点通过专网与省云中心和省备份云中心连接,市云节点承载本市基层医疗业务和区域信息交换业务。 云计算最近是真火,不光创业公司、中小企业用云计算,越来越多的政府、大型央企也开始采购云计算服务。大家从不知道云计算到大胆应用云计算,从关注云计算的功能、安全性,渐渐过渡到了成本、性价比等更接...

    dinfer 评论0 收藏0
  • 转:从框架看PHP的五种境界及各自的薪资待遇

    摘要:语言行为及特征状态看不懂任何英语技术,英语文档,凡事没有培训部在搞的,只有英文文档的东西国内一律没大公司在用,都非主流,排斥英文文档和新技术,以及各种超出他学习能力范围的技术。 在撰写此文前首先必须申明的是本人不鄙视任何一种框架,也无意于挑起PHP框架间的战争,更没有贬低某个框架使用者的用意,本文纯粹个人的看法。你可以认为我无知也好,或者装逼也好,请不要试着在任何情况下,随便发起言语的...

    Godtoy 评论0 收藏0
  • 计算的那些事--谈一谈IAAS

    摘要:对于商业市场来说,特别是中国这样一个云计算才刚刚起步的市场。反观云计算售卖的一些商品,目前主要还是以服务器为主。云计算的本质是将计算能力转化为标准化,可售卖的服务。可以说是云计算实践的一个经典案例。有的人会问,云计算厂商需要提供哪些服务。 2015年伊始,国内云计算市场可谓风起云涌。各路群豪纷纷涌入这个市场。其中最活跃的领域当属IAAS。阿里腾讯硝烟未尽,百度重新检讨了自己的PAAS战略后,...

    KitorinZero 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<