Setting of Auto backup of Mysql database in a laravel project

 When we work on any database project, it’s always good to set up autoback of the database on daily basis. We can set up a cron job for backing up a MySQL database in a Laravel project, follow these steps:
 

1. Create a Laravel Artisan Command

  1. Run the following command to create a custom Artisan command:
    php artisan make:command BackupDatabase
  2. Open the generated file in app/Console/Commands/BackupDatabase.php and update its content:

     

    <?php

    namespace App\Console\Commands;

    use Illuminate\Console\Command;
    use Illuminate\Support\Facades\Storage;

    class BackupDatabase extends Command
    {
    /**
    * The name and signature of the console command.
    *
    * @var string
    */
    protected $signature = ‘backup:database’;

    /**
    * The console command description.
    *
    * @var string
    */
    protected $description = ‘Backup the MySQL database’;

    /**
    * Execute the console command.
    */
    public function handle()
    {
    $dbName = env(‘DB_DATABASE’);
    $dbUser = env(‘DB_USERNAME’);
    $dbPassword = env(‘DB_PASSWORD’);
    $dbHost = env(‘DB_HOST’, ‘127.0.0.1’);

    $backupPath = storage_path(‘app/backups/’ . date(‘Y-m-d_H-i-s’) . ‘_backup.sql’);

    // Ensure the backup directory exists
    Storage::makeDirectory(‘backups’);

    $command = sprintf(
    ‘mysqldump -u%s -p%s -h%s %s > %s’,
    escapeshellarg($dbUser),
    escapeshellarg($dbPassword),
    escapeshellarg($dbHost),
    escapeshellarg($dbName),
    escapeshellarg($backupPath)
    );

    $result = null;
    $output = null;

    exec($command, $output, $result);

    if ($result === 0) {
    $this->info(‘Database backup created successfully: ‘ . $backupPath);
    } else {
    $this->error(‘Failed to create database backup.’);
    }
    }
    }



2. Schedule the Command in Laravel

  1. Open the app/Console/Kernel.php file.
  2. Register the new command in the schedule method:
    protected function schedule(Schedule $schedule)
    {
    $schedule->command('backup:database')->dailyAt('02:00');
    }

    This schedules the backup to run daily at 2:00 AM. Adjust the time as needed.


3. Set Up the Cron Job

  1. Open the cron jobs configuration file:
    crontab -e
  2. Add the following line to execute Laravel’s scheduler every minute:
    * * * * * php /path-to-your-laravel-project/artisan schedule:run >> /dev/null 2>&1

    Replace /path-to-your-laravel-project with the actual path to your Laravel application.


4. Verify Backup Files

  1. The backups will be stored in the storage/app/backups directory.
  2. Ensure the directory is writable by the web server and the Laravel application.

5. Additional Suggestions

  • Compression: Modify the command to compress the backup:
    $command = sprintf(
    'mysqldump -u%s -p%s -h%s %s | gzip > %s.gz',
    escapeshellarg($dbUser),
    escapeshellarg($dbPassword),
    escapeshellarg($dbHost),
    escapeshellarg($dbName),
    escapeshellarg($backupPath)
    );
  • Cloud Storage: Use Laravel’s filesystem to store the backups on S3, Google Cloud Storage, etc.

Leave a Reply

Your email address will not be published. Required fields are marked *