Laravel 7.x ile veri tabanımızın günlük, haftalık veya aylık otomatik yedeklerini oluşturabiliyoruz. Şimdi sıfırdan laravel kurulumu ile başlayarak nasıl otomatik yedek alabileceğimizi görelim.

1. Laravel Kurulumu:

Aşağıdaki komut ile laravel projemizi oluşturuyoruz:

composer create-project --prefer-dist laravel/laravel blog

2.  Command Oluşturma:

Bu aşamada artisan komutu ile command oluşturuyoruz:

php artisan make:command DatabaseBackUp

Artisan komutumuz ile birlikte app/ Console/ Commands/ DatabaseBackUp.php dosyamızı oluşturduk. Şimdi günlük yedeklemeyi yapacağımız kodu ekleyelim:

namespace AppConsoleCommands;
use IlluminateConsoleCommand;
use CarbonCarbon;
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);
}
}

3. Backup Dosyasının Oluşturulması:

Bu aşamada backup dosyalarımızı barındıracağımız klasorümüzü storage içinde oluşturuyoruz. Dosya yolumuzun şu şekilde olması gerekiyor: storage/app/backup. Dosya için tüm izinlere sahip olduğunuzdan emin olmanız gerekir.

4. Yedekleme Zamanlamasının Oluşturulması:

Bu aşamada daha önce oluşturduğumuz backup komutunun zamanlamasını yapıyoruz. Bunun için kernel.php dosyamıza aşağıdaki kodu ekliyoruz:

namespace AppConsole;
/**
use IlluminateConsole Scheduling Schedule;
use IlluminateFoundation Console Kernel as ConsoleKernel;
/**
class Kernel extends ConsoleKernel
{
/**
* The Artisan commands provided by your application.
*
* @var array
*/
protected $commands = [
'AppConsoleCommands DatabaseBackUp'
];
/**
* Define the application's command schedule.
*
* @param IlluminateConsoleScheduling 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' );
}
}

Evet yedekleme işlemimizi tamamladık. Şimdi sistemimizin çalıştığını kontrol etmek için aşağıdaki komutu uygulayarak yedek dosyamızı kontrol edeceğiz:

php artisan database:backup

Gördüğünüz gibi laravel ile otomatik veritabanı yedeği oluşturmak bu kadar kolay. İsterseniz günlük, haftalık veya aylık otomatik yedek oluşturabilirsiniz.