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

Laravel で データベースの定期バックアップとローテーションを行う

● 1. spatie/laravel-backup のインストール

composer require spatie/laravel-backup

● 2. 設定ファイル ( config/backup.php ) の自動生成

php artisan vendor:publish --provider="Spatie\Backup\BackupServiceProvider"

結果

Copied File [/vendor/spatie/laravel-backup/config/backup.php] To [/config/backup.php]
Copied Directory [/vendor/spatie/laravel-backup/resources/lang] To [/resources/lang/vendor/backup]

● 3. 設定ファイルの変更

config/backup.php を変更します

        'mail' => [
            'to' => 'your@example.com',

 ↓

        'mail' => [
            'to' => array_map('trim', explode(',', env('BACKUP_MAIL_TO'))),

( .env から読み込むようにします。)

.env にメール送信先を追加

# DB Backup
BACKUP_MAIL_TO=yourname@your.dcomain.com

引用: https://bit.ly/34a2TXt

● DBの手動バックアップの実行

バックアップの実行 (データベースのみ)

php artisan backup:run --only-db

バックアップの実行 (データベースのみ, 通知機能なし)

php artisan backup:run  --only-db  --disable-notifications

古いバックアップファイルの削除

php artisan backup:clean

設定ファイルにどの期間まで保持するかを設定できるのでそこを好きな設定に書き換えて変更しておきます。

バックアップ先は

storage/app/<アプリ名>/2020-12-31-10-15-00.zip

のようにローカルディスクの中のアプリ名の中に日付のファイル名で保存されます。 変更する場合は設定ファイルを変更します。

● 定期バックアップの設定と実行

app/Console/Kernel.php に次のように記述します

通知が不要な場合は --disable-notifications を後ろにつけます。

        // DBの定期バックアップ
        $schedule->command('backup:clean')->daily();
        $schedule->command('backup:run --only-db')->daily();

->daily() をつけることで、デイリーで実行しています。 外すと 1分ごとにバックアップが実行されます。(Laravelの設定によりますが。)

● バックアップされたファイルの確認

php artisan backup:list
+---------+-------+-----------+---------+--------------+---------------+--------------+
| Name    | Disk  | Reachable | Healthy | # of backups | Newest backup | Used storage |
+---------+-------+-----------+---------+--------------+---------------+--------------+
| my-app | local | ✅         | ✅       |            8 | 0.00 (2分前)  |   1021.23 KB |
+---------+-------+-----------+---------+--------------+---------------+--------------+

というふうに表示されます。

No.1883
10/26 11:59

edit