データベースのバックアップが作成できる Laravelフレームワーク用のプラグイン「laravel-db-snapshots」の紹介です。
- Laravelプロジェクトで使っている " DBのバックアップ作成
"、" DBの復旧
" がコマンド一発で出来るようになります

laravel-db-snapshots は コマンドライン上から ' composer
' コマンドを使って導入します。また、このパッケージは PHP のバージョンが ' 7.0 以上
' 、Laravelのバージョンが ' 5.4.30 以上
' の必要があります。
# packageのインストール
composer require spatie/laravel-db-snapshots
laravel-db-snapshots のインストールが完了すれば、次は ' config/app.php ' サービスプロバイダーパッケージを登録をします。
* この項目はLaravel 5.5以上であれば必要ありません
/* Laravel 5.5以上では必要ありません */
// config/app.php
'providers' => [
// ...
Spatie\DbSnapshots\DbSnapshotsServiceProvider::class,
];
続いて、データベースのダンプしたファイルの保存先の設定の為に ' config/filesystems.php
' 内に 以下の配列を追加します。
// config/filesystems.php
// disks
'disks' => [
// こちらの内容を記述
'snapshots' => [
'driver' => 'local',
'root' => database_path('snapshots'), // database/snapshots内に保存
],
// ...
最後に コマンドライン上から以下の ' publish
' コマンドを実行して設定ファイルを発行します。
# laravel-db-snapshots用のコンフィグファイルを発行
php artisan vendor:publish --provider="Spatie\DbSnapshots\DbSnapshotsServiceProvider" --tag="config"
上記の ' vender:publish
' コマンドを実行すると、' config ' フォルダ内に ' db-snapshots.php
'という設定ファイルが作成されます。
return [
/**
* disk名
*/
'disk' => 'snapshots',
/**
* データベースの設定
*/
// default_connection内の値が nullだとdefaultデータベーススナップショットが作成されます。
'default_connection' => null,
/**
* 一時ファイルの保存先
*/
'temporary_directory_path' => storage_path('app/laravel-db-snapshots/temp'),
];
以上で初期設定は完了です。
laravel-db-snapshots ' php artisan
' 経由で実行するパッケージです。
' php artisan snapshot:create
' コマンドを実行すると、データベースのダンプファイルが ' database/snapshots
' 内に SQLファイル形式で作成されます。
# タイムスタンプ名.sqlで データベースのダンプファイルが作成されます
# 例 : `2018-04-13_00-42-32.sql`
php artisan snapshot:create
* phpMyAdmin
の DBのエクスポート機能と 同等の事が出来るとイメージすれば、わかりやすいかもしれません。
/* デフォルトの Users データベースをダンプして作成されたSQLファイル */
PRAGMA foreign_keys=OFF;
BEGIN TRANSACTION;
CREATE TABLE IF NOT EXISTS "migrations" ("id" integer not null primary key autoincrement, "migration" varchar not null, "batch" integer not null);
INSERT INTO migrations VALUES(1,'2014_10_12_000000_create_users_table',1);
INSERT INTO migrations VALUES(2,'2014_10_12_100000_create_password_resets_table',1);
CREATE TABLE IF NOT EXISTS "users" ("id" integer not null primary key autoincrement, "name" varchar not null, "email" varchar not null, "password" varchar not null, "remember_token" varchar null, "created_at" datetime null, "updated_at" datetime null);
CREATE TABLE IF NOT EXISTS "password_resets" ("email" varchar not null, "token" varchar not null, "created_at" datetime null);
DELETE FROM sqlite_sequence;
INSERT INTO sqlite_sequence VALUES('migrations',2);
CREATE UNIQUE INDEX "users_email_unique" on "users" ("email");
CREATE INDEX "password_resets_email_index" on "password_resets" ("email");
COMMIT;
' snapshot:create
' コマンドに引数を渡せば、作成するバックアップファイルに任意の名前を付けることができます。
# 名前付き * my-first.dump.sqlが作成されます
php artisan snapshot:create my-first-dump
' snapshot:list
' コマンドを実行すれば、作成したダンプファイルをリスト表示してくれます。
# database/snapshotsに保存されているDBバックアップをリスト表示
php artisan snapshot:list
snapshot:ist
' コマンドを使ってスナップショットしたデータベースの一覧を表示 
' snapshot:load
' コマンドを使うと、作成したバックアップに内容を反映させることができます。
# データベースのデータを 作成したmy-first-dumpのデータに切り替える
php artisan snapshot:load my-first-dump
' snapshot:load
' コマンドの後に ' --connection
' パラメーターを渡すとデータベースを指定することが出来ます。
複数のデータベースを使っているプロジェクトでバックアップを撮りたい時はこのパラメーターを使います。
# DBのコネクションを指定する場合
php artisan snapshot:load my-backup --connection=connectionName
' snapshot:delete
' は作成したDBバックアップを削除するコマンドです。
# my-first-dumpを削除
php artisan snapshot:delete my-first-dump
データベースのバックアップがLaravelプロジェクトから直に実行出来るので、冗長性も上げることができそうです。
また、Laravelに用意されている ' Task Scheduling
' と合わせて使えば、自動で定期的にDBバックアップを取るなんて事も簡単にできます。
今回は紹介していませんが、コードから直接 laravel-db-snapshotsを呼びせるAPIも用意されているので、気になった人はゼヒ×2チェックしてみてください!
GitHub : spatie/laravel-db-snapshots