spatie/laravel-backup
Laravel Backup 允许创建应用程序的备份,包括数据库、源代码或用户上传的文件。
备份可以存储在配置的自定义文件系统上,比如 S3、七牛云或者 ftp 等。
当备份出现问题时,该扩展包还可以通过邮件等发送通知。
安装
通过 Composer 安装该软件包:
bash
composer require spatie/laravel-backup
配置
使用下面的命令发布配置文件 config/backup.php
bash
php artisan vendor:publish --provider="Spatie\Backup\BackupServiceProvider"
建议修改配置文件内容:
php
<?php
'backup' => [
// ...
'name' => env('APP_NAME', 'laravel-backup'),
'name' => env('BACKUP_NAME', 'laravel-backup'),
'destination' => [
// ...
'disks' => [
'local',
],
'disks' => explode(',', env('BACKUP_DISKS', 'local')),
],
],
'monitor_backups' => [
[
'name' => env('APP_NAME', 'laravel-backup'),
'disks' => ['local'],
'name' => env('BACKUP_NAME', 'laravel-backup'),
'disks' => explode(',', env('BACKUP_DISKS', 'local')),
'health_checks' => [
\Spatie\Backup\Tasks\Monitor\HealthChecks\MaximumAgeInDays::class => 1,
\Spatie\Backup\Tasks\Monitor\HealthChecks\MaximumStorageInMegabytes::class => 5000,
],
],
],
然后可以在 .env
配置文件中添加两个自定义环境变量 BACKUP_NAME
备份名称和 BACKUP_DISKS
需要备份到的磁盘。
使用
常用命令
备份所有文件
bashphp artisan backup:run
仅备份数据库
bashphp artisan backup:run --only-db
列出所有备份文件
bashphp artisan backup:list
清空旧备份文件
bashphp artisan backup:clean
通知
默认情况下,备份任务完成后会通过发送通知到 your@example.com
用户。
可以通过 config/backup.php
文件中的 config('backup.notifications.mail')
配置项来修改通知配置。
或者通过 config/backup.php
文件中的 config('backup.notifications.notifications')
配置项移除 mail
来关闭邮件通知。
备份到七牛云
默认数据的备份文件放在本地,可以配置一些其他存储方式,比如七牛云存储。
安装驱动依赖
bashcomposer require overtrue/laravel-filesystem-qiniu
配置
config/filesystems.php
文件php<?php return [ // ... 'disks' => [ // ... 'qiniu-backup' => [ 'driver' => 'qiniu', 'access_key' => env('BACKUP_QINIU_ACCESS_KEY', ''), 'secret_key' => env('BACKUP_QINIU_SECRET_KEY', ''), 'bucket' => env('BACKUP_QINIU_BUCKET', ''), 'domain' => env('BACKUP_QINIU_DOMAIN', ''), ], ] // ... ];
修改
config/backup.php
文件中关于disks
的配置php<?php return [ 'backup' => [ // ... 'destination' => [ // ... 'disks' => [ 'local', ], 'disks' => explode(',', env('BACKUP_DISKS', 'local')), [ ], // ... ], 'monitor_backups' => [ [ // ... 'disks' => ['local'], 'disks' => explode(',', env('BACKUP_DISKS', 'local')), // ... ], // ... ], ];
本地
.env
文件新增环境变量dotenv# Backup BACKUP_QINIU_ACCESS_KEY= BACKUP_QINIU_SECRET_KEY= BACKUP_QINIU_BUCKET=my-backup BACKUP_QINIU_DOMAIN=https://backup.domain.com # support local、qiniu-backup BACKUP_DISKS=local,qiniu-backup
备份定时任务
php
<?php
namespace App\Console;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
class Kernel extends ConsoleKernel
{
protected function schedule(Schedule $schedule): void
{
$schedule->command('backup:run --only-db')->daily()->at('02:05'); // 凌晨2点5分备份数据库
$schedule->command('backup:clean')->daily()->at('02:05'); // 凌晨2点5分清理旧的备份
$schedule->command('backup:monitor')->daily()->at('10:05'); // 早上10点05分检查数据库备份
}
// ...
}
mysql-dump 命令路径
- 在
config/database.php
中添加自定义配置php<?php use Illuminate\Support\Str; return [ 'connections' => [ 'mysql' => [ // ... 'dump' => [ 'dump_binary_path' => env('DUMP_BINARY_PATH', '/usr/local/mysql/bin'), ], ], ], ];
- 在本地环境文件
.env
中添加
dotenv
# For Apple M1
DUMP_BINARY_PATH=/opt/homebrew/bin