人気のPHP WEBアプリケーションフレームワークLaravelのTipsを記録していきます

Laravel で DB のバックアップを簡単にとる (laravel-db-snapshots)

laravel-db-snapshotsを使用すると、Laravel で DBの構造とデータをまとめてバックアップ / リストア することができます。 (データのみの取得はできないようです。)

● spatie/laravel-db-snapshots

composer コマンドでインストールします

composer require spatie/laravel-db-snapshots

● インストールの確認

インストールを確認します。

php artisan
 snapshot
  snapshot:create      Create a new snapshot.
  snapshot:delete      Delete a snapshot.
  snapshot:list        List all the snapshots.
  snapshot:load        Load up a snapshot.

● バックアップを取るディスクを設定する

config/filesystems.php:56

    'disks' => [

        'local' => [
            'driver' => 'local',
            'root' => storage_path('app'),
        ],

        // ここから追加
        'snapshots' => [
            'driver' => 'local',
            'root' => database_path('snapshots'),
        ],
        // ここまで追加

(実際のディレクトリはバックアップを取るときに自動作成されます)

● バックアップを取る

テストで database/snapshots/my-first-dump.sql を作成します

php artisan snapshot:create my-first-dump

ファイル名を日付にしてもいいと思います。

php artisan snapshot:create 2019_03_12

何度もとるなら時刻も入れておくといいと思います。

php artisan snapshot:create 2019_04_16__03_19_00

なお 同名のファイルの場合は上書き されますので注意してください。

● ファイル名自動でバックアップを取る

php artisan snapshot:create
Creating new snapshot...
Snapshot `2019-06-04_08-06-49` created (size: 1.37 MB)

2019-06-04_08-06-49 というフォーマットで自動的にファイル名を命名してバックアップを取ってくれます。

●バックアップファイルからリストア(データを流し込む)する

バックアップファイル一覧の確認

php artisan snapshot:list

一覧の Name を指定してリストアを実行します。

リストアの実行

php artisan snapshot:load <バックアップName>

● リストアエラー「 The "force" option does not exist. 」が出る場合

本番環境 (.env に APP_ENV=production が設定されている場合)ではリストアはエラーとなります。

一時的に戻します

.env

APP_ENV=production

 ↓

APP_ENV=local

これで実行できます。 .env ファイルの中身は戻しておきましょう

参考: FTPにバックアップを取る場合は
http://bit.ly/35EXQwg
http://bit.ly/34BWLUT

● docker環境では動作しない

mysqldumpコマンドを使ってバックアップを作成するのでこちらのコマンドを実行できるようにすればdocker環境でも使用することができます

No.1459
12/16 10:16

edit