【笔记】记一次使用 Laravel 每天定时备份数据库并将备份文件以附件的形式发送到邮箱的开发过程

Mysql tytrock ⋅ 于 2019-05-10 10:59:13 ⋅ 2855 阅读

1、创建定时任务

创建定时任务的使用方法参见:https://tytrock.com/topics/218

这里创建了一个叫backup的任务调度


2、配置发送邮件(使用QQ邮箱)

修改.env文件

MAIL_DRIVER=smtp
MAIL_HOST=smtp.qq.com
MAIL_PORT=465
MAIL_USERNAME=test_send@qq.com
MAIL_PASSWORD=ocmvdkncpyusbjeg #并非QQ邮箱登录账号,是QQ邮箱转为SMTP等服务设置的授权码
MAIL_ENCRYPTION=ssl


3、编写程序

进入刚创建的任务调度文件,app/Console/Commands/Backup.php,编写handle方法

$res = DB::select("show databases");
foreach ($res as $key => $val) {
    if ($val->Database == "redu" || $val->Database == "dal") {
        $content = "/usr/local/mysql/bin/mysqldump -hlocalhost -uroot -ptest " . $val->Database;
        $content .= " >/usr/site/web/storage/backup/" . $val->Database . "-".date('Y-m-d').".sql";
        exec($content);
    }
}
//压缩刚生成的备份文件,需先安装zip
exec("zip -r /usr/site/web/storage/backup.zip /usr/site/web/storage/backup/*");
$flag = Mail::send('emails.test',['name'=>'数据备份'],function($message){
    $to = 'test_receive@qq.com';
    $message->to($to)->subject(date('Y-m-d').' 数据备份');

    $attachment = storage_path('backup.zip');
    //在邮件中上传附件
    $message->attach($attachment,['as'=>'backup.zip']);
});
//删除压缩文件
exec("rm -f /usr/site/web/storage/backup.zip");
//删除备份文件
exec("rm -rf /usr/site/web/storage/backup/*");



本帖已被设为精华帖!
回复数量: 0
    暂无评论~~
    • 请注意单词拼写,以及中英文排版,参考此页
    • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
    • 支持表情,使用方法请见 Emoji 自动补全来咯,可用的 Emoji 请见 :metal: :point_right: Emoji 列表 :star: :sparkles:
    • 上传图片, 支持拖拽和剪切板黏贴上传, 格式限制 - jpg, png, gif
    • 发布框支持本地存储功能,会在内容变更时保存,「提交」按钮点击时清空
    Ctrl+Enter