Laravel 文件和数据库备份工具 spatie/laravel-backup 介绍

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 项目的数据,支持服务器上的任意文件的备份。

spatie/laravel-backup 安装使用

使用composer安装spatie/laravel-backup

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