1、创建定时任务
这里创建了一个叫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/*");