Backup database hàng ngày giúp hệ thống hơn trong quá trình hoạt động, tránh các sự cố bị mất database, xóa hoặc bị hack
Bước 1: Tạo Command
php artisan make:command DatabaseBackUp
Bây giờ chúng ta đã tạo ra file DatabaseBackUp.php trong thư mục console, nào cùng viết code cho file này
app/Console/Commands/DatabaseBackUp.php
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
use Carbon\Carbon;
class DatabaseBackUp extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'database:backup';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Command description';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct() {
parent::__construct();
}
/**
* Execute the console command.
*
* @return int
*/
public function handle()
{
$filename = "backup-" . Carbon::now()->format('Y-m-d') . ".gz";
$command = "mysqldump --user=" . env('DB_USERNAME') ." --password=" . env('DB_PASSWORD') . " --host=" . env('DB_HOST') . " " . env('DB_DATABASE') . " | gzip > " . storage_path() . "/app/backup/" . $filename;
$returnVar = NULL;
$output = NULL;
exec($command, $output, $returnVar);
}
}
Bước 2: Tạo Folder backup
Trong bước này, chúng ta tạo thư mục backup trong thư mục storage, đường dẫn như sau
storage/app/backup
Bước 3: Schedule Command
Gọi lệnh backup trong Schedule của Laravel
app/Console/Kernel.php
<?php
namespace App\Console;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
class Kernel extends ConsoleKernel
{
/**
* The Artisan commands provided by your application.
*
* @var array
*/
protected $commands = [
'App\Console\Commands\DatabaseBackUp'
];
/**
* Define the application's command schedule.
*
* @param \Illuminate\Console\Scheduling\Schedule $schedule
* @return void
*/
protected function schedule(Schedule $schedule)
{
$schedule->command('database:backup')->daily();
}
/**
* Register the commands for the application.
*
* @return void
*/
protected function commands()
{
$this->load(__DIR__.'/Commands');
require base_path('routes/console.php');
}
}
Hoàn tất
Ngoài ra, bạn có thể kiểm tra câu lệnh đã chạy tốt hay chưa bằng cách chạy lệnh sau :
php artisan database:backup
Nó sẽ tạo ra 1 file backup trong thư mục backup. Chạy thử file backup này vào 1 database tạm xem dữ liệu đã đúng hay chưa
Oke, mọi thứ đã sẵn sàng thi triển khai lên server thôi nào.