2017 © Pedro Peláez
 

library laravel-db-snapshots

Quickly dump and load databases

image

spatie/laravel-db-snapshots

Quickly dump and load databases

  • Thursday, May 3, 2018
  • by Spatie
  • Repository
  • 8 Watchers
  • 404 Stars
  • 35,437 Installations
  • PHP
  • 2 Dependents
  • 0 Suggesters
  • 30 Forks
  • 0 Open issues
  • 11 Versions
  • 22 % Grown

The README.md

Quickly dump and load databases

Latest Version on Packagist Software License run-tests Total Downloads, (*1)

This package provides Artisan commands to quickly dump and load databases in a Laravel application., (*2)

# 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

This package supports MySQL, PostgreSQL and SQLite., (*3)

Support us

, (*4)

We invest a lot of resources into creating best in class open source packages. You can support us by buying one of our paid products., (*5)

We highly appreciate you sending us a postcard from your hometown, mentioning which of our package(s) you are using. You'll find our address on our contact page. We publish all received postcards on our virtual postcard wall., (*6)

Support us

We invest a lot of resources into creating best in class open source packages. You can support us by buying one of our paid products., (*7)

We highly appreciate you sending us a postcard from your hometown, mentioning which of our package(s) you are using. You'll find our address on our contact page. We publish all received postcards on our virtual postcard wall., (*8)

Installation

For PHP 7.x and/or Laravel 6.x, use v1.x of this package., (*9)

You can install the package via Composer:, (*10)

composer require spatie/laravel-db-snapshots

You should add a disk named snapshots to config/filesystems.php on which the snapshots will be saved. This would be a typical configuration:, (*11)

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

Optionally, you may publish the configuration file with:, (*12)

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

This is the content of the published file:, (*13)

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,
];

Usage

To create a snapshot (which is just a dump from the database) run:, (*14)

php artisan snapshot:create my-first-dump

Giving your snapshot a name is optional. If you don't pass a name the current date time will be used:, (*15)

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

Maybe you only want to snapshot a couple of tables. You can do this by passing the --table multiple times or as a comma separated list:, (*16)

# 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

You may want to exclude some tables from snapshot. You can do this by passing the --exclude multiple times or as a comma separated list:, (*17)

# 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

Note: if you pass --table and --exclude in the same time it will use --table to create the snapshot and it's ignore the --exclude, (*18)

When creating snapshots, you can optionally create compressed snapshots. To do this either pass the --compress option on the command line, or set the db-snapshots.compress configuration option to true:, (*19)

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

After you've made some changes to the database you can create another snapshot:, (*20)

php artisan snapshot:create my-second-dump

To load a previous dump issue this command:, (*21)

php artisan snapshot:load my-first-dump

To load a previous dump to another DB connection:, (*22)

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

By default, snapshot:load will drop all existing tables in the database. If you don't want this behaviour, you can pass the --drop-tables=0 option:, (*23)

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

By default, snapshot:load will load the entire snapshot into memory which may cause problems when using large files. To avoid this, you can pass the --stream option to stream the snapshot to the database one statement at a time:, (*24)

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

To list all the dumps run:, (*25)

php artisan snapshot:list

A dump can be deleted with:, (*26)

php artisan snapshot:delete my-first-dump

To remove all backups except the most recent 2, (*27)

php artisan snapshot:cleanup --keep=2

If you need to pass extra options to the underlying db-dumper, add a dump key to the database connection with a key of addExtraOption and a value of the option. For example, to prevent the Postgres db dumper from setting the owner, you'd add:, (*28)

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

To the pgsql connection in database.php, (*29)

Events

There are several events fired which can be used to perform some logic of your own:, (*30)

  • Spatie\DbSnapshots\Events\CreatingSnapshot: will be fired before a snapshot is created
  • Spatie\DbSnapshots\Events\CreatedSnapshot: will be fired after a snapshot has been created
  • Spatie\DbSnapshots\Events\LoadingSnapshot: will be fired before a snapshot is loaded
  • Spatie\DbSnapshots\Events\LoadedSnapshot: will be fired after a snapshot has been loaded
  • Spatie\DbSnapshots\Events\DeletingSnapshot: will be fired before a snapshot is deleted
  • Spatie\DbSnapshots\Events\DeletedSnapshot: will be fired after a snapshot has been deleted

Testing

composer test

Changelog

Please see CHANGELOG for more information on what has changed recently., (*31)

Contributing

Please see CONTRIBUTING for details., (*32)

Security Vulnerabilities

Please review our security policy on how to report security vulnerabilities., (*33)

Credits

License

The MIT License (MIT). Please see License File for more information., (*34)

The Versions