基于 Laravel 扩展包 laravel-db-snapshots 快速导入导出数据库快照

功能简介

顾名思义,laravel-db-snapshots 是一个 Laravel 扩展包,可用于在 Laravel 项目中快速创建或加载数据库快照,即我们通常所说的导入导出数据库,这个扩展包在迁移网站时非常有用,亦可作为数据库备份工具。相对于直接使用特定数据库的导入导出命令而言,它的优点是对不同数据库提供了统一的操作命令,让你不需要关心不同数据库的实现细节,同时让操作流程更加标准化,有利于团队协作。

接下来学院君将给大家演示这个扩展包的安装和使用,目前,该扩展包已经支持 Laravel 6.0。

安装配置

首先进入项目根目录,通过 Composer 安装这个扩展包:

composer require spatie/laravel-db-snapshots

然后打开配置文件 config/filesystem.php,在 disks 中新增 snapshots 配置项:

// ...
'disks' => [
    // ...
    'snapshots' => [
        'driver' => 'local',
        'root' => database_path('snapshots'),
    ],
// ...  

如果你需要对 laravel-db-snapshots 扩展包进行更多自定义配置,还可以发布扩展包的配置文件到 config 目录下:

php artisan vendor:publish --provider="Spatie\DbSnapshots\DbSnapshotsServiceProvider" --tag="config"

至此,扩展包的安装配置工作都已经完成了,接下来,我们就可以使用这个扩展包了。

使用入门

laravel-db-snapshots 扩展包通过 Artisan 命令对数据库快照进行管理。

创建快照

我们可以通过 Artisan 命令 snapshot:create 创建快照(快照名称可选,默认是日期时间作为快照名),也就是导出数据库:

php artisan snapshot:create my-first-dump

我们可以在 database/snapshots 目录下看到刚刚生成的快照文件:

还可以在创建时对快照进行压缩:

php artisan snapshot:create --compress

可以看到,生成的快照文件相较于不压缩的时候小了很多。

注:你可以通过配置调度任务定时生成快照实现对数据库的备份。

加载快照

可以通过 Artisan 命令 snapshot:load 加载快照到数据库,也就是导入数据库:

php artisan snapshot:load my-first-dump

还可以在导入时指定数据库连接名称:

php artisan snapshot:load my-first-dump --connection=connectionName

查看快照列表

我们可以通过 Artisan 命令 snapshot:list 查看所有快照列表:

php artisan snapshot:list

删除快照

最后,还可以通过 Artisan 命令 snapshot:delete 删除指定快照:

php artisan snapshot:delete my-first-dump

触发事件

在对数据库快照进行创建、加载、删除等操作时,会触发相应的数据库事件,你可以在应用中对这些事件进行监听和自定义处理:

  • Spatie\DbSnapshots\Events\CreatingSnapshot: 快照创建前触发
  • Spatie\DbSnapshots\Events\CreatedSnapshot: 快照创建后触发
  • Spatie\DbSnapshots\Events\LoadingSnapshot: 快照加载前触发
  • Spatie\DbSnapshots\Events\LoadedSnapshot: 快照加载后触发
  • Spatie\DbSnapshots\Events\DeletingSnapshot: 快照删除前触发
  • Spatie\DbSnapshots\Events\DeletedSnapshot: 快照删除后触发

更多使用细节请参考该扩展包的官方文档