Scheduling MySQL backups with Laravel

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:

    1. Setup cron entry to your server
      * * * * * php /path-to-your-project/artisan schedule:run >> /dev/null 2>&1
    2. Create a command BackupDatabase by running the following code:
      php artisan make:command BackupDatabase
    3. 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.');
              }
          }
      }
    4. 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');
    5. 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/