Автоматизация резервного копирования баз данных c Laravel

Источник: «Automating Database Backups with Laravel's Task Scheduler and Cloud Storage»
Обеспечение регулярного резервного копирования баз данных крайне важно для любого приложения. Планировщик задач Laravel в сочетании с облачным хранилищем предоставляет эффективный способ автоматизировать этот процесс. Давайте рассмотрим, как реализовать автоматическое резервное копирование баз данных с помощью Laravel и хранить его в облаке.

Настройка команды резервного копирования

Сначала необходимо создать команду Artisan для процесса резервного копирования:

php artisan make:command DatabaseBackup

В только что созданном файле команды:

namespace App\Console\Commands;

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

class DatabaseBackup extends Command
{
protected $signature = 'db:backup';
protected $description = 'Backup the database to cloud storage';

public function handle()
{
$filename = "backup-" . now()->format('Y-m-d') . ".sql";
$path = storage_path("app/backup/{$filename}");

// Создание резервной копии
$command = "mysqldump --user=" . env('DB_USERNAME') ." --password=" . env('DB_PASSWORD')
. " --host=" . env('DB_HOST') . " " . env('DB_DATABASE')
. " > " . $path;

exec($command);

// Загрузка в облачное хранилище (например, AWS S3).
Storage::disk('s3')->put("backups/{$filename}", file_get_contents($path));
unlink($path); // Удаление локальной копии

$this->info('Database backup uploaded to S3.');
}
}

Планирование резервного копирования

Добавим выполнение резервного копирования в файле app/Console/Kernel.php:

protected function schedule(Schedule $schedule)
{
$schedule->command('db:backup')->daily()->at('01:00');
}

Это запланирует ежедневное выполнение резервного копирования в 1:00 утра.

Настройка облачного хранилища

Убедитесь, что облачное хранилище сконфигурировано в config/filesystems.php:

's3' => [
'driver' => 's3',
'key' => env('AWS_ACCESS_KEY_ID'),
'secret' => env('AWS_SECRET_ACCESS_KEY'),
'region' => env('AWS_DEFAULT_REGION'),
'bucket' => env('AWS_BUCKET'),
'url' => env('AWS_URL'),
'endpoint' => env('AWS_ENDPOINT'),
],

Не забудьте установить соответствующие переменные среды в .env файле.

Реализовав такую настройку, вы получите регулярное резервное копирование базы данных и её безопасное хранение в облаке. Этот подход обеспечивает дополнительный уровень защиты данных и делает аварийное восстановление более управляемым.

Не забывайте тщательно тестировать процесс резервного копирования и периодически проверять целостность резервных копий, чтобы убедиться, что они действительны и могут быть восстановлены в случае необходимости.

Комментарии


Дополнительные материалы

Предыдущая Статья

Новое в Symfony 7.2: Атрибут AsMessage

Следующая Статья

Новое в Symfony 7.2: Именованные сериализаторы