To manually dump the database you can run the following one-liner code
mysqldump -u[user] -p[pass] [db] > [file_path]
But what if you want to automate the process? Listing down the steps one by one:
- Setup cron entry to your server
* * * * * php /path-to-your-project/artisan schedule:run >> /dev/null 2>&1
- Create a command BackupDatabase by running the following code:
php artisan make:command BackupDatabase
- Navigate to app/Console/Commands/BackupDatabase.php and replace the code the following:
<?php namespace App\Console\Commands; use Illuminate\Console\Command; use Symfony\Component\Process\Process; use Symfony\Component\Process\Exception\ProcessFailedException; class BackupDatabase extends Command { protected $signature = 'db:backup'; protected $description = 'Backup the database'; protected $process; public function __construct() { parent::__construct(); $this->process = new Process(sprintf( 'mysqldump -u%s -p%s %s > %s', config('database.connections.mysql.username'), config('database.connections.mysql.password'), config('database.connections.mysql.database'), storage_path('app/backups/backup-' . time() . '.sql') )); } public function handle() { try { $this->process->mustRun(); $this->info('The backup has been proceed successfully.'); } catch (ProcessFailedException $exception) { $this->error('The backup process has been failed.'); } } }
- Schedule the backup task, navigate to app/Console/Kernel.php and append the following line of code inside schedule method to run database backups every Saturday at 11PM. You can set the frequency as per your requirements
$schedule->command('db:backup')->saturdays()->at('23:00');
- Create backups directory inside storage/app directory and place a .gitignore file inside backups directory with the following code
* !.gitignore
That’s it you’ve now enabled weekly automated database backups
For more information and credits: https://pineco.de/scheduling-mysql-backups-with-laravel/