Spatie Laravel-Backup 安装与配置完全指南

Spatie Laravel-Backup 安装与配置完全指南

laravel-backup A package to backup your Laravel app laravel-backup 项目地址: https://gitcode.com/gh_mirrors/la/laravel-backup

前言

在当今数字化时代,数据备份是任何应用开发中不可或缺的重要环节。Spatie Laravel-Backup 作为 Laravel 生态中最受欢迎的备份解决方案之一,为开发者提供了强大而灵活的备份功能。本文将详细介绍如何安装和配置这个强大的备份工具包。

环境准备

在开始安装之前,请确保您的系统满足以下要求:

  • PHP 7.3 或更高版本
  • Laravel 6.0 或更高版本
  • 数据库支持:MySQL、PostgreSQL、SQLite 和 MongoDB

安装步骤

1. 通过 Composer 安装包

首先,我们需要通过 Composer 将包添加到项目中:

composer require spatie/laravel-backup

安装完成后,包会自动注册其服务提供者,无需手动添加。

2. 发布配置文件

为了自定义备份行为,我们需要发布配置文件:

php artisan vendor:publish --provider="Spatie\Backup\BackupServiceProvider" --tag=backup-config

这将在 config/backup.php 创建配置文件,让我们可以完全控制备份过程。

3. 发布翻译文件(可选)

如果需要本地化错误消息,可以发布翻译文件:

php artisan vendor:publish --provider="Spatie\Backup\BackupServiceProvider" --tag=backup-translations

配置详解

基本配置

让我们深入了解配置文件的主要部分:

return [
    'backup' => [
        'name' => env('APP_NAME', 'laravel-backup'),
        // 其他配置...
    ]
];
  • name:备份名称,用于监控备份状态,默认为应用名称

源文件配置

'source' => [
    'files' => [
        'include' => [base_path()],
        'exclude' => [base_path('vendor'), base_path('node_modules')],
        'follow_links' => false,
        'ignore_unreadable_directories' => false,
        'relative_path' => null,
    ],
    'databases' => ['mysql'],
]
  • include:包含在备份中的目录和文件
  • exclude:从备份中排除的目录和文件(默认排除 vendor 和 node_modules)
  • follow_links:是否跟踪符号链接
  • ignore_unreadable_directories:是否忽略不可读目录

数据库备份配置

'database_dump_compressor' => null,
'database_dump_file_timestamp_format' => null,
'database_dump_filename_base' => 'database',
'database_dump_file_extension' => '',
  • database_dump_compressor:数据库转储压缩器(如 Gzip)
  • database_dump_file_timestamp_format:转储文件名中的时间戳格式
  • database_dump_filename_base:使用数据库名('database')或连接名('connection')作为文件名基础
  • database_dump_file_extension:自定义转储文件扩展名

目标存储配置

'destination' => [
    'filename_prefix' => '',
    'disks' => ['local'],
],
  • filename_prefix:备份 ZIP 文件的前缀
  • disks:存储备份的磁盘(支持多个磁盘)

高级配置

'temporary_directory' => storage_path('app/backup-temp'),
'password' => env('BACKUP_ARCHIVE_PASSWORD'),
'encryption' => 'default',
  • temporary_directory:临时文件存储目录
  • password:备份加密密码
  • encryption:加密算法(默认使用 AES-256)

数据库转储配置

MySQL/MariaDB 特殊配置

config/database.php 中,可以为每个数据库连接添加转储配置:

'mysql' => [
    'dump' => [
        'dump_binary_path' => '/path/to/binary',
        'use_single_transaction' => true,
        'timeout' => 300,
        'exclude_tables' => ['table1', 'table2'],
        'add_extra_option' => '--optionname=optionvalue',
        'skip_ssl' => true, // 跳过 SSL 验证
    ]
]
  • use_single_transaction:对于 InnoDB 表,避免表锁定
  • timeout:设置转储超时时间(秒)
  • skip_ssl:解决自签名证书问题

备份磁盘配置

默认情况下,备份存储在 storage/app/Laravel/ 目录。建议创建专用磁盘:

  1. config/filesystems.php 中定义新磁盘
  2. config/backup.phpdisks 配置中使用该磁盘名称

定时任务配置

自动化是备份的关键。在 Laravel 中设置定时任务:

// 对于 Laravel 10 及以下版本,在 app/Console/Kernel.php
protected function schedule(Schedule $schedule)
{
    $schedule->command('backup:clean')->daily()->at('01:00');
    $schedule->command('backup:run')->daily()->at('01:30');
}

// 对于 Laravel 11+,在 routes/console.php
Schedule::command('backup:clean')->daily()->at('01:00');
Schedule::command('backup:run')->daily()->at('01:30');

最佳实践建议

  • 避免在 02:00-03:00 执行备份(夏令时问题)
  • 使用 onFailureonSuccess 处理备份结果

监控配置

配置监控以确保备份正常运行:

'monitor_backups' => [
    [
        'name' => env('APP_NAME', 'laravel-backup'),
        'disks' => ['local'],
        'health_checks' => [
            \Spatie\Backup\Tasks\Monitor\HealthChecks\MaximumAgeInDays::class => 1,
            \Spatie\Backup\Tasks\Monitor\HealthChecks\MaximumStorageInMegabytes::class => 5000,
        ],
    ],
]
  • MaximumAgeInDays:备份最大允许天数
  • MaximumStorageInMegabytes:备份最大存储空间

清理策略

配置自动清理旧备份:

'cleanup' => [
    'strategy' => \Spatie\Backup\Tasks\Cleanup\Strategies\DefaultStrategy::class,
    'default_strategy' => [
        'keep_all_backups_for_days' => 7,
        'keep_daily_backups_for_days' => 16,
        'keep_weekly_backups_for_weeks' => 8,
        'keep_monthly_backups_for_months' => 4,
        'keep_yearly_backups_for_years' => 2,
        'delete_oldest_backups_when_using_more_megabytes_than' => 5000,
    ],
]

这种策略实现了智能的备份保留机制,确保您既有足够的备份点,又不会浪费存储空间。

通知配置

配置备份状态通知:

'notifications' => [
    'notifications' => [
        BackupHasFailedNotification::class => ['mail'],
        UnhealthyBackupWasFoundNotification::class => ['mail'],
        // 其他通知...
    ],
    'mail' => [
        'to' => 'your@example.com',
        'from' => [
            'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'),
            'name' => env('MAIL_FROM_NAME', 'Example'),
        ],
    ],
    // Slack 和 Discord 配置...
]

支持邮件、Slack 和 Discord 等多种通知方式。

自定义数据库转储器

如果需要支持特殊数据库或自定义转储逻辑,可以扩展 DbDumperFactory

use Spatie\DbDumper\DbDumper;
use Spatie\DbDumper\DbDumperFactory;

DbDumperFactory::extend('custom-driver', function() {
    return new CustomDumper();
});

class CustomDumper extends DbDumper
{
    // 实现自定义转储逻辑
}

结语

通过本文的详细指南,您应该已经掌握了 Spatie Laravel-Backup 的安装和配置方法。合理配置备份策略不仅能保护您的数据安全,还能优化存储空间使用。建议根据实际业务需求调整备份频率、保留策略和监控设置,确保备份系统既可靠又高效。

laravel-backup A package to backup your Laravel app laravel-backup 项目地址: https://gitcode.com/gh_mirrors/la/laravel-backup

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

左松钦Travis

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值