spatie/laravel-backup
包用来创建laravel应用程序的备份。他会将您指定的目录中的所有文件以及数据库的转储备份成一个zip文件,你可以将备份文件存储在您在 Laravel 配置的任何文件系统上。而且你可以同时向多个文件系统应用程序的备份。
该包还提供了一个备份监视器,用于检查备份的健康状况。当发现一个备份有问题时,可以通过多个通道通知您。为了避免使用过多的磁盘空间,包还可以清理旧的备份。
一旦安装,使您的文件和数据库备份是很容易的。只要运行该命令:
php artisan backup:run
项目地址:https://github.com/spatie/laravel-backup
这种备份包需要PHP 7或更高ZIP模块和Laravel 5.5或更高。不兼容Windows服务器。
这个包需要空闲磁盘空间,它可以创建备份。确保你至少尽可能多的自由空间,你想备份文件的总大小。
确保 mysqldump 安装在您的系统上,如果你想备份MySQL数据库。
确保 pg_dump 安装在您的系统上,如果你想备份PostgreSQL数据库。
确保 mongodump 安装在您的系统上,如果你想备份Mongo数据库。
该功能可以用于备份非当前Laravel 项目的数据,支持服务器上的任意文件的备份。
composer require spatie/laravel-backup
config/backup.php
php artisan vendor:publish --provider="Spatie\\Backup\\BackupServiceProvider"
发布完成后屡一下配置文件,注释很明朗
如果你的数据库需要很长的时间,你会撞到默认超时60秒。你可以设置一个更高(或低)提供了一个限制dump_command_timeout配置密钥设置多长的命令可以运行在秒。
以MySQL为例(config/databases.php
):
'connections' => [
'mysql' => [
'dump_command_path' => '/path/to/the/binary', // only the path, so without 'mysqldump' or 'pg_dump'
'dump_command_timeout' => 60 * 5, // 5 minute timeout
'dump_using_single_transaction' => true, // perform dump using a single transaction
'driver' => 'mysql',
...
],
]
PostgreSQL数据库的你也可以设置一个配置关键命名dump_use_inserts使用inserts而不是copy在数据库转储文件。
同时备份文件和数据库
php artisan backup:run
执行备份命令后会在 storage/app/Laravel
目录下生成一个压缩文件,里边包含了要备份的数据。
storage/app/Laravel/2021-04-02-20-56-44.zip
php artisan backup:run --only-db
php artisan backup:run --only-files
备份可以复制到一个或多个文件系统。这是配置的一部分,您可以指定这些目标文件系统。
'destination' => [
/*
* The disk names on which the backups will be stored.
*/
'disks' => [
'local'
],
],
强烈推荐配置一些额外的磁盘 pp/config/filesystems.php
并添加为一个目标文件系统的备份。这些磁盘应该使用外部服务器或服务(如S3)。
随着时间的推移,备份量和存储需要保持增长。有时你会想清理旧的备份。
清理备份数据运行:
默认最后一次的备份数据是不会被删除的
php artisan backup:clean
该脚本要定期执行,防止生成太多备份导致磁盘被占满
这是配置的一部分,将决定哪些备份应该删除。
'cleanup' => [
/*
* The strategy that will be used to cleanup old backups. The default strategy
* will keep all backups for a certain amount of days. After that period only
* a daily backup will be kept. After that period only weekly backups will
* be kept and so on.
*
* No matter how you configure it the default strategy will never
* delete the newest backup.
*/
'strategy' => \\Spatie\\Backup\\Tasks\\Cleanup\\Strategies\\DefaultStrategy::class,
'default_strategy' => [
/*
* The number of days for which backups must be kept.
*/
'keep_all_backups_for_days' => 7,
/*
* The number of days for which daily backups must be kept.
*/
'keep_daily_backups_for_days' => 16,
/*
* The number of weeks for which one weekly backup must be kept.
*/
'keep_weekly_backups_for_weeks' => 8,
/*
* The number of months for which one monthly backup must be kept.
*/
'keep_monthly_backups_for_months' => 4,
/*
* The number of years for which one yearly backup must be kept.
*/
'keep_yearly_backups_for_years' => 2,
/*
* After cleaning up the backups remove the oldest backup until
* this amount of megabytes has been reached.
*/
'delete_oldest_backups_when_using_more_megabytes_than' => 5000,
],
],
配置laravel的邮件发送功能,设置如下备份通知接收邮箱,每次备份完成后会给该邮箱发送备份状态邮件
'notifications' => [
'mail' => [
'to' => '[email protected]',
'from' => [
'address' => env('MAIL_FROM_ADDRESS', '[email protected]'),
'name' => env('MAIL_FROM_NAME', 'Example'),
],
],
]
# 每天凌晨数据库备份
$schedule->command('backup:run')->dailyAt('01:05');
# 定时清除过旧的备份
$schedule->command('backup:clean')->dailyAt('02:05');
[1]
https://github.com/spatie/laravel-backup: https://github.com/spatie/laravel-backup