spatie/laravel-db-snapshots

快速导出和加载数据库

2.6.1 2024-04-02 06:54 UTC

README

Latest Version on Packagist Software License run-tests Total Downloads

此包提供Artisan命令,以快速在Laravel应用程序中导出和加载数据库。

# Create a dump
php artisan snapshot:create my-first-dump

# Make some changes to your db
# ...

# Create another dump
php artisan snapshot:create my-second-dump

# Load up the first dump
php artisan snapshot:load my-first-dump

# Load up the latest dump
php artisan snapshot:load --latest

# List all snapshots
php artisan snapshot:list

# Remove old snapshots. Keeping only the most recent
php artisan snapshot:cleanup --keep=2

此包支持MySQL、PostgreSQL和SQLite。

支持我们

我们投入大量资源来创建 最佳开源包。您可以通过 购买我们的付费产品之一 来支持我们。

我们非常感激您从家乡寄给我们一张明信片,说明您正在使用我们的哪个包。您可以在 我们的联系页面 上找到我们的地址。我们将所有收到的明信片发布在我们的 虚拟明信片墙 上。

支持我们

我们投入大量资源来创建 最佳开源包。您可以通过 购买我们的付费产品之一 来支持我们。

我们非常感激您从家乡寄给我们一张明信片,说明您正在使用我们的哪个包。您可以在 我们的联系页面 上找到我们的地址。我们将所有收到的明信片发布在我们的 虚拟明信片墙 上。

安装

对于PHP 7.x和/或Laravel 6.x,请使用此包的v1.x版本。

您可以通过Composer安装此包

composer require spatie/laravel-db-snapshots

您应该在config/filesystems.php中添加一个名为snapshots的磁盘,用于保存快照。这将是典型的配置

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

可选地,您可以使用以下命令发布配置文件

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

这是已发布文件的正文

return [

    /*
     * The name of the disk on which the snapshots are stored.
     */
    'disk' => 'snapshots',

    /*
     * The connection to be used to create snapshots. Set this to null
     * to use the default configured in `config/databases.php`
     */
    'default_connection' => null,

    /*
     * The directory where temporary files will be stored.
     */
    'temporary_directory_path' => storage_path('app/laravel-db-snapshots/temp'),

    /*
     * Create dump files that are gzipped
     */
    'compress' => false,

    /*
     * Only these tables will be included in the snapshot. Set to `null` to include all tables.
     *
     * Default: `null`
     */
    'tables' => null,

    /*
     * All tables will be included in the snapshot expect this tables. Set to `null` to include all tables.
     *
     * Default: `null`
     */
    'exclude' => null,
];

使用方法

要创建快照(即从数据库中导出的备份),请运行

php artisan snapshot:create my-first-dump

给您的快照命名是可选的。如果您不传递名称,则将使用当前日期和时间

# Creates a snapshot named something like `2017-03-17 14:31`
php artisan snapshot:create

也许您只想备份几个表。您可以通过多次传递--table或以逗号分隔的列表来做到这一点

# Both commands create a snapshot containing only the posts and users tables:
php artisan snapshot:create --table=posts,users
php artisan snapshot:create --table=posts --table=users

您可能希望排除一些表不进行备份。您可以通过多次传递--exclude或以逗号分隔的列表来做到这一点

# create snapshot from all tables excluding the users and posts
php artisan snapshot:create --exclude=posts,users
php artisan snapshot:create --exclude=posts --exclude=users

注意:如果同时传递--table--exclude,它将使用--table来创建快照并忽略--exclude

在创建快照时,您可以创建压缩快照。为此,可以在命令行上传递--compress选项,或将配置选项db-snapshots.compress设置为true

# Creates a snapshot named my-compressed-dump.sql.gz
php artisan snapshot:create my-compressed-dump --compress

在数据库中做了些更改后,您可以创建另一个快照

php artisan snapshot:create my-second-dump

要加载以前的导出,请运行此命令

php artisan snapshot:load my-first-dump

要将以前的导出加载到另一个数据库连接

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

默认情况下,snapshot:load将删除数据库中所有现有的表。如果您不希望这种行为,请传递--drop-tables=0选项

php artisan snapshot:load my-first-dump --drop-tables=0

默认情况下,snapshot:load将整个快照加载到内存中,这可能会在处理大文件时引起问题。为了避免这种情况,您可以将--stream选项传递给一次流式传输一个语句到数据库的快照

php artisan snapshot:load my-first-dump --stream

要列出所有导出,请运行

php artisan snapshot:list

可以使用以下方式删除导出

php artisan snapshot:delete my-first-dump

要删除除最近两个以外的所有备份

php artisan snapshot:cleanup --keep=2

如果您需要向底层的db-dumper传递额外的选项,请在数据库的连接中添加一个具有dump键的键,其键为addExtraOption,其值为选项。例如,要防止Postgres数据库导出程序设置所有者,您将添加:

'dump' => [
    'addExtraOption' => '--no-owner',
],

database.php中的pgsql连接中

事件

有一些事件被触发,可以用来执行您自己的逻辑

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

测试

composer test

变更日志

请参阅变更日志以获取有关最近更改的更多信息。

贡献

请参阅贡献指南以获取详细信息。

安全漏洞

请查阅我们的安全策略了解如何报告安全漏洞。

致谢

许可证

MIT许可证(MIT)。请参阅许可证文件以获取更多信息。