原始碼和資料庫備份功能
安裝:
composer require spatie/laravel-backup
tips:
-
報錯:
Installation failed, reverting ./composer.json to its original content.
-
原因:
spatie/laravel-backup 最新版需要php7.1
-
解決:
根據不同的PHP版本下載不同版本的spatie/laravel-backup
比如我的專案PHP要求大於5.6 而v3.x-dev支援 PHP 5.5 則composer require spatie/laravel-backup v3.x-dev
釋出配置檔案 config/backup.php
php artisan vendor:publish --provider="Spatie\Backup\BackupServiceProvider"
出現 config/backup.php 檔案說明安裝成功
執行 php artisan
命令可以看到:
backup
backup:clean Remove all backups older than specified number of days in config.
backup:list Display a list of all backups.
backup:monitor Monitor the health of all backups.
backup:run Run the backup.
執行 php artisan backup:run
開始備份
tips:
因為備份時預設會傳送郵件通知,所以如果你的專案還沒有配置郵件會導致如下報錯:
Copying zip failed because: Expected response code 250 but got code "530", with message "530 5.7.1 Authentication required
".
Backup failed because Connection to smtp.mailtrap.io:2525 Timed Out.
#0 /home/vagrant/Code/larabbs/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/AbstractSmtpTransport.php(339): Swift_Transport_AbstractSmtpTransport->getFullResponse(14)
#1 /home/vagrant/Code/larabbs/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/EsmtpTransport.php(305): Swift_Transport_AbstractSmtpTransport->executeCommand('HELO [127.0.0.1...', Array, Array, false, NULL)
.
.
.
#38 /home/vagrant/Code/larabbs/artisan(37): Illuminate\Foundation\Console\Kernel->handle(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#39 {main}
Backup failed because: Expected response code 250 but got code "530", with message "530 5.7.1 Authentication required
".
In AbstractSmtpTransport.php line 473:
Connection to smtp.mailtrap.io:2525 Timed Out
In StreamBuffer.php line 166:
Connection to smtp.mailtrap.io:2525 Timed Out
很簡單我們在命令列中再執行一下 php artisan backup:run -h
可以看到提示:
Usage:
backup:run [options]
Options:
--filename[=FILENAME]
--only-db
--db-name[=DB-NAME] (multiple values allowed)
--only-files
--only-to-disk[=ONLY-TO-DISK]
--disable-notifications // 在當前命令中忽略郵件提醒
-h, --help Display this help message
-q, --quiet Do not output any message
-V, --version Display this application version
--ansi Force ANSI output
--no-ansi Disable ANSI output
-n, --no-interaction Do not ask any interactive question
--env[=ENV] The environment the command should run under
-v|vv|vvv, --verbose Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
Help:
Run the backup.
接著: php artisan backup:run --disable-notifications
如果專案檔案比較多的話則需要一會時間來備份,我們可以先只備份資料庫試一下:php artisan backup:run --disable-notifications --only-db
備份成功可以在 'storage/app/' 中看到 .zip
字尾的壓縮檔案,這就是備份檔案了。(你可以解壓出來看看)
config/laravel-backup.php
:
'destination' => [
/*
* The disk names on which the backups will be stored.
*/
'disks' => [
'local',
],
],
config/filesystems.php
:
'disks' => [
'local' => [
'driver' => 'local',
'root' => storage_path('app'),
],
],
從以上可以 看出 備份的.zip檔案 在 storge/app/http---localhost/檔案中
只備份檔案
php artisan backup:run --only-files
只備份資料庫
php artisan backup:run --only-db
自動備份(linux自帶 定時任務工具crontab 無需安裝)
vagrant provision
配置需要的定時任務
./app/Console/Kernel.php
:
protected function schedule(Schedule $schedule)
{
// $schedule->command('inspire')
// ->hourly();
$schedule->command('backup:clean')->daily()->at('10:00');
$schedule->command('backup:run --disable-notifications')->->everyThirtyMinutes();;//每過30分鐘備份一次
}
排程頻率設定
當然,你可以為你的任務分配多種排程計劃:
方法 | 描述 |
---|---|
->cron('* * * * * *'); |
在自定義的 Cron 時間表上執行該任務 |
->everyMinute(); |
每分鐘執行一次任務 |
->everyFiveMinutes(); |
每五分鐘執行一次任務 |
->everyTenMinutes(); |
每十分鐘執行一次任務 |
->everyFifteenMinutes(); |
每十五分鐘執行一次任務 |
->everyThirtyMinutes(); |
每半小時執行一次任務 |
->hourly(); |
每小時執行一次任務 |
->hourlyAt(17); |
每小時的第 17 分鐘執行一次任務 |
->daily(); |
每天午夜執行一次任務 |
->dailyAt('13:00'); |
每天的 13:00 執行一次任務 |
->twiceDaily(1, 13); |
每天的 1:00 和 13:00 分別執行一次任務 |
->weekly(); |
每週執行一次任務 |
->monthly(); |
每月執行一次任務 |
->monthlyOn(4, '15:00'); |
在每個月的第四天的 15:00 執行一次任務 |
->quarterly(); |
每季度執行一次任務 |
->yearly(); |
每年執行一次任務 |
->timezone('America/New_York'); |
設定時區 |
你也可以直接前往 任務排程文件 複習一下;
hometead 可自動生成cronta定時任務檔案:
tips: schedule: true
冒號後面必須空格,否則語法錯誤
Homestead.yaml:
sites:
- map: wangj_task.io
to: /home/vagrant/code/Task/public
schedule: true #務必空格!!!
vagrant@homestead:/etc/cron.d$ ls
mdadm php popularity-contest sysstat wangjtaskiovagrant@homestead:/etc/cron.d$ cat wangjtaskio
#每分鐘執行一次 artisan schedule:run
* * * * * vagrant . /home/vagrant/.profile;
/usr/bin/php/home/vagrant/code/Task/public/../artisan schedule:run >> /dev/null 2>&1
備份檔案預設放在該目錄: ./storage/app/
備份檔案格式為 .zip
本作品採用《CC 協議》,轉載必須註明作者和本文連結